diff --git a/DEPS b/DEPS index ec6e880..71522a2 100644 --- a/DEPS +++ b/DEPS
@@ -105,6 +105,7 @@ # Bots that don't consume render test goldens can skip downloading # them. + # TODO(crbug.com/1103836): Remove after removing infra/ code. 'skip_render_test_goldens_download': False, # Bots that don't consume WPR archives can skip downloading @@ -203,11 +204,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': '9f3f2c24ae4405aea8f4e35cd9e2741e97c0b862', + 'skia_revision': '5f9ba6953f8dcc47aac69b3b212cf5ba7ae62c5a', # 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': '615ae5f5342ad5ff262494d26287ed403296141c', + 'v8_revision': '8c8f17af29f1a4073630ba7ca924ddb4ca45abd6', # 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. @@ -215,7 +216,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '8670d6183a8439622e5f4527e4971bafb1a9ffa7', + 'angle_revision': '19a302fca592e3825998b78b7d7d075c51f3c4f6', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -230,7 +231,7 @@ # # Note this revision should be updated with # third_party/boringssl/roll_boringssl.py, not roll-dep. - 'boringssl_revision': '5656fec512a8dfd2833fbf47b6aaa76364c26fad', + 'boringssl_revision': '3094902fcdc2db2cc832fa854b9a6a8be383926c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -278,7 +279,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'bdf70c39ad5a7c1427626768f6efcc031c028b4b', + 'devtools_frontend_revision': '38f2fff09dacc4d9cd0c477893b2a97e50522952', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -330,7 +331,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '5d8a071433779a3da828e5e8577be8258ef957c3', + 'dawn_revision': '10cb17e079e14f4f9a1bdaea9b46b343c82c4679', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -369,7 +370,7 @@ 'ukey2_revision': '0275885d8e6038c39b8a8ca55e75d1d4d1727f47', # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'tint_revision': '685cb02ea8d9afbad46d52ccbe4fa3728ac37693', + 'tint_revision': '76d12f0f5a330e613a068059a19915182144069b', # TODO(crbug.com/941824): The values below need to be kept in sync # between //DEPS and //buildtools/DEPS, so if you're updating one, @@ -922,7 +923,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '4640dfbfd71908a1e74bf77b0a0ad2fa106114bc', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1ec57124a67c6fd4ea2f2fe9ce9fdb6c31d3fd5d', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1277,7 +1278,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '48b4a74d6b80164adc6e5ad14708abe9bd9bcc76', + Var('chromium_git') + '/openscreen' + '@' + '12b95e78a4d536eabc689467bf558652252f39a8', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '97cfe495bb7a3853266b646d1c79e169387f9c7a', @@ -1294,7 +1295,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '9d937e6cbed635945701f740350e09b8f0084985', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '8ddf5ae4b8a57c7acc28dad9f2e3857c1d3b7bc0', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1372,7 +1373,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'h_lfZjWg21ZL3JBJXSabJsKCnyhbzTyNAISwoJCfLCAC' + 'version': 'yKXInPLMrLZXhnetjQTEJav1jUW4zl7skzS8L51VrQYC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1541,20 +1542,10 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '3e3f152617996e4a175fd0b597a1936824b371f3', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'a8196844ac6228fea3560b82d29e01fed2fbf13a', - - 'src/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js': { - 'packages': [ - { - 'package': 'chromium/third_party/glslang_js', - 'version': 'Zka0-f53_HEAZ1bpsxr9BSi7P51-4bzYwSMg0RMKX1AC', - }, - ], - 'dep_type': 'cipd', - }, + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '3c2fe3888658d82b47ca831d59a2e07579619c2d', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '091617dda85bdca0329102c432ab287760e15e37', + Var('webrtc_git') + '/src.git' + '@' + '10f76ac226f2b569924a5060d4dd2ca1231aa30a', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1626,7 +1617,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@35dd9a4faaff15775686c54e1f408977e59d0ec3', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@ba66a670730d83bd2b6992ec9da5e242b0fce21a', 'condition': 'checkout_src_internal', }, @@ -1634,7 +1625,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'aCOs9DEjxU4ept_oo7PSSUnosojJfVRXLD89hP65ov4C', + 'version': 'h34dBNFluLOvrol4gz-HIJi_w1-GzSIElYTdJY6clJoC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4709,16 +4700,6 @@ '-d', 'src/components/zucchini', ], }, - # Pull down Android RenderTest goldens - { - 'name': 'Fetch Android RenderTest goldens', - 'pattern': '.', - 'condition': 'checkout_android and not skip_render_test_goldens_download', - 'action': [ 'python', - 'src/chrome/test/data/android/manage_render_test_goldens.py', - 'download', - ], - }, # Pull down WPR Archive files { 'name': 'Fetch WPR archive files',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 44bb491..2835b34a 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -364,7 +364,6 @@ '^chrome/browser/ssl/', '^chrome/browser/supervised_user/', '^chrome/browser/sync_file_system/', - '^chrome/browser/sync/', '^chrome/browser/thumbnail/cc/', '^chrome/browser/translate/', '^chrome/browser/ui/',
diff --git a/android_webview/java/src/org/chromium/android_webview/AwPacProcessor.java b/android_webview/java/src/org/chromium/android_webview/AwPacProcessor.java index 4c1aad02..70ec453 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwPacProcessor.java +++ b/android_webview/java/src/org/chromium/android_webview/AwPacProcessor.java
@@ -81,24 +81,29 @@ } // The calling code must not call any methods after it called destroy(). + @UsedByReflection("Android") public void destroy() { getConnectivityManager().unregisterNetworkCallback(mNetworkCallback); AwPacProcessorJni.get().destroyNative(mNativePacProcessor, this); } + @UsedByReflection("Android") public boolean setProxyScript(String script) { return AwPacProcessorJni.get().setProxyScript(mNativePacProcessor, this, script); } + @UsedByReflection("Android") public String makeProxyRequest(String url) { return AwPacProcessorJni.get().makeProxyRequest(mNativePacProcessor, this, url); } + @UsedByReflection("Android") public void setNetwork(Network network) { updateNetworkLinkAddress(network, getConnectivityManager().getLinkProperties(network)); mNetwork = network; } + @UsedByReflection("Android") public Network getNetwork() { return mNetwork; }
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 19bd0e0..49635f3 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -203,6 +203,8 @@ "ambient/ui/ambient_background_image_view.h", "ambient/ui/ambient_container_view.cc", "ambient/ui/ambient_container_view.h", + "ambient/ui/ambient_info_view.cc", + "ambient/ui/ambient_info_view.h", "ambient/ui/ambient_view_delegate.h", "ambient/ui/ambient_view_ids.h", "ambient/ui/assistant_response_container_view.cc",
diff --git a/ash/ambient/ui/ambient_background_image_view.cc b/ash/ambient/ui/ambient_background_image_view.cc index e53d01e..09871e3 100644 --- a/ash/ambient/ui/ambient_background_image_view.cc +++ b/ash/ambient/ui/ambient_background_image_view.cc
@@ -7,8 +7,8 @@ #include <memory> #include "ash/ambient/ambient_constants.h" +#include "ash/ambient/ui/ambient_info_view.h" #include "ash/ambient/ui/ambient_view_ids.h" -#include "ash/ambient/ui/glanceable_info_view.h" #include "ash/ambient/ui/media_string_view.h" #include "ash/ambient/util/ambient_util.h" #include "base/rand_util.h" @@ -16,7 +16,6 @@ #include "ui/gfx/geometry/insets.h" #include "ui/gfx/image/image_skia_operations.h" #include "ui/views/controls/image_view.h" -#include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/flex_layout.h" @@ -29,15 +28,8 @@ namespace { // Appearance. -constexpr int kMarginDip = 16; -constexpr int kSpacingDip = 8; constexpr int kMediaStringMarginDip = 32; -// Typography. -constexpr SkColor kTextColor = SK_ColorWHITE; -constexpr int kDefaultFontSizeDip = 64; -constexpr int kDetailsFontSizeDip = 13; - // The dicretion to translate glanceable info views in the x/y coordinates. `1` // means positive translate, `-1` negative. int translate_x_direction = 1; @@ -126,7 +118,7 @@ void AmbientBackgroundImageView::UpdateImageDetails( const base::string16& details) { - details_label_->SetText(details); + ambient_info_view_->UpdateImageDetails(details); } const gfx::ImageSkia& AmbientBackgroundImageView::GetCurrentImage() { @@ -181,42 +173,12 @@ related_image_view_->SetProperty( views::kMarginsKey, gfx::Insets(0, kMarginLeftOfRelatedImageDip, 0, 0)); + ambient_info_view_ = + AddChildView(std::make_unique<AmbientInfoView>(delegate_)); + gfx::Insets shadow_insets = gfx::ShadowValue::GetMargin(ambient::util::GetTextShadowValues()); - // Inits the attribution view. It also has a full-screen size and is - // responsible for layout the details label at its bottom left corner. - views::View* attribution_view = AddChildView(std::make_unique<views::View>()); - views::BoxLayout* attribution_layout = - attribution_view->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical)); - attribution_layout->set_main_axis_alignment( - views::BoxLayout::MainAxisAlignment::kEnd); - attribution_layout->set_cross_axis_alignment( - views::BoxLayout::CrossAxisAlignment::kStart); - attribution_layout->set_inside_border_insets( - gfx::Insets(0, kMarginDip + shadow_insets.left(), - kMarginDip + shadow_insets.bottom(), 0)); - - attribution_layout->set_between_child_spacing( - kSpacingDip + shadow_insets.top() + shadow_insets.bottom()); - - glanceable_info_view_ = attribution_view->AddChildView( - std::make_unique<GlanceableInfoView>(delegate_)); - glanceable_info_view_->SetPaintToLayer(); - - // Inits the details label. - details_label_ = - attribution_view->AddChildView(std::make_unique<views::Label>()); - details_label_->SetAutoColorReadabilityEnabled(false); - details_label_->SetEnabledColor(kTextColor); - details_label_->SetFontList( - ambient::util::GetDefaultFontlist().DeriveWithSizeDelta( - kDetailsFontSizeDip - kDefaultFontSizeDip)); - details_label_->SetShadows(ambient::util::GetTextShadowValues()); - details_label_->SetPaintToLayer(); - details_label_->layer()->SetFillsBoundsOpaquely(false); - // Inits the media string view. The media string view is positioned on the // right-top corner of the container. views::View* media_string_view_container_ = @@ -267,8 +229,7 @@ gfx::Transform transform; transform.Translate(current_x_translation, current_y_translation); - glanceable_info_view_->layer()->SetTransform(transform); - details_label_->layer()->SetTransform(transform); + ambient_info_view_->SetTextTransform(transform); if (media_string_view_->GetVisible()) { gfx::Transform media_string_transform;
diff --git a/ash/ambient/ui/ambient_background_image_view.h b/ash/ambient/ui/ambient_background_image_view.h index 759f5e9..63a215d 100644 --- a/ash/ambient/ui/ambient_background_image_view.h +++ b/ash/ambient/ui/ambient_background_image_view.h
@@ -15,13 +15,9 @@ #include "ui/views/view.h" #include "ui/views/view_observer.h" -namespace views { -class Label; -} // namespace views - namespace ash { -class GlanceableInfoView; +class AmbientInfoView; class MediaStringView; // AmbientBackgroundImageView-------------------------------------------------- @@ -83,11 +79,7 @@ gfx::ImageSkia image_unscaled_; gfx::ImageSkia related_image_unscaled_; - GlanceableInfoView* glanceable_info_view_ = nullptr; - - // Label to show details text, i.e. attribution, to be displayed for the - // current image. Owned by the view hierarchy. - views::Label* details_label_ = nullptr; + AmbientInfoView* ambient_info_view_ = nullptr; MediaStringView* media_string_view_ = nullptr;
diff --git a/ash/ambient/ui/ambient_info_view.cc b/ash/ambient/ui/ambient_info_view.cc new file mode 100644 index 0000000..76140653 --- /dev/null +++ b/ash/ambient/ui/ambient_info_view.cc
@@ -0,0 +1,89 @@ +// 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/ambient/ui/ambient_info_view.h" + +#include <memory> + +#include "ash/ambient/ui/ambient_view_delegate.h" +#include "ash/ambient/ui/ambient_view_ids.h" +#include "ash/ambient/ui/glanceable_info_view.h" +#include "ash/ambient/util/ambient_util.h" +#include "ui/gfx/geometry/insets.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" +#include "ui/views/view_class_properties.h" + +namespace ash { + +namespace { + +// Appearance +constexpr int kMarginDip = 16; +constexpr int kSpacingDip = 8; + +// Typography +constexpr SkColor kTextColor = SK_ColorWHITE; +constexpr int kDefaultFontSizeDip = 64; +constexpr int kDetailsFontSizeDip = 13; + +} // namespace + +AmbientInfoView::AmbientInfoView(AmbientViewDelegate* delegate) + : delegate_(delegate) { + DCHECK(delegate_); + SetID(AmbientViewID::kAmbientInfoView); + InitLayout(); +} + +AmbientInfoView::~AmbientInfoView() = default; + +void AmbientInfoView::UpdateImageDetails(const base::string16& details) { + details_label_->SetText(details); +} + +void AmbientInfoView::SetTextTransform(const gfx::Transform& transform) { + details_label_->layer()->SetTransform(transform); + glanceable_info_view_->layer()->SetTransform(transform); +} + +void AmbientInfoView::InitLayout() { + gfx::Insets shadow_insets = + gfx::ShadowValue::GetMargin(ambient::util::GetTextShadowValues()); + + // Full screen view with the glanceable info view and details label in the + // lower left. + views::BoxLayout* layout = + SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical)); + layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kEnd); + layout->set_cross_axis_alignment( + views::BoxLayout::CrossAxisAlignment::kStart); + layout->set_inside_border_insets( + gfx::Insets(0, kMarginDip + shadow_insets.left(), + kMarginDip + shadow_insets.bottom(), 0)); + + layout->set_between_child_spacing(kSpacingDip + shadow_insets.top() + + shadow_insets.bottom()); + + glanceable_info_view_ = + AddChildView(std::make_unique<GlanceableInfoView>(delegate_)); + glanceable_info_view_->SetPaintToLayer(); + + details_label_ = AddChildView(std::make_unique<views::Label>()); + details_label_->SetAutoColorReadabilityEnabled(false); + details_label_->SetEnabledColor(kTextColor); + details_label_->SetFontList( + ambient::util::GetDefaultFontlist().DeriveWithSizeDelta( + kDetailsFontSizeDip - kDefaultFontSizeDip)); + details_label_->SetShadows(ambient::util::GetTextShadowValues()); + details_label_->SetPaintToLayer(); + details_label_->layer()->SetFillsBoundsOpaquely(false); +} + +BEGIN_METADATA(AmbientInfoView, views::View) +END_METADATA + +} // namespace ash
diff --git a/ash/ambient/ui/ambient_info_view.h b/ash/ambient/ui/ambient_info_view.h new file mode 100644 index 0000000..214f333 --- /dev/null +++ b/ash/ambient/ui/ambient_info_view.h
@@ -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. + +#ifndef ASH_AMBIENT_UI_AMBIENT_INFO_VIEW_H_ +#define ASH_AMBIENT_UI_AMBIENT_INFO_VIEW_H_ + +#include "ash/ambient/ui/ambient_view_delegate.h" +#include "ash/ash_export.h" +#include "ui/views/metadata/metadata_header_macros.h" +#include "ui/views/view.h" + +namespace gfx { +class Transform; +} + +namespace views { +class Label; +} // namespace views + +namespace ash { + +class GlanceableInfoView; + +class ASH_EXPORT AmbientInfoView : public views::View { + public: + METADATA_HEADER(AmbientInfoView); + + explicit AmbientInfoView(AmbientViewDelegate* delegate); + AmbientInfoView(const AmbientInfoView&) = delete; + AmbientInfoView& operator=(AmbientInfoView&) = delete; + ~AmbientInfoView() override; + + void UpdateImageDetails(const base::string16& details); + + void SetTextTransform(const gfx::Transform& transform); + + private: + void InitLayout(); + + // Owned by |AmbientController| and should always outlive |this|. + AmbientViewDelegate* delegate_ = nullptr; + + GlanceableInfoView* glanceable_info_view_ = nullptr; + views::Label* details_label_ = nullptr; +}; + +} // namespace ash + +#endif // ASH_AMBIENT_UI_AMBIENT_INFO_VIEW_H_
diff --git a/ash/ambient/ui/ambient_view_ids.h b/ash/ambient/ui/ambient_view_ids.h index 294562a..6c39d70 100644 --- a/ash/ambient/ui/ambient_view_ids.h +++ b/ash/ambient/ui/ambient_view_ids.h
@@ -21,6 +21,7 @@ kAmbientGlanceableInfoView, kAmbientAssistantDialogPlate, kAmbientMediaStringView, + kAmbientInfoView, }; } // namespace ash
diff --git a/ash/display/screen_orientation_controller.cc b/ash/display/screen_orientation_controller.cc index 7e695f8..dfeea33d 100644 --- a/ash/display/screen_orientation_controller.cc +++ b/ash/display/screen_orientation_controller.cc
@@ -229,6 +229,8 @@ SplitViewController::Get(Shell::GetPrimaryRootWindow())->AddObserver(this); display::Screen::GetScreen()->AddObserver(this); Shell::Get()->window_tree_host_manager()->AddObserver(this); + + OnTabletPhysicalStateChanged(); } ScreenOrientationController::~ScreenOrientationController() {
diff --git a/ash/display/screen_orientation_controller_unittest.cc b/ash/display/screen_orientation_controller_unittest.cc index f3b23c03..bd8925b5 100644 --- a/ash/display/screen_orientation_controller_unittest.cc +++ b/ash/display/screen_orientation_controller_unittest.cc
@@ -999,4 +999,38 @@ EXPECT_EQ(OrientationLockType::kAny, UserLockedOrientation()); } +class ForceInPhysicalTabletStateTest : public ScreenOrientationControllerTest { + public: + ForceInPhysicalTabletStateTest() = default; + ForceInPhysicalTabletStateTest(const ForceInPhysicalTabletStateTest&) = + delete; + ForceInPhysicalTabletStateTest& operator=( + const ForceInPhysicalTabletStateTest&) = delete; + ~ForceInPhysicalTabletStateTest() override = default; + + // ScreenOrientationControllerTest: + void SetUp() override { + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kForceInTabletPhysicalState); + ScreenOrientationControllerTest::SetUp(); + } +}; + +// Tests that screen rotation is supported while the device is forced to stay +// in physical tablet state. +TEST_F(ForceInPhysicalTabletStateTest, ScreenRotation) { + TabletModeControllerTestApi tablet_mode_controller_test_api; + ASSERT_TRUE(tablet_mode_controller_test_api.IsInPhysicalTabletState()); + + // Test rotating in all directions are supported. + TriggerLidUpdate(gfx::Vector3dF(kMeanGravityFloat, 0.0f, 0.0f)); + EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); + TriggerLidUpdate(gfx::Vector3dF(0.0f, -kMeanGravityFloat, 0.0f)); + EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation()); + TriggerLidUpdate(gfx::Vector3dF(-kMeanGravityFloat, 0.0f, 0.0f)); + EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); + TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravityFloat, 0.0f)); + EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); +} + } // namespace ash
diff --git a/ash/keyboard/keyboard_controller_impl.cc b/ash/keyboard/keyboard_controller_impl.cc index a9bb4fba..5f5be1c 100644 --- a/ash/keyboard/keyboard_controller_impl.cc +++ b/ash/keyboard/keyboard_controller_impl.cc
@@ -123,6 +123,11 @@ keyboard_ui_controller_->SetEnableFlag( KeyboardEnableFlag::kCommandLineEnabled); } + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + keyboard::switches::kDisableVirtualKeyboard)) { + keyboard_ui_controller_->SetEnableFlag( + KeyboardEnableFlag::kCommandLineDisabled); + } } void KeyboardControllerImpl::DestroyVirtualKeyboard() {
diff --git a/ash/keyboard/ui/keyboard_ui_controller.cc b/ash/keyboard/ui/keyboard_ui_controller.cc index 1435069d..62d22b0 100644 --- a/ash/keyboard/ui/keyboard_ui_controller.cc +++ b/ash/keyboard/ui/keyboard_ui_controller.cc
@@ -478,6 +478,9 @@ if (IsEnableFlagSet(KeyboardEnableFlag::kCommandLineEnabled)) return true; + if (IsEnableFlagSet(KeyboardEnableFlag::kCommandLineDisabled)) + return false; + if (IsEnableFlagSet(KeyboardEnableFlag::kExtensionDisabled)) return false;
diff --git a/ash/public/cpp/ash_switches.cc b/ash/public/cpp/ash_switches.cc index 918133f8..658e0a43 100644 --- a/ash/public/cpp/ash_switches.cc +++ b/ash/public/cpp/ash_switches.cc
@@ -143,6 +143,12 @@ // Hides all Message Center notification popups (toasts). Used for testing. const char kSuppressMessageCenterPopups[] = "suppress-message-center-popups"; +// If set, the device will be forced to stay in physical tablet state. Then the +// UI will stay in tablet mode without external mouse, or clamshell mode if an +// external mouse is attached. Screen auto rotation will be supported if +// accelerometer data can be detected. +const char kForceInTabletPhysicalState[] = "force-in-tablet-physical-state"; + base::Optional<base::TimeDelta> ContextualNudgesInterval() { int numeric_cooldown_time; if (base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/ash/public/cpp/ash_switches.h b/ash/public/cpp/ash_switches.h index 0b4dafc..0d57216 100644 --- a/ash/public/cpp/ash_switches.h +++ b/ash/public/cpp/ash_switches.h
@@ -47,6 +47,7 @@ ASH_PUBLIC_EXPORT extern const char kShowTaps[]; ASH_PUBLIC_EXPORT extern const char kSuppressMessageCenterPopups[]; ASH_PUBLIC_EXPORT extern const char kTouchscreenUsableWhileScreenOff[]; +ASH_PUBLIC_EXPORT extern const char kForceInTabletPhysicalState[]; ASH_PUBLIC_EXPORT base::Optional<base::TimeDelta> ContextualNudgesInterval(); ASH_PUBLIC_EXPORT bool ContextualNudgesResetShownCount();
diff --git a/ash/public/cpp/keyboard/keyboard_switches.cc b/ash/public/cpp/keyboard/keyboard_switches.cc index dd3e98f..3c69958b 100644 --- a/ash/public/cpp/keyboard/keyboard_switches.cc +++ b/ash/public/cpp/keyboard/keyboard_switches.cc
@@ -8,6 +8,7 @@ namespace switches { const char kEnableVirtualKeyboard[] = "enable-virtual-keyboard"; +const char kDisableVirtualKeyboard[] = "disable-virtual-keyboard"; } // namespace switches } // namespace keyboard
diff --git a/ash/public/cpp/keyboard/keyboard_switches.h b/ash/public/cpp/keyboard/keyboard_switches.h index e3a01d8..cfb0f8d11 100644 --- a/ash/public/cpp/keyboard/keyboard_switches.h +++ b/ash/public/cpp/keyboard/keyboard_switches.h
@@ -10,8 +10,10 @@ namespace keyboard { namespace switches { -// Enables the virtual keyboard. ASH_PUBLIC_EXPORT extern const char kEnableVirtualKeyboard[]; +// TODO(crbug/1154939): Remove this const when we found a solution to +// crbug/1140667 +ASH_PUBLIC_EXPORT extern const char kDisableVirtualKeyboard[]; } // namespace switches } // namespace keyboard
diff --git a/ash/public/cpp/keyboard/keyboard_types.h b/ash/public/cpp/keyboard/keyboard_types.h index 6c30203..6201357d 100644 --- a/ash/public/cpp/keyboard/keyboard_types.h +++ b/ash/public/cpp/keyboard/keyboard_types.h
@@ -41,6 +41,10 @@ // Enabled via the "--enable-virtual-keyboard" command line switch. // Used for development and debugging. kCommandLineEnabled, + + // Enabled via the "--disable-virtual-keyboard" command line switch, + // or chrome flag. Used as workaround when VK keeps popping up. + kCommandLineDisabled, }; // Container types used to set and identify container behavior. Used in UMA
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 0a3a6b4..9bb36c8b 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portret</translation> <translation id="2067602449040652523">Sleutelbordhelderheid</translation> <translation id="2078034614700056995">Swiep met vier vingers regs om na die volgende lessenaar toe te wissel</translation> +<translation id="2079504693865562705">Versteek programme op rak</translation> <translation id="2083190527011054446">Goeienag <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Nie aan 'n netwerk gekoppel nie</translation> <translation id="2126242104232412123">Nuwe lessenaar</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+nog <ph name="COUNT" /></translation> <translation id="3236488194889173876">Geen selnetwerk beskikbaar nie</translation> <translation id="3249513730522716925">Venster <ph name="WINDOW_TITLE" /> is geskuif van lessenaar <ph name="ACTIVE_DESK" /> af na lessenaar <ph name="TARGET_DESK" /> toe</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />; seinsterkte <ph name="SIGNAL_STRENGTH" /> persent.</translation> <translation id="3255483164551725916">Wat kan jy doen?</translation> <translation id="3269597722229482060">Regsklik</translation> <translation id="3289674678944039601">Laai tans deur aansluitprop</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Jy het die sleutelbordkortpad vir die gedokte vergrootglas gedruk. Wil jy dit aanskakel?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> is af.</translation> <translation id="4421231901400348175">Deel tans beheer oor jou skerm met <ph name="HELPER_NAME" /> deur afstandbystand.</translation> +<translation id="4427613789487709312">Verstek (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Moenie weer wys nie</translation> <translation id="445864333228800152">Goeienaand</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">Verkeerde PIN</translation> <translation id="5083553833479578423">Ontsluit meer Assistent-kenmerke.</translation> <translation id="5136175204352732067">Ander sleutelbord is gekoppel</translation> +<translation id="5155897006997040331">Leesspoed</translation> <translation id="5168181903108465623">Uitsaaitoestelle is beskikbaar</translation> <translation id="5170568018924773124">Wys in vouer</translation> <translation id="5176318573511391780">Neem gedeeltelike skerm op</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 kennisgewing}other{# kennisgewings}}</translation> <translation id="7724603315864178912">Knip</translation> +<translation id="7745560842763881396">Wys programme op rak</translation> <translation id="7749443890790263709">Maksimum aantal lessenaars is bereik.</translation> <translation id="776344839111254542">Klik om die opdateringbesonderhede te sien</translation> <translation id="7780159184141939021">Draai skerm</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index beeeac45..27d9dc7 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">በቁመት</translation> <translation id="2067602449040652523">የቁልፍ ሰሌዳ ብሩህነት</translation> <translation id="2078034614700056995">ወደ ቀጣዩ ዴስክ ለመቀየር በአራት ጣቶች ወደ ቀኝ ያንሸራትቱ</translation> +<translation id="2079504693865562705">መተግበሪያዎችን በመደርደሪያ ላይ ደብቅ</translation> <translation id="2083190527011054446">ደህና አመሹ <ph name="GIVEN_NAME" />፣</translation> <translation id="209965399369889474">ከአውታረ መረብ ጋር አልተገናኘም</translation> <translation id="2126242104232412123">አዲስ ዴስክ</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> ተጨማሪ</translation> <translation id="3236488194889173876">ምንም የተንቀሳቃሽ ስልክ አውታረ መረብ የለም</translation> <translation id="3249513730522716925">መስኮት <ph name="WINDOW_TITLE" /> ከዴስክ <ph name="ACTIVE_DESK" /> ወደ ዴስክ <ph name="TARGET_DESK" /> ይወሰዳል</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />፣ የሲግናል ጥንካሬ <ph name="SIGNAL_STRENGTH" /> በመቶ።</translation> <translation id="3255483164551725916">ምን ማድረግ ይችላሉ?</translation> <translation id="3269597722229482060">የቀኝ ጠቅታ</translation> <translation id="3289674678944039601">በአስማሚ በኩል በመሙላት ላይ</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">የተተከለ የማጉያ የቁልፍ ሰሌዳ አቋራጩን ተጭነዋል። ሊያበሩት ይፈልጋሉ?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ጠፍቷል</translation> <translation id="4421231901400348175">የማያ ገጽዎን ቁጥጥር በርቀት እርዳታ በኩል ለ<ph name="HELPER_NAME" /> በማጋራት ላይ።</translation> +<translation id="4427613789487709312">ነባሪ (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">ድምፅ</translation> <translation id="4450893287417543264">ዳግም አታሳይ</translation> <translation id="445864333228800152">ደህን አመሹ ፣</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">የተሳሳተ ፒን</translation> <translation id="5083553833479578423">ተጨማሪ የረዳት ባህሪያትን ያስከፍቱ።</translation> <translation id="5136175204352732067">የተለየ የቁልፍ ሰሌዳ ተገናኝቷል</translation> +<translation id="5155897006997040331">የንባብ ፍጥነት</translation> <translation id="5168181903108465623">የCast መሣሪያዎች ይገኛሉ</translation> <translation id="5170568018924773124">በአቃፊ አሳይ</translation> <translation id="5176318573511391780">ከፊል የማያ ገጽን ቅረጽ</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">ቪ ፒ ኤን</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 ማሳወቂያ}one{# ማሳወቂያዎች}other{# ማሳወቂያዎች}}</translation> <translation id="7724603315864178912">ቁረጥ</translation> +<translation id="7745560842763881396">መተግበሪያዎችን በመደርደሪያ አሳይ</translation> <translation id="7749443890790263709">የተደረሰባቸው የዴስኮች ከፍተኛ ብዛት።</translation> <translation id="776344839111254542">የዝማኔ ዝርዝሮችን ለማየት ጠቅ ያድርጉ</translation> <translation id="7780159184141939021">ማያ ገጹን አሽከርክር</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index e7f3b49..b1fb829 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portret</translation> <translation id="2067602449040652523">Klaviatura parlaqlığı</translation> <translation id="2078034614700056995">Növbəti masaya keçmək üçün dörd barmaqla sağa çəkin</translation> +<translation id="2079504693865562705">Rəfdə tətbiqləri gizlədin</translation> <translation id="2083190527011054446">Gecəniz xeyir, <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Şəbəkəyə qoşulmayıb</translation> <translation id="2126242104232412123">Yeni iş masası</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /></translation> <translation id="3236488194889173876">Heç bir mobil şəbəkə əlçatan deyil</translation> <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> pəncərəsi <ph name="ACTIVE_DESK" /> Masasından <ph name="TARGET_DESK" /> Masasına köçürüldü</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, Siqnal gücü: <ph name="SIGNAL_STRENGTH" /> faiz.</translation> <translation id="3255483164551725916">Nə edə bilərsiniz?</translation> <translation id="3269597722229482060">Sağ düymə ilə toxunun</translation> <translation id="3289674678944039601">Adapter ilə şarj edilir</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Daxili böyüdücü üçün klaviatura qısayoluna basdınız. Onu aktiv etmək istəyirsiniz?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> deaktivdir.</translation> <translation id="4421231901400348175">Uzaqdan Yardım vasitəsilə <ph name="HELPER_NAME" /> ilə ekranın kontrolunu paylaşın</translation> +<translation id="4427613789487709312">Defolt (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Həcm</translation> <translation id="4450893287417543264">Daha göstərməyin</translation> <translation id="445864333228800152">Axşamınız xeyir,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Yanlış PIN</translation> <translation id="5083553833479578423">Daha çox Assistent funksiyalarını kiliddən çıxarın.</translation> <translation id="5136175204352732067">Fərqli klaviatura qoşuldu</translation> +<translation id="5155897006997040331">Oxuma sürəti</translation> <translation id="5168181903108465623">Mövcud Cast cihazlar</translation> <translation id="5170568018924773124">Qovluqda göstərin</translation> <translation id="5176318573511391780">Ekranın bir hissəsini çəkin</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 bildiriş}other{# bildiriş}}</translation> <translation id="7724603315864178912">Kəsin</translation> +<translation id="7745560842763881396">Rəfdə tətbiqləri göstərin</translation> <translation id="7749443890790263709">Maksimum masa sayına çatmısınız.</translation> <translation id="776344839111254542">Güncəlləmə detallarını görmək üçün klikləyin</translation> <translation id="7780159184141939021">Ekranı fırladın</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index 3a7f185fb..771e74d 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Вертикално</translation> <translation id="2067602449040652523">Яркост на клавиатурата</translation> <translation id="2078034614700056995">Прекарайте четири пръста надясно, за да превключите към следващия работен кът</translation> +<translation id="2079504693865562705">Скриване на приложенията в лавицата</translation> <translation id="2083190527011054446">Добър вечер, <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Няма връзка с мрежа</translation> <translation id="2126242104232412123">Нов работен кът</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+ още <ph name="COUNT" /></translation> <translation id="3236488194889173876">Няма мобилни мрежи</translation> <translation id="3249513730522716925">Прозорецът <ph name="WINDOW_TITLE" /> бе преместен от работен кът <ph name="ACTIVE_DESK" /> в работен кът <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, сила на сигнала <ph name="SIGNAL_STRENGTH" /> процент(а).</translation> <translation id="3255483164551725916">„What can you do?“ („Какво можеш да правиш?“)</translation> <translation id="3269597722229482060">Кликване с десния бутон</translation> <translation id="3289674678944039601">Зарежда се през адаптера</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Използвахте клавишната комбинация за лупата в прикрепен режим. Искате ли да включите функцията?</translation> <translation id="4412944820643904175">„<ph name="FEATURE_NAME" />“ е изключено.</translation> <translation id="4421231901400348175">Споделяте с/ъс <ph name="HELPER_NAME" /> контрола върху екрана си чрез отдалечено съдействие.</translation> +<translation id="4427613789487709312">Стандартна (x<ph name="RATE" />)</translation> <translation id="4430019312045809116">Звук</translation> <translation id="4450893287417543264">Да не се показва отново</translation> <translation id="445864333228800152">Добър вечер,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Неправилен ПИН</translation> <translation id="5083553833479578423">Отключете още функции на Асистент.</translation> <translation id="5136175204352732067">Свързана е различна клавиатура</translation> +<translation id="5155897006997040331">Скорост на четене</translation> <translation id="5168181903108465623">Налице са устройства Cast</translation> <translation id="5170568018924773124">Показване в папката</translation> <translation id="5176318573511391780">Записване на част от екрана</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 известие}other{# известия}}</translation> <translation id="7724603315864178912">Изрязване</translation> +<translation id="7745560842763881396">Показване на приложенията в лавицата</translation> <translation id="7749443890790263709">Достигнат е максималният брой работни кътове.</translation> <translation id="776344839111254542">Кликнете, за да видите подробности за актуализацията</translation> <translation id="7780159184141939021">Завъртане на екрана</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index ccfcaf5..77abf8d 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Uspravno</translation> <translation id="2067602449040652523">Svjetlina tipkovnice</translation> <translation id="2078034614700056995">Prevucite udesno s četiri prsta da prebacite na sljedeću radnu površinu</translation> +<translation id="2079504693865562705">Sakrij aplikacije na polici</translation> <translation id="2083190527011054446">Laku noć <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Niste povezani na mrežu</translation> <translation id="2126242104232412123">Novi sto</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">i još <ph name="COUNT" /></translation> <translation id="3236488194889173876">Nije dostupna mobilna mreža</translation> <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premješten s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, jačina signala <ph name="SIGNAL_STRENGTH" /> posto.</translation> <translation id="3255483164551725916">Šta sve možete uraditi?</translation> <translation id="3269597722229482060">Desni klik</translation> <translation id="3289674678944039601">Punjenje putem adaptera</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Pritisnuli ste prečicu na tastaturi za lupu priključne stanice. Želite li je uključiti?</translation> <translation id="4412944820643904175">Funkcija <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175">Dijeljenje kontrole nad vašim ekranom s pomoćnikom <ph name="HELPER_NAME" /> putem pomoći na daljinu.</translation> +<translation id="4427613789487709312">Zadano (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Jačina zvuka</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobro veče,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Pogrešan PIN</translation> <translation id="5083553833479578423">Otključajte više funkcija Asistenta.</translation> <translation id="5136175204352732067">Povezana je drugačija tastatura</translation> +<translation id="5155897006997040331">Brzina čitanja</translation> <translation id="5168181903108465623">Dostupni su "cast" uređaji</translation> <translation id="5170568018924773124">Pokaži u mapi</translation> <translation id="5176318573511391780">Snimanje dijela ekrana</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 obavještenje}one{# obavještenje}few{# obavještenja}other{# obavještenja}}</translation> <translation id="7724603315864178912">Izreži</translation> +<translation id="7745560842763881396">Prikaži aplikacije na polici</translation> <translation id="7749443890790263709">Dostigli ste maksimalni broj radnih površina.</translation> <translation id="776344839111254542">Kliknite da vidite detalje o ažuriranju</translation> <translation id="7780159184141939021">Rotiranje ekrana</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 9cea608b..ad7975f 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Vertical</translation> <translation id="2067602449040652523">Brillantor del teclat</translation> <translation id="2078034614700056995">Fes lliscar quatre dits cap a la dreta per canviar a l'escriptori següent</translation> +<translation id="2079504693865562705">Amaga les aplicacions del prestatge</translation> <translation id="2083190527011054446">Bona nit, <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">No hi ha connexió a la xarxa</translation> <translation id="2126242104232412123">Escriptori nou</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773"><ph name="COUNT" /> més</translation> <translation id="3236488194889173876">No hi ha cap xarxa mòbil disponible</translation> <translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> ha passat de l'escriptori <ph name="ACTIVE_DESK" /> a l'escriptori <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />; intensitat del senyal: <ph name="SIGNAL_STRENGTH" /> per cent.</translation> <translation id="3255483164551725916">Què pots fer?</translation> <translation id="3269597722229482060">Clic amb el botó dret</translation> <translation id="3289674678944039601">S'està carregant per adaptador</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Has premut la tecla de drecera de la lupa acoblada. Vols activar-la?</translation> <translation id="4412944820643904175">La funció <ph name="FEATURE_NAME" /> està desactivada.</translation> <translation id="4421231901400348175">Es comparteix el control de la pantalla amb <ph name="HELPER_NAME" /> mitjançant l'Assistència remota.</translation> +<translation id="4427613789487709312">Predeterminada (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4450893287417543264">No ho tornis a mostrar</translation> <translation id="445864333228800152">Bon vespre,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">PIN incorrecte</translation> <translation id="5083553833479578423">Desbloqueja més funcions de l'Assistent.</translation> <translation id="5136175204352732067">S'ha connectat un altre teclat</translation> +<translation id="5155897006997040331">Velocitat de lectura</translation> <translation id="5168181903108465623">Dispositius d'emissió disponibles</translation> <translation id="5170568018924773124">Mostra a la carpeta</translation> <translation id="5176318573511391780">Grava una part de la pantalla</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 notificació}other{# notificacions}}</translation> <translation id="7724603315864178912">Retalla</translation> +<translation id="7745560842763881396">Mostra les aplicacions del prestatge</translation> <translation id="7749443890790263709">S'ha assolit el nombre màxim d'escriptoris.</translation> <translation id="776344839111254542">Fes clic per veure els detalls de l'actualització</translation> <translation id="7780159184141939021">Gira la pantalla</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index e7fd375..56b4430 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Stående</translation> <translation id="2067602449040652523">Lysstyrke for tastatur</translation> <translation id="2078034614700056995">Stryg mod højre med fire fingre for at skifte til næste skrivebord</translation> +<translation id="2079504693865562705">Skjul apps på hylden</translation> <translation id="2083190527011054446">Hej <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Der er ingen netværksforbindelse</translation> <translation id="2126242104232412123">Nyt skrivebord</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> andre</translation> <translation id="3236488194889173876">Der er ingen tilgængelige mobilnetværk</translation> <translation id="3249513730522716925">Vindue <ph name="WINDOW_TITLE" /> blev flyttet fra Skrivebord <ph name="ACTIVE_DESK" /> til Skrivebord <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, signalstyrke <ph name="SIGNAL_STRENGTH" /> procent.</translation> <translation id="3255483164551725916">Hvad kan du gøre?</translation> <translation id="3269597722229482060">Højreklik</translation> <translation id="3289674678944039601">Oplader via adapter</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Du trykkede på tastaturgenvejen for det fastgjorte lupvindue. Vil du aktivere indstillingen?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> er deaktiveret.</translation> <translation id="4421231901400348175">Skærmdeling med <ph name="HELPER_NAME" /> via Fjernsupport.</translation> +<translation id="4427613789487709312">Standard (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Lydstyrke</translation> <translation id="4450893287417543264">Vis ikke igen</translation> <translation id="445864333228800152">Godaften</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Forkert pinkode</translation> <translation id="5083553833479578423">Få adgang til endnu flere Assistent-funktioner.</translation> <translation id="5136175204352732067">Du har tilsluttet et andet tastatur</translation> +<translation id="5155897006997040331">Læsehastighed</translation> <translation id="5168181903108465623">Tilgængelige Cast-enheder</translation> <translation id="5170568018924773124">Vis i mappe</translation> <translation id="5176318573511391780">Optag dele af skærmen</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 notifikation}one{# notifikation}other{# notifikationer}}</translation> <translation id="7724603315864178912">Klip</translation> +<translation id="7745560842763881396">Vis apps på hylde</translation> <translation id="7749443890790263709">Det maksimale antal skriveborde er nået.</translation> <translation id="776344839111254542">Klik for at se opdateringsoplysninger</translation> <translation id="7780159184141939021">Roter skærm</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 73d54ca..c601f6c 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Κάθετα</translation> <translation id="2067602449040652523">Φωτεινότητα πληκτρολογίου</translation> <translation id="2078034614700056995">Σύρετε προς τα δεξιά με τέσσερα δάχτυλα για μετάβαση στο επόμενο γραφείο</translation> +<translation id="2079504693865562705">Απόκρυψη εφαρμογών στο ράφι</translation> <translation id="2083190527011054446">Καληνύχτα <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Δεν υπάρχει σύνδεση στο δίκτυο</translation> <translation id="2126242104232412123">Νέο γραφείο</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> ακόμη</translation> <translation id="3236488194889173876">Δεν υπάρχουν διαθέσιμα δίκτυα κινητής τηλεφωνίας</translation> <translation id="3249513730522716925">Η επιφάνεια εργασίας <ph name="WINDOW_TITLE" /> μετακινήθηκε από την επιφάνεια εργασίας <ph name="ACTIVE_DESK" /> στην επιφάνεια εργασίας <ph name="TARGET_DESK" />.</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, ισχύς σήματος <ph name="SIGNAL_STRENGTH" /> τοις εκατό.</translation> <translation id="3255483164551725916">Τι μπορείς να κάνεις;</translation> <translation id="3269597722229482060">Δεξί κλικ</translation> <translation id="3289674678944039601">Γίνεται φόρτιση μέσω μετασχηματιστή</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Πατήσατε τη συντόμευση πληκτρολογίου για τον μεγεθυντικό φακό σε παράθυρο. Θέλετε να τον ενεργοποιήσετε;</translation> <translation id="4412944820643904175">Η λειτουργία <ph name="FEATURE_NAME" /> είναι απενεργοποιημένη.</translation> <translation id="4421231901400348175">Κοινόχρηστος έλεγχος της οθόνης σας με το χρήστη <ph name="HELPER_NAME" /> μέσω της απομακρυσμένης βοήθειας.</translation> +<translation id="4427613789487709312">Προεπιλογή (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Ένταση</translation> <translation id="4450893287417543264">Να μην εμφανιστεί ξανά</translation> <translation id="445864333228800152">Καλησπέρα,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Εσφαλμένο PIN</translation> <translation id="5083553833479578423">Ξεκλειδώστε περισσότερες λειτουργίες του Βοηθού.</translation> <translation id="5136175204352732067">Συνδέθηκε διαφορετικό πληκτρολόγιο</translation> +<translation id="5155897006997040331">Ταχύτητα ανάγνωσης</translation> <translation id="5168181903108465623">Διαθέσιμες συσκευές μετάδοσης</translation> <translation id="5170568018924773124">Εμφάνιση στο φάκελο</translation> <translation id="5176318573511391780">Εγγραφή μέρους της οθόνης</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 ειδοποίηση}other{# ειδοποιήσεις}}</translation> <translation id="7724603315864178912">Αποκοπή</translation> +<translation id="7745560842763881396">Εμφάνιση εφαρμογών στο ράφι</translation> <translation id="7749443890790263709">Συμπληρώθηκε ο μέγιστος αριθμός γραφείων.</translation> <translation id="776344839111254542">Κάντε κλικ, για να δείτε τις λεπτομέρειες της ενημέρωσης</translation> <translation id="7780159184141939021">Περιστροφή οθόνης</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 054f983..28d93c3 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portrait</translation> <translation id="2067602449040652523">Keyboard brightness</translation> <translation id="2078034614700056995">Swipe right with four fingers to switch to the next desk</translation> +<translation id="2079504693865562705">Hide apps in shelf</translation> <translation id="2083190527011054446">Good night <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Not connected to network</translation> <translation id="2126242104232412123">New desk</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> more</translation> <translation id="3236488194889173876">No mobile network available</translation> <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> moved from Desk <ph name="ACTIVE_DESK" /> to Desk <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, signal strength <ph name="SIGNAL_STRENGTH" /> per cent.</translation> <translation id="3255483164551725916">What can you do?</translation> <translation id="3269597722229482060">Right-click</translation> <translation id="3289674678944039601">Charging via adaptor</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">You pressed the keyboard shortcut for the docked magnifier. Do you want to turn it on?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> is off.</translation> <translation id="4421231901400348175">Sharing control of your screen with <ph name="HELPER_NAME" /> via Remote Assistance.</translation> +<translation id="4427613789487709312">Default (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">volume</translation> <translation id="4450893287417543264">Don't show again</translation> <translation id="445864333228800152">Good evening,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Incorrect PIN</translation> <translation id="5083553833479578423">Unlock more Assistant features.</translation> <translation id="5136175204352732067">Different keyboard connected</translation> +<translation id="5155897006997040331">Reading speed</translation> <translation id="5168181903108465623">Cast devices available</translation> <translation id="5170568018924773124">Show in folder</translation> <translation id="5176318573511391780">Record partial screen</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 notification}other{# notifications}}</translation> <translation id="7724603315864178912">Cut</translation> +<translation id="7745560842763881396">Show apps in shelf</translation> <translation id="7749443890790263709">Maximum number of desks reached.</translation> <translation id="776344839111254542">Click to view update details</translation> <translation id="7780159184141939021">Rotate screen</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 4d29b6f..b73fa41 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Vertikaalpaigutus</translation> <translation id="2067602449040652523">Klaviatuuri eredus</translation> <translation id="2078034614700056995">Järgmisele töölauale lülitumiseks pühkige nelja sõrmega paremale</translation> +<translation id="2079504693865562705">Peida riiulil olevad rakendused</translation> <translation id="2083190527011054446">Head ööd, <ph name="GIVEN_NAME" />!</translation> <translation id="209965399369889474">Pole võrguga ühendatud</translation> <translation id="2126242104232412123">Uus töölaud</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">ja veel <ph name="COUNT" /></translation> <translation id="3236488194889173876">Ühtegi mobiilsidevõrku pole saadaval</translation> <translation id="3249513730522716925">Aken <ph name="WINDOW_TITLE" /> teisaldati töölaualt <ph name="ACTIVE_DESK" /> töölauale <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, signaalitugevus <ph name="SIGNAL_STRENGTH" /> protsenti.</translation> <translation id="3255483164551725916">Mida sa teha oskad?</translation> <translation id="3269597722229482060">Paremklikk</translation> <translation id="3289674678944039601">Laadimine adapteri kaudu</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Vajutasite dokitud luubi otseteed. Kas soovite luubi sisse lülitada?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> on väljas.</translation> <translation id="4421231901400348175">Ekraani juhtimise jagamine isikuga <ph name="HELPER_NAME" /> kaugabi kaudu.</translation> +<translation id="4427613789487709312">Vaikeseade (<ph name="RATE" />-kordne)</translation> <translation id="4430019312045809116">Helitugevus</translation> <translation id="4450893287417543264">Ära kuva uuesti</translation> <translation id="445864333228800152">Tere õhtust!</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">Vale PIN-kood</translation> <translation id="5083553833479578423">Avage rohkem assistendi funktsioone.</translation> <translation id="5136175204352732067">Ühendatud on teine klaviatuur</translation> +<translation id="5155897006997040331">Lugemiskiirus</translation> <translation id="5168181903108465623">Ülekandeseadmed on saadaval</translation> <translation id="5170568018924773124">Kuva kaustas</translation> <translation id="5176318573511391780">Ekraani osa salvestamine</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 märguanne}other{# märguannet}}</translation> <translation id="7724603315864178912">Lõika</translation> +<translation id="7745560842763881396">Kuva riiulil olevad rakendused</translation> <translation id="7749443890790263709">Töölaudade maksimaalne arv on täis.</translation> <translation id="776344839111254542">Klõpsake värskenduse üksikasjade vaatamiseks</translation> <translation id="7780159184141939021">Ekraanikuva pööramine</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 647ee8b..ff4aa8e 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Pystysuunta</translation> <translation id="2067602449040652523">Näppäimistön kirkkaus</translation> <translation id="2078034614700056995">Siirry seuraavaan työpöytään pyyhkäisemällä oikealle neljällä sormella</translation> +<translation id="2079504693865562705">Piilota sovellukset hyllystä</translation> <translation id="2083190527011054446">Hyvää yötä <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Ei verkkoyhteyttä</translation> <translation id="2126242104232412123">Uusi työpöytä</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> muuta</translation> <translation id="3236488194889173876">Mobiiliverkkoja ei ole käytettävissä</translation> <translation id="3249513730522716925">Ikkuna <ph name="WINDOW_TITLE" /> siirretty työpöydältä <ph name="ACTIVE_DESK" /> työpöydälle <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, signaalin voimakkuus <ph name="SIGNAL_STRENGTH" /> prosenttia.</translation> <translation id="3255483164551725916">Mitä osaat tehdä?</translation> <translation id="3269597722229482060">Klikkaa kakkospainiketta</translation> <translation id="3289674678944039601">Ladataan virtalähteen kautta</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Painoit kiinnitetyn suurennuksen pikanäppäintä. Haluatko ottaa sen käyttöön?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ei ole päällä.</translation> <translation id="4421231901400348175">Näyttösi hallinta jaetaan käyttäjän <ph name="HELPER_NAME" /> kanssa Etätuen kautta.</translation> +<translation id="4427613789487709312">Oletus (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Äänenvoimakkuus</translation> <translation id="4450893287417543264">Älä näytä uudelleen</translation> <translation id="445864333228800152">Hyvää iltaa</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Väärä PIN-koodi</translation> <translation id="5083553833479578423">Käytä lisää Assistantin ominaisuuksia.</translation> <translation id="5136175204352732067">Eri näppäimistö kytketty</translation> +<translation id="5155897006997040331">Lukunopeus</translation> <translation id="5168181903108465623">Cast-laitteita käytettävissä</translation> <translation id="5170568018924773124">Näytä kansiossa</translation> <translation id="5176318573511391780">Tallenna osittainen näyttö</translation> @@ -714,6 +718,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 ilmoitus}other{# ilmoitusta}}</translation> <translation id="7724603315864178912">Leikkaa</translation> +<translation id="7745560842763881396">Näytä sovellukset hyllyssä</translation> <translation id="7749443890790263709">Työpöytiä on enimmäismäärä.</translation> <translation id="776344839111254542">Klikkaa nähdäksesi päivityksen tiedot</translation> <translation id="7780159184141939021">Käännä näyttö</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 20329c5..9a5e266 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portrait</translation> <translation id="2067602449040652523">Liwanag ng keyboard</translation> <translation id="2078034614700056995">Mag-swipe pakanan gamit ang apat na daliri para lumipat sa susunod na desk</translation> +<translation id="2079504693865562705">Itago ang mga app sa shelf</translation> <translation id="2083190527011054446">Magandang gabi <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Hindi nakakonekta sa network</translation> <translation id="2126242104232412123">Bagong desk</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> pa</translation> <translation id="3236488194889173876">Walang available na mobile network</translation> <translation id="3249513730522716925">Inilipat ang Window na <ph name="WINDOW_TITLE" /> sa Desk na <ph name="TARGET_DESK" /> mula sa <ph name="ACTIVE_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, Lakas ng signal <ph name="SIGNAL_STRENGTH" /> porsyento.</translation> <translation id="3255483164551725916">Ano'ng maaari mong gawin?</translation> <translation id="3269597722229482060">Mag-right Click</translation> <translation id="3289674678944039601">Nagcha-charge sa pamamagitan ng adapter</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Napindot mo ang keyboard shortcut para sa naka-dock na magnifier. Gusto mo ba itong i-on?</translation> <translation id="4412944820643904175">Naka-off ang <ph name="FEATURE_NAME" />.</translation> <translation id="4421231901400348175">Pagbabahagi ng kontrol sa iyong screen gamit ang <ph name="HELPER_NAME" /> sa pamamagitan ng Remote Assistance.</translation> +<translation id="4427613789487709312">Default (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Huwag ipakitang muli</translation> <translation id="445864333228800152">Magandang gabi,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Maling PIN</translation> <translation id="5083553833479578423">Mag-unlock ng higit pang feature ng Assistant.</translation> <translation id="5136175204352732067">Ibang keyboard ang nakakonekta</translation> +<translation id="5155897006997040331">Bilis ng pagbabasa</translation> <translation id="5168181903108465623">I-cast ang mga available na device</translation> <translation id="5170568018924773124">Ipinakita sa folder</translation> <translation id="5176318573511391780">I-record ang hindi buong screen</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 notification}one{# notification}other{# na notification}}</translation> <translation id="7724603315864178912">I-cut</translation> +<translation id="7745560842763881396">Ipakita ang mga app sa shelf</translation> <translation id="7749443890790263709">Naabot ang maximum na bilang ng desk.</translation> <translation id="776344839111254542">I-click upang tingnan ang mga detalye ng update</translation> <translation id="7780159184141939021">I-rotate ang Screen</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index ff3f8a2..839d73fa 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">पोर्ट्रेट</translation> <translation id="2067602449040652523">कीबोर्ड की रोशनी</translation> <translation id="2078034614700056995">अगले डेस्क पर स्विच करने के लिए, चार उंगलियों से दाईं ओर स्वाइप करें</translation> +<translation id="2079504693865562705">शेल्फ़ में मौजूद ऐप्लिकेशन छिपाएं</translation> <translation id="2083190527011054446">गुड नाइट <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">नेटवर्क से जुड़ा हुआ नहीं है</translation> <translation id="2126242104232412123">नया डेस्क</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> और</translation> <translation id="3236488194889173876">कोई मोबाइल नेटवर्क उपलब्ध नहीं</translation> <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> को डेस्क <ph name="ACTIVE_DESK" /> से डेस्क <ph name="TARGET_DESK" /> पर सेट कर दिया गया है</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, सिग्नल की क्षमता <ph name="SIGNAL_STRENGTH" /> प्रतिशत है.</translation> <translation id="3255483164551725916">तुम क्या-क्या कर सकती हो?</translation> <translation id="3269597722229482060">दायां क्लिक करें</translation> <translation id="3289674678944039601">अडैप्टर से चार्ज हो रहा है</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">आपने 'सामग्री को बड़ा दिखाने वाली डॉक की गई सेवा' का कीबोर्ड शॉर्टकट दबाया है. क्या आप इसे चालू करना चाहते हैं?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> बंद है.</translation> <translation id="4421231901400348175">आपकी स्क्रीन का नियंत्रण दूरस्थ सहायक के द्वारा <ph name="HELPER_NAME" /> से शेयर किया जा रहा है.</translation> +<translation id="4427613789487709312">डिफ़ॉल्ट (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">मात्रा</translation> <translation id="4450893287417543264">फिर से न दिखाएं</translation> <translation id="445864333228800152">गुड ईवनिंग,</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">गलत पिन</translation> <translation id="5083553833479578423">Assistant की और भी सुविधाओं के बारे में जानें.</translation> <translation id="5136175204352732067">अलग कीबोर्ड कनेक्ट किया गया</translation> +<translation id="5155897006997040331">पढ़े जाने की रफ़्तार</translation> <translation id="5168181903108465623">कास्ट डिवाइस उपलब्ध हैं</translation> <translation id="5170568018924773124">फ़ोल्डर में दिखाएं</translation> <translation id="5176318573511391780">स्क्रीन के कुछ हिस्से को रिकॉर्ड करें</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">वीपीएन</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 सूचना}one{# सूचना}other{# सूचनाएं}}</translation> <translation id="7724603315864178912">काटें</translation> +<translation id="7745560842763881396">शेल्फ़ में मौजूद ऐप्लिकेशन दिखाएं</translation> <translation id="7749443890790263709">ज़्यादा से ज़्यादा इतने ही डेस्क जोड़े जा सकते हैं.</translation> <translation id="776344839111254542">अपडेट के विवरण देखने के लिए क्लिक करें</translation> <translation id="7780159184141939021">स्क्रीन घुमाएं</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 5041239..a50df34 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portret</translation> <translation id="2067602449040652523">Svjetlina tipkovnice</translation> <translation id="2078034614700056995">Za prelazak na sljedeću radnu površinu prijeđite s četiri prsta udesno</translation> +<translation id="2079504693865562705">Sakrij aplikacije na polici</translation> <translation id="2083190527011054446">Laku noć, <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Niste povezani s mrežom</translation> <translation id="2126242104232412123">Nova radna površina</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">Još <ph name="COUNT" /></translation> <translation id="3236488194889173876">Mobilne mreže nisu dostupne</translation> <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> premješten je s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, jačina signala <ph name="SIGNAL_STRENGTH" /> posto.</translation> <translation id="3255483164551725916">Što možeš učiniti?</translation> <translation id="3269597722229482060">Desni klik</translation> <translation id="3289674678944039601">Punjenje putem adaptera</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Pritisnuli ste tipkovni prečac za usidreno povećalo. Želite li ga uključiti?</translation> <translation id="4412944820643904175">Značajka <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> i vi dijelite kontrolu nad zaslonom putem Daljinske pomoći.</translation> +<translation id="4427613789487709312">Zadano (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Glasnoća</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobra večer,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Netočan PIN</translation> <translation id="5083553833479578423">Otključajte više značajki Asistenta.</translation> <translation id="5136175204352732067">Povezana je neka druga tipkovnica</translation> +<translation id="5155897006997040331">Brzina čitanja</translation> <translation id="5168181903108465623">Dostupni su uređaji za emitiranje</translation> <translation id="5170568018924773124">Pokaži u mapi</translation> <translation id="5176318573511391780">Snimanje dijela zaslona</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 obavijest}one{# obavijest}few{# obavijesti}other{# obavijesti}}</translation> <translation id="7724603315864178912">Izreži</translation> +<translation id="7745560842763881396">Prikaži aplikacije na polici</translation> <translation id="7749443890790263709">Dosegnut je maksimalan broj radnih površina.</translation> <translation id="776344839111254542">Kliknite da biste vidjeli pojedinosti o ažuriranju</translation> <translation id="7780159184141939021">Zakretanje zaslona</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 42bcafb4..3f392ca 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Álló</translation> <translation id="2067602449040652523">Billentyűzet világossága</translation> <translation id="2078034614700056995">Csúsztasson jobbra négy ujjal a következő asztalra váltáshoz</translation> +<translation id="2079504693865562705">A polcon található alkalmazások elrejtése</translation> <translation id="2083190527011054446">Jó éjszakát, <ph name="GIVEN_NAME" />!</translation> <translation id="209965399369889474">Nincs hálózati kapcsolat</translation> <translation id="2126242104232412123">Új asztal</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> további</translation> <translation id="3236488194889173876">Nem áll rendelkezésre mobilhálózat</translation> <translation id="3249513730522716925">A(z) „<ph name="WINDOW_TITLE" />” ablak át lett helyezve a(z) „<ph name="ACTIVE_DESK" />” asztalról a(z) „<ph name="TARGET_DESK" />” asztalra</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, jelerősség: <ph name="SIGNAL_STRENGTH" /> százalék.</translation> <translation id="3255483164551725916">Mit lehet csinálni?</translation> <translation id="3269597722229482060">Kattintás jobb egérgombbal</translation> <translation id="3289674678944039601">Töltés adapteren keresztül…</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Lenyomta a dokkolt nagyító billentyűparancsát. Bekapcsolja a funkciót?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> kikapcsolva.</translation> <translation id="4421231901400348175">A képernyő irányításának megosztása <ph name="HELPER_NAME" /> segítővel a Távsegítség szolgáltatás keretein belül.</translation> +<translation id="4427613789487709312">Alapértelmezett (<ph name="RATE" />×)</translation> <translation id="4430019312045809116">Hangerő</translation> <translation id="4450893287417543264">Ne jelenjen meg többé</translation> <translation id="445864333228800152">Jó estét!</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">Helytelen PIN-kód</translation> <translation id="5083553833479578423">Hozzáférés a Segéd további funkcióihoz</translation> <translation id="5136175204352732067">Új billentyűzet lett csatlakoztatva</translation> +<translation id="5155897006997040331">Olvasás sebessége</translation> <translation id="5168181903108465623">Cast-eszközök állnak rendelkezésre</translation> <translation id="5170568018924773124">Megjelenítés mappában</translation> <translation id="5176318573511391780">Részleges képernyő rögzítése</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 értesítés}other{# értesítés}}</translation> <translation id="7724603315864178912">Kivágás</translation> +<translation id="7745560842763881396">A polcon található alkalmazások megjelenítése</translation> <translation id="7749443890790263709">Elérte az asztalok maximális számát.</translation> <translation id="776344839111254542">Kattintson a frissítés részleteinek megtekintéséhez</translation> <translation id="7780159184141939021">Képernyő elforgatása</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index 525eecc..4ae9104 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">პორტრეტი</translation> <translation id="2067602449040652523">კლავიატურის სიკაშკაშე</translation> <translation id="2078034614700056995">შემდეგ სამუშაო მაგიდაზე გადასართველად გადაფურცლეთ მარჯვნივ ოთხი თითით</translation> +<translation id="2079504693865562705">თაროზე აპების დამალვა</translation> <translation id="2083190527011054446">ღამე მშვიდობის, <ph name="GIVEN_NAME" />!</translation> <translation id="209965399369889474">ქსელთან კავშირი არ არის</translation> <translation id="2126242104232412123">ახალი სამუშაო მაგიდა</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> სხვა</translation> <translation id="3236488194889173876">მობილური ქსელი მიუწვდომელია</translation> <translation id="3249513730522716925">ფანჯარა <ph name="WINDOW_TITLE" /> გადატანილია სამუშაო მაგიდიდან <ph name="ACTIVE_DESK" /> სამუშაო მაგიდაზე <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, სიგნალის სიძლიერეა <ph name="SIGNAL_STRENGTH" /> პროცენტი.</translation> <translation id="3255483164551725916">რისი გაკეთება შეგიძლია?</translation> <translation id="3269597722229482060">მარჯვენა დაწკაპუნება</translation> <translation id="3289674678944039601">იტენება ადაპტერის მეშვეობით</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">თქვენ დააჭირეთ ჩამაგრებული ლუპის კლავიატურის მალსახმობს. გსურთ მისი ჩართვა?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> გამორთულია.</translation> <translation id="4421231901400348175">თქვენი ეკრანის მართვის გაზიარება <ph name="HELPER_NAME" /> დისტანციური დამხმარეს მეშვეობით.</translation> +<translation id="4427613789487709312">ნაგულისხმევი (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">ხმა</translation> <translation id="4450893287417543264">აღარ გამოჩნდეს</translation> <translation id="445864333228800152">საღამო მშვიდობის,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">არასწორი პინი</translation> <translation id="5083553833479578423">განბლოკეთ ასისტენტის დამატებითი ფუნქციები.</translation> <translation id="5136175204352732067">დაკავშირებულია განსხვავებული კლავიატურა</translation> +<translation id="5155897006997040331">წაკითხვის სიჩქარე</translation> <translation id="5168181903108465623">ხელმისაწვდომია გადაცემის მოწყობილობები</translation> <translation id="5170568018924773124">საქაღალდეში ჩვენება</translation> <translation id="5176318573511391780">ეკრანის ნაწილის ჩაწერა</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 შეტყობინება}other{# შეტყობინება}}</translation> <translation id="7724603315864178912">ამოჭრა</translation> +<translation id="7745560842763881396">თაროზე აპების ჩვენება</translation> <translation id="7749443890790263709">მიღწეულია სამუშაო მაგიდების მაქსიმალური რაოდენობა.</translation> <translation id="776344839111254542">დააწკაპუნეთ განახლების დეტალების სანახავად</translation> <translation id="7780159184141939021">ეკრანის ბრუნვა</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb index f89a07ad..94f0cc8 100644 --- a/ash/strings/ash_strings_lo.xtb +++ b/ash/strings/ash_strings_lo.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">ລວງຕັ້ງ</translation> <translation id="2067602449040652523">ຄວາມແຈ້ງຂອງແປ້ນພິມ</translation> <translation id="2078034614700056995">ໃຊ້ສີ່ນິ້ວມືປັດໄປຂວາເພື່ອປ່ຽນໄປໃຊ້ໂຕະກ່ອນໜ້າ</translation> +<translation id="2079504693865562705">ເຊື່ອງແອັບໃນຖ້ານ</translation> <translation id="2083190527011054446">ຝັນດີ <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">ບໍ່ເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍ</translation> <translation id="2126242104232412123">ພື້ນທີ່ເຮັດວຽກໃໝ່</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">ອີກ +<ph name="COUNT" /></translation> <translation id="3236488194889173876">ບໍ່ມີເຄືອຂ່າຍມືຖື</translation> <translation id="3249513730522716925">ຍ້າຍໜ້າຈໍ <ph name="WINDOW_TITLE" /> ຈາກເດັສ <ph name="ACTIVE_DESK" /> ໄປຫາເດັສ <ph name="TARGET_DESK" /> ແລ້ວ</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, ຄວາມແຮງສັນຍານ <ph name="SIGNAL_STRENGTH" /> ເປີເຊັນ.</translation> <translation id="3255483164551725916">ທ່ານເຮັດຫຍັງໄດ້ແດ່?</translation> <translation id="3269597722229482060">ຄລິກຂວາ</translation> <translation id="3289674678944039601">ກຳລັງສາກຜ່ານອະແດັບເຕີ</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">ທ່ານໄດ້ກົດປຸ່ມລັດແປ້ນພິມສຳລັບແວ່ນຂະຫຍາຍທີ່ຕັ້ງໄວ້ແລ້ວ. ທ່ານຕ້ອງການເປີດມັນບໍ?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ປິດຢູ່.</translation> <translation id="4421231901400348175">ການແບ່ງປັນການຄວບຄຸມໜ້າຈໍຂອງທ່ານກັບ <ph name="HELPER_NAME" /> ຜ່ານຕົວຊ່ວຍທາງໄກ.</translation> +<translation id="4427613789487709312">ຄ່າເລີ່ມຕົ້ນ (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">ລະດັບສຽງ</translation> <translation id="4450893287417543264">ຢ່າສະແດງອີກ</translation> <translation id="445864333228800152">ສະບາຍດີຕອນແລງ,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">PIN ບໍ່ຖືກຕ້ອງ</translation> <translation id="5083553833479578423">ປົດລັອກຄຸນສົມບັດເພີ່ມເຕີມຂອງຜູ້ຊ່ວຍ.</translation> <translation id="5136175204352732067">ເຊື່ອມຕໍ່ແປ້ນພິມອື່ນແລ້ວ</translation> +<translation id="5155897006997040331">ຄວາມໄວການອ່ານ</translation> <translation id="5168181903108465623">ອຸປະກອນຄາສທ໌ທີ່ມີໃຫ້</translation> <translation id="5170568018924773124">ສະແດງຢູ່ໃນໂຟລເດີ</translation> <translation id="5176318573511391780">ບັນທຶກໜ້າຈໍບາງສ່ວນ</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 ການແຈ້ງເຕືອນ}other{# ການແຈ້ງເຕືອນ}}</translation> <translation id="7724603315864178912">ຕັດ</translation> +<translation id="7745560842763881396">ສະແດງແອັບໃນຖ້ານ</translation> <translation id="7749443890790263709">ຮອດຈຳນວນສູງສຸດຂອງພື້ນທີ່ເຮັດວຽກແລ້ວ</translation> <translation id="776344839111254542">ຄລິກເພື່ອເບິ່ງລາຍລະອຽດການອັບເດດ</translation> <translation id="7780159184141939021">ໝຸນໜ້າຈໍ</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 018fedb2..4a7d460 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portrets</translation> <translation id="2067602449040652523">Tastatūras spilgtums</translation> <translation id="2078034614700056995">Lai pārslēgtos uz nākamo darbvietu, ar četriem pirkstiem velciet pa labi</translation> +<translation id="2079504693865562705">Paslēpt lietotņu joslu</translation> <translation id="2083190527011054446">Arlabunakti, <ph name="GIVEN_NAME" />!</translation> <translation id="209965399369889474">Nav savienojuma ar tīklu</translation> <translation id="2126242104232412123">Jauna darbvieta</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">vēl <ph name="COUNT" /></translation> <translation id="3236488194889173876">Mobilais tīkls nav pieejams</translation> <translation id="3249513730522716925">Logs <ph name="WINDOW_TITLE" /> pārvietots no darbvirsmas <ph name="ACTIVE_DESK" /> uz darbvirsmu <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, signāla stiprums ir <ph name="SIGNAL_STRENGTH" /> %.</translation> <translation id="3255483164551725916">Iespējamās darbības</translation> <translation id="3269597722229482060">Noklikšķināt ar peles labo pogu</translation> <translation id="3289674678944039601">Notiek uzlāde, izmantojot adapteri</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Jūs nospiedāt dokotās lupas īsinājumtaustiņu. Vai vēlaties to ieslēgt?</translation> <translation id="4412944820643904175">Funkcija <ph name="FEATURE_NAME" /> ir izslēgta.</translation> <translation id="4421231901400348175">Ekrāna pārvaldības koplietošana ar <ph name="HELPER_NAME" />, izmantojot attālo palīdzību.</translation> +<translation id="4427613789487709312">Noklusējums (reiz <ph name="RATE" />)</translation> <translation id="4430019312045809116">Skaļums</translation> <translation id="4450893287417543264">Vairs nerādīt</translation> <translation id="445864333228800152">Labvakar!</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Nepareizs PIN</translation> <translation id="5083553833479578423">Piekļūstiet citām Asistenta funkcijām</translation> <translation id="5136175204352732067">Ir pievienota cita tastatūra</translation> +<translation id="5155897006997040331">Lasīšanas ātrums</translation> <translation id="5168181903108465623">Pieejamas apraides ierīces</translation> <translation id="5170568018924773124">Rādīt mapē</translation> <translation id="5176318573511391780">Ierakstīt daļu ekrāna</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 paziņojums}zero{# paziņojumu}one{# paziņojums}other{# paziņojumi}}</translation> <translation id="7724603315864178912">Izgriezt</translation> +<translation id="7745560842763881396">Rādīt lietotņu joslu</translation> <translation id="7749443890790263709">Sasniegts maksimālais darbvietu skaits.</translation> <translation id="776344839111254542">Noklikšķiniet, lai skatītu atjauninājuma datus.</translation> <translation id="7780159184141939021">Ekrāna pagriešana</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 7dda995..ff6ecb1 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Портрет</translation> <translation id="2067602449040652523">Осветленост на тастатурата</translation> <translation id="2078034614700056995">Повлечете надесно со четири прста за да се префрлите на следната работна површина</translation> +<translation id="2079504693865562705">Сокриј ги апликациите од полицата</translation> <translation id="2083190527011054446">Добра ноќ <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Не е поврзан на мрежа</translation> <translation id="2126242104232412123">Нов работен простор</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">и уште <ph name="COUNT" /></translation> <translation id="3236488194889173876">Нема достапна мобилна мрежа</translation> <translation id="3249513730522716925">Прозорецот <ph name="WINDOW_TITLE" /> се премести од работен простор <ph name="ACTIVE_DESK" /> на работен простор <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" /> %.</translation> <translation id="3255483164551725916">Што можеш да направиш?</translation> <translation id="3269597722229482060">Десен клик</translation> <translation id="3289674678944039601">Се полни преку адаптер</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Ја притиснавте кратенката од тастатура за закотвената лупа. Дали сакате да ја вклучите?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> е исклучено.</translation> <translation id="4421231901400348175">Споделување контрола на вашиот екран со <ph name="HELPER_NAME" /> преку далечинска помош.</translation> +<translation id="4427613789487709312">Стандардно (<ph name="RATE" /> пати)</translation> <translation id="4430019312045809116">Гласност</translation> <translation id="4450893287417543264">Не прикажувај повторно</translation> <translation id="445864333228800152">Добровечер,</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">Неточен PIN</translation> <translation id="5083553833479578423">Отклучете повеќе функции на „Помошникот“.</translation> <translation id="5136175204352732067">Поврзана е друга тастатура</translation> +<translation id="5155897006997040331">Брзина на читање</translation> <translation id="5168181903108465623">Достапни се уреди за емитување</translation> <translation id="5170568018924773124">Прикажи во папка</translation> <translation id="5176318573511391780">Делумно снимање екран</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 известување}one{# известување}other{# известувања}}</translation> <translation id="7724603315864178912">Исечи</translation> +<translation id="7745560842763881396">Прикажи ги апликациите од полицата</translation> <translation id="7749443890790263709">Достигнат е максималниот број работни простори.</translation> <translation id="776344839111254542">Кликнете за да ги погледнете деталите за ажурирањето</translation> <translation id="7780159184141939021">Ротација на екранот</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index 9b7a621..8e54350 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Хөрөг зураг</translation> <translation id="2067602449040652523">Гарын гэрэлтүүлэг</translation> <translation id="2078034614700056995">Дараагийн дэлгэц рүү сэлгэхийн тулд дөрвөн хуруугаараа баруун тийш шударна уу</translation> +<translation id="2079504693865562705">Аппуудыг тавиураас нуух</translation> <translation id="2083190527011054446">Сайхан амраарай <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Сүлжээнд холбогдоогүй байна</translation> <translation id="2126242104232412123">Шинэ ширээ</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">Бусад +<ph name="COUNT" /></translation> <translation id="3236488194889173876">Мобайл сүлжээ алга</translation> <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> цонхыг <ph name="ACTIVE_DESK" /> дэлгэцээс <ph name="TARGET_DESK" /> дэлгэц рүү зөөсөн</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, Дохионы хүч <ph name="SIGNAL_STRENGTH" /> хувь.</translation> <translation id="3255483164551725916">Та юу хийх боломжтой вэ?</translation> <translation id="3269597722229482060">Баруун талыг товших</translation> <translation id="3289674678944039601">Адаптераар цэнэглэж байна</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Та суурилуулсан томруулагчийн товчлуурын шууд холбоосыг дарсан байна. Үүнийг асаах уу?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> унтраалттай байна.</translation> <translation id="4421231901400348175">Remote Assistance ашиглан <ph name="HELPER_NAME" /> -тэй хамт өөрийн дэлгэцийн хяналтыг хуваалцах.</translation> +<translation id="4427613789487709312">Өгөгдмөл (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Хэмжээ</translation> <translation id="4450893287417543264">Дахиж бүү харуул</translation> <translation id="445864333228800152">Оройн мэнд,</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">PIN код буруу байна</translation> <translation id="5083553833479578423">Tуслахын бусад онцлогийн түгжээг тайлна уу.</translation> <translation id="5136175204352732067">Өөр гар холбосон</translation> +<translation id="5155897006997040331">Унших хурд</translation> <translation id="5168181903108465623">Бэлэн төхөөрөмжийг каст хийх</translation> <translation id="5170568018924773124">Хавтсанд харуул</translation> <translation id="5176318573511391780">Хэсэгчилсэн дэлгэцийг бичих</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 мэдэгдэл}other{# мэдэгдэл}}</translation> <translation id="7724603315864178912">Хайчлах</translation> +<translation id="7745560842763881396">Аппуудыг тавиур дээр харуулах</translation> <translation id="7749443890790263709">Дэлгэцийн тоо хамгийн дээд хэмжээнд хүрлээ.</translation> <translation id="776344839111254542">Шинэчлэлтийн дэлгэрэнгүйг харахын тулд товшино уу</translation> <translation id="7780159184141939021">Дэлгэцийг эргүүлсэн</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 4f2e6e6..7a633c8 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Potret</translation> <translation id="2067602449040652523">Kecerahan papan kekunci</translation> <translation id="2078034614700056995">Leret ke kanan dengan empat jari untuk beralih kepada meja seterusnya</translation> +<translation id="2079504693865562705">Sembunyikan apl dalam rak</translation> <translation id="2083190527011054446">Selamat malam <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Tidak bersambung ke rangkaian</translation> <translation id="2126242104232412123">Meja baharu</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> lagi</translation> <translation id="3236488194889173876">Tiada rangkaian mudah alih tersedia</translation> <translation id="3249513730522716925">Tetingkap <ph name="WINDOW_TITLE" /> dialihkan daripada Meja <ph name="ACTIVE_DESK" /> ke Meja <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, Kekuatan isyarat <ph name="SIGNAL_STRENGTH" /> peratus.</translation> <translation id="3255483164551725916">Apakah yang boleh anda lakukan?</translation> <translation id="3269597722229482060">Klik Kanan</translation> <translation id="3289674678944039601">Mengecas melalui penyesuai</translation> @@ -370,6 +372,7 @@ <translation id="4389184120735010762">Anda menekan pintasan papan kekunci untuk penggadang yang didok. Adakah anda ingin menghidupkannya?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> dimatikan.</translation> <translation id="4421231901400348175">Berkongsi kawalan skrin anda dengan <ph name="HELPER_NAME" /> melalui Bantuan Jauh.</translation> +<translation id="4427613789487709312">Lalai (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Kelantangan</translation> <translation id="4450893287417543264">Jangan tunjukkan lagi</translation> <translation id="445864333228800152">Selamat petang,</translation> @@ -450,6 +453,7 @@ <translation id="5078796286268621944">PIN salah</translation> <translation id="5083553833479578423">Buka kunci pelbagai lagi ciri Assistant.</translation> <translation id="5136175204352732067">Papan kekunci lain disambungkan</translation> +<translation id="5155897006997040331">Kelajuan membaca</translation> <translation id="5168181903108465623">Peranti Cast tersedia</translation> <translation id="5170568018924773124">Paparkan dalam folder</translation> <translation id="5176318573511391780">Rakam skrin separa</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 pemberitahuan}other{# pemberitahuan}}</translation> <translation id="7724603315864178912">Potong</translation> +<translation id="7745560842763881396">Tunjukkan apl dalam rak</translation> <translation id="7749443890790263709">Bilangan maksimum meja dicapai.</translation> <translation id="776344839111254542">Klik untuk melihat butiran kemas kini</translation> <translation id="7780159184141939021">Putarkan Skrin</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index 36c84075..376d48e 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">ဒေါင်လိုက်</translation> <translation id="2067602449040652523">ကီးဘုတ် တောက်ပမှု</translation> <translation id="2078034614700056995">နောက်မျက်နှာပြင်နေရာသို့ ပြောင်းရန် လက်လေးချောင်းဖြင့် ညာသို့ပွတ်ဆွဲပါ</translation> +<translation id="2079504693865562705">အက်ပ်များကို စင်တွင်ဖျောက်ထားရန်</translation> <translation id="2083190527011054446">မင်္ဂလာ ညချမ်းပါ <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">ကွန်ရက်ချိတ်ဆက်မထားပါ</translation> <translation id="2126242104232412123">မျက်နှာပြင်နေရာ အသစ်</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+နောက်ထပ် <ph name="COUNT" /> ခု</translation> <translation id="3236488194889173876">မည်သည့် ကွန်ရက်မျှ မရနိုင်ပါ</translation> <translation id="3249513730522716925">ဝင်းဒိုး <ph name="WINDOW_TITLE" /> ကို 'မြင်ကွင်း <ph name="ACTIVE_DESK" />' မှ 'မြင်ကွင်း <ph name="TARGET_DESK" />' သို့ ရွှေ့ထားသည်</translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />၊ လိုင်းဆွဲအား <ph name="SIGNAL_STRENGTH" /> ရာခိုင်နှုန်း။</translation> <translation id="3255483164551725916">သင်ဘာလုပ်နိုင်သလဲ။</translation> <translation id="3269597722229482060">ညာဘက်ခလုတ်ကို နှိပ်ရန်</translation> <translation id="3289674678944039601">ကြားခံကိရိယာမှတစ်ဆင့် အားသွင်းနေသည်</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">တပ်ဆင်ထားသည့် မှန်ဘီလူးအတွက် ကီးဘုတ်ဖြတ်လမ်းလင့်ခ်ကို သင်နှိပ်လိုက်ပါသည်။ ၎င်းကို ဖွင့်လိုပါသလား။</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ပိတ်ထားသည်။</translation> <translation id="4421231901400348175">အဝေးမှ ထောက်ကူခြင်း ဆိုသည်မှ တဆင့် သင့်ဖန်သားပြင်အား <ph name="HELPER_NAME" /> နှင့် မျှဝေသုံးစွဲခြင်း။</translation> +<translation id="4427613789487709312">မူရင်း (<ph name="RATE" /> ဆ)</translation> <translation id="4430019312045809116">ပမာဏ</translation> <translation id="4450893287417543264">ထပ်မပြပါနှင့်</translation> <translation id="445864333228800152">မင်္ဂလာ ညနေခင်းပါ၊</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">မမှန်ကန်သည့် ပင်ကုဒ်</translation> <translation id="5083553833479578423">နောက်ထပ် Assistant ဝန်ဆောင်မှုများကို ဖွင့်ပါ</translation> <translation id="5136175204352732067">မတူညီသည့် ကီးဘုတ်ကို ချိတ်ဆက်ထားသည်</translation> +<translation id="5155897006997040331">စာဖတ်နှုန်း</translation> <translation id="5168181903108465623">Cast စက်ကိရိယာများ ရနိုင်၏</translation> <translation id="5170568018924773124">ဖိုလ်ဒါ ထဲမှာ ပြရန်</translation> <translation id="5176318573511391780">ဖန်သားပြင်တစ်စိတ်တစ်ပိုင်းကို ရိုက်ကူးရန်</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{အကြောင်းကြားချက် ၁ ခု}other{အကြောင်းကြားချက် # ခု}}</translation> <translation id="7724603315864178912">ဖြတ်တောက်</translation> +<translation id="7745560842763881396">အက်ပ်များကို စင်တွင်ပြရန်</translation> <translation id="7749443890790263709">အများဆုံးသတ်မှတ်ထားသည့် စားပွဲအရေအတွက် ပြည့်သွားပါပြီ။</translation> <translation id="776344839111254542">အပ်ဒိတ်အသေးစိတ် အချက်အလက်များကို ကြည့်ရန် နှိပ်ပါ</translation> <translation id="7780159184141939021">မျက်နှာပြင် လှည့်ခြင်း</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 32565c1..4728325 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Stående</translation> <translation id="2067602449040652523">Lysstyrke på tastaturet</translation> <translation id="2078034614700056995">Sveip til høyre med fire fingre for å bytte til neste skrivebord</translation> +<translation id="2079504693865562705">Skjul apper på hyllen</translation> <translation id="2083190527011054446">God natt, <ph name="GIVEN_NAME" /></translation> <translation id="209965399369889474">Ikke koblet til nettverket</translation> <translation id="2126242104232412123">Nytt skrivebord</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> til</translation> <translation id="3236488194889173876">Ingen mobilnettverk er tilgjengelige</translation> <translation id="3249513730522716925">Vinduet <ph name="WINDOW_TITLE" /> ble flyttet fra skrivebord <ph name="ACTIVE_DESK" /> til skrivebord <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> prosent.</translation> <translation id="3255483164551725916">Hva kan du gjøre?</translation> <translation id="3269597722229482060">Høyreklikk</translation> <translation id="3289674678944039601">Lader via adapter</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Du trykket på hurtigtasten for den dokkede lupen. Vil du slå den på?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> er av.</translation> <translation id="4421231901400348175">Deler kontroll av skjermen med <ph name="HELPER_NAME" /> via fjernhjelp.</translation> +<translation id="4427613789487709312">Standard (<ph name="RATE" /> ×)</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4450893287417543264">Ikke vis igjen</translation> <translation id="445864333228800152">God kveld</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Feil personlig kode</translation> <translation id="5083553833479578423">Lås opp flere Assistent-funksjoner.</translation> <translation id="5136175204352732067">Et annet tastatur er koblet til</translation> +<translation id="5155897006997040331">Lesehastighet</translation> <translation id="5168181903108465623">Cast-enheter er tilgjengelige</translation> <translation id="5170568018924773124">Vis i mappen</translation> <translation id="5176318573511391780">Ta opp en del av skjermen</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 varsel}other{# varsler}}</translation> <translation id="7724603315864178912">Klipp ut</translation> +<translation id="7745560842763881396">Vis apper på hyllen</translation> <translation id="7749443890790263709">Maksimalt antall skrivebord er nådd.</translation> <translation id="776344839111254542">Klikk for å se oppdateringsdetaljene</translation> <translation id="7780159184141939021">Rotér skjermen</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index b7e0376..3e1adf9 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -481,7 +481,7 @@ <translation id="5516420770350073386">Nagrywanie ekranu zostało zatrzymane przez administratora z powodu wyświetlenia pewnych treści.</translation> <translation id="5519195206574732858">LTE</translation> <translation id="5523434445161341166">Funkcja <ph name="FEATURE_NAME" /> nawiązuje połączenie.</translation> -<translation id="5532994612895037630">Aby nagrać cały ekran, kliknij w dowolnym miejscu</translation> +<translation id="5532994612895037630">Aby zrobić zrzut całego ekranu, kliknij w dowolnym miejscu</translation> <translation id="553675580533261935">Zamykanie sesji</translation> <translation id="5537725057119320332">Przesyłaj</translation> <translation id="554893713779400387">Włącz lub wyłącz dyktowanie</translation> @@ -540,7 +540,7 @@ <translation id="602001110135236999">Przewiń w lewo</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, siła sygnału: <ph name="SIGNAL_STRENGTH" />, zarządzana przez administratora</translation> <translation id="6030495522958826102">Menu zostało przeniesione w lewy dolny róg ekranu.</translation> -<translation id="6032620807120418574">Aby nagrać cały ekran, kliknij w dowolnym miejscu</translation> +<translation id="6032620807120418574">Aby zrobić zrzut całego ekranu, kliknij w dowolnym miejscu</translation> <translation id="6040143037577758943">Zamknij</translation> <translation id="6043212731627905357">Ten monitor nie działa z Twoim urządzeniem <ph name="DEVICE_TYPE" /> (nie jest obsługiwany).</translation> <translation id="6043994281159824495">Wyloguj się teraz</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index 588d9b32..84b9dac2 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Vertical</translation> <translation id="2067602449040652523">Brilho do teclado</translation> <translation id="2078034614700056995">Deslize rapidamente para a direita com quatro dedos para mudar para o espaço de trabalho seguinte.</translation> +<translation id="2079504693865562705">Ocultar apps na prateleira</translation> <translation id="2083190527011054446">Boa noite, <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Não está ligado à rede.</translation> <translation id="2126242104232412123">Novo espaço de trabalho</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">E mais <ph name="COUNT" /></translation> <translation id="3236488194889173876">Nenhuma rede móvel disponível</translation> <translation id="3249513730522716925">A janela <ph name="WINDOW_TITLE" /> foi movida do espaço de trabalho <ph name="ACTIVE_DESK" /> para o espaço de trabalho <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, intensidade do sinal a <ph name="SIGNAL_STRENGTH" /> por cento.</translation> <translation id="3255483164551725916">O que podes fazer?</translation> <translation id="3269597722229482060">Clicar com o botão direito do rato</translation> <translation id="3289674678944039601">A carregar através de adaptador…</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Premiu o atalho de teclado da lupa ancorada. Pretende ativá-la?</translation> <translation id="4412944820643904175">A funcionalidade <ph name="FEATURE_NAME" /> está desativada.</translation> <translation id="4421231901400348175">A partilhar o controlo do seu ecrã com <ph name="HELPER_NAME" /> através da Assistência remota.</translation> +<translation id="4427613789487709312">Predefinição (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Não mostrar de novo</translation> <translation id="445864333228800152">Boa noite,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">PIN incorreto</translation> <translation id="5083553833479578423">Desbloqueie mais funcionalidades do Assistente.</translation> <translation id="5136175204352732067">Teclado diferente ligado</translation> +<translation id="5155897006997040331">Velocidade de leitura</translation> <translation id="5168181903108465623">Dispositivos de transmissão disponíveis</translation> <translation id="5170568018924773124">Mostrar numa pasta</translation> <translation id="5176318573511391780">Gravar ecrã parcial</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 notificação}other{# notificações}}</translation> <translation id="7724603315864178912">Cortar</translation> +<translation id="7745560842763881396">Mostrar apps na prateleira</translation> <translation id="7749443890790263709">Atingiu o número máximo de espaços de trabalho.</translation> <translation id="776344839111254542">Clique para ver os detalhes da atualização</translation> <translation id="7780159184141939021">Rodar ecrã</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index a3d63c1..2dce594 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Portret</translation> <translation id="2067602449040652523">Luminozitatea tastaturii</translation> <translation id="2078034614700056995">Glisează spre dreapta cu patru degete pentru a comuta la desktopul următor</translation> +<translation id="2079504693865562705">Ascunde aplicațiile din raft</translation> <translation id="2083190527011054446">Bună seara, <ph name="GIVEN_NAME" />!</translation> <translation id="209965399369889474">Fără conexiune la rețea</translation> <translation id="2126242104232412123">Desktop nou</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+ încă <ph name="COUNT" /></translation> <translation id="3236488194889173876">Nicio rețea mobilă disponibilă</translation> <translation id="3249513730522716925">Fereastra <ph name="WINDOW_TITLE" /> a fost mutată de pe desktopul <ph name="ACTIVE_DESK" /> pe desktopul <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, puterea semnalului: <ph name="SIGNAL_STRENGTH" /> %.</translation> <translation id="3255483164551725916">Ce poți face?</translation> <translation id="3269597722229482060">Clic dreapta</translation> <translation id="3289674678944039601">Se încarcă prin adaptor</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Ai accesat comanda rapidă de la tastatură pentru lupa andocată. Vrei să o activezi?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> este dezactivat.</translation> <translation id="4421231901400348175">În prezent, <ph name="HELPER_NAME" /> îți poate controla ecranul prin Asistență la distanță.</translation> +<translation id="4427613789487709312">Prestabilită (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4450893287417543264">Nu mai afișa</translation> <translation id="445864333228800152">Bună seara!</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Cod PIN incorect</translation> <translation id="5083553833479578423">Deblochează mai multe funcții ale Asistentului.</translation> <translation id="5136175204352732067">Altă tastatură conectată</translation> +<translation id="5155897006997040331">Viteza de citire</translation> <translation id="5168181903108465623">Dispozitive de proiecție disponibile</translation> <translation id="5170568018924773124">Afișează în dosar</translation> <translation id="5176318573511391780">Înregistrează ecranul parțial</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{O notificare}few{# notificări}other{# de notificări}}</translation> <translation id="7724603315864178912">Decupează</translation> +<translation id="7745560842763881396">Afișează aplicațiile în raft</translation> <translation id="7749443890790263709">S-a atins numărul maxim de desktopuri.</translation> <translation id="776344839111254542">Dă clic pentru a vedea detaliile actualizării</translation> <translation id="7780159184141939021">Rotește ecranul</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 57e2ea5..d0bd892 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Vertikalno</translation> <translation id="2067602449040652523">Osvetljenost tastature</translation> <translation id="2078034614700056995">Prevucite udesno pomoću četiri prsta da biste prešli na sledeću radnu površinu</translation> +<translation id="2079504693865562705">Sakrij aplikacije na polici</translation> <translation id="2083190527011054446">Laku noć, <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Niste povezani na mrežu</translation> <translation id="2126242104232412123">Novi radni prostor</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">i još <ph name="COUNT" /></translation> <translation id="3236488194889173876">Nije dostupna nijedna mobilna mreža</translation> <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premešten sa radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, jačina signala <ph name="SIGNAL_STRENGTH" /> odsto.</translation> <translation id="3255483164551725916">Šta možeš da radiš?</translation> <translation id="3269597722229482060">Desni klik</translation> <translation id="3289674678944039601">Puni se preko adaptera</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Pritisnuli ste tastersku prečicu za montiranu lupu ekrana. Želite li da je uključite?</translation> <translation id="4412944820643904175">Funkcija <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175">Delite kontrolu nad ekranom sa osobom <ph name="HELPER_NAME" /> preko Daljinske pomoći.</translation> +<translation id="4427613789487709312">Podrazumevano (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Jačina zvuka</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> <translation id="445864333228800152">Dobro veče,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Netačan PIN</translation> <translation id="5083553833479578423">Otključajte još funkcija Pomoćnika.</translation> <translation id="5136175204352732067">Neka druga tastatura je povezana</translation> +<translation id="5155897006997040331">Brzina čitanja</translation> <translation id="5168181903108465623">Dostupni su uređaji za prebacivanje</translation> <translation id="5170568018924773124">Prikaži u direktorijumu</translation> <translation id="5176318573511391780">Snimi deo ekrana</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 obaveštenje}one{# obaveštenje}few{# obaveštenja}other{# obaveštenja}}</translation> <translation id="7724603315864178912">Iseci</translation> +<translation id="7745560842763881396">Prikaži aplikacije na polici</translation> <translation id="7749443890790263709">Dostigli ste maksimalan broj radnih površina.</translation> <translation id="776344839111254542">Kliknite za prikaz detalja ažuriranja</translation> <translation id="7780159184141939021">Rotirajte ekran</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 52f81cef..3261066 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Вертикално</translation> <translation id="2067602449040652523">Осветљеност тастатуре</translation> <translation id="2078034614700056995">Превуците удесно помоћу четири прста да бисте прешли на следећу радну површину</translation> +<translation id="2079504693865562705">Сакриј апликације на полици</translation> <translation id="2083190527011054446">Лаку ноћ, <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Нисте повезани на мрежу</translation> <translation id="2126242104232412123">Нови радни простор</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">и још <ph name="COUNT" /></translation> <translation id="3236488194889173876">Није доступна ниједна мобилна мрежа</translation> <translation id="3249513730522716925">Прозор <ph name="WINDOW_TITLE" /> је премештен са радне површине <ph name="ACTIVE_DESK" /> на радну површину <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, јачина сигнала <ph name="SIGNAL_STRENGTH" /> одсто.</translation> <translation id="3255483164551725916">Шта можеш да радиш?</translation> <translation id="3269597722229482060">Десни клик</translation> <translation id="3289674678944039601">Пуни се преко адаптера</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Притиснули сте тастерску пречицу за монтирану лупу екрана. Желите ли да је укључите?</translation> <translation id="4412944820643904175">Функција <ph name="FEATURE_NAME" /> је искључена.</translation> <translation id="4421231901400348175">Делите контролу над екраном са особом <ph name="HELPER_NAME" /> преко Даљинске помоћи.</translation> +<translation id="4427613789487709312">Подразумевано (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Јачина звука</translation> <translation id="4450893287417543264">Не приказуј поново</translation> <translation id="445864333228800152">Добро вече,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">Нетачан PIN</translation> <translation id="5083553833479578423">Откључајте још функција Помоћника.</translation> <translation id="5136175204352732067">Нека друга тастатура је повезана</translation> +<translation id="5155897006997040331">Брзина читања</translation> <translation id="5168181903108465623">Доступни су уређаји за пребацивање</translation> <translation id="5170568018924773124">Прикажи у директоријуму</translation> <translation id="5176318573511391780">Сними део екрана</translation> @@ -712,6 +716,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{1 обавештење}one{# обавештење}few{# обавештења}other{# обавештења}}</translation> <translation id="7724603315864178912">Исеци</translation> +<translation id="7745560842763881396">Прикажи апликације на полици</translation> <translation id="7749443890790263709">Достигли сте максималан број радних површина.</translation> <translation id="776344839111254542">Кликните за приказ детаља ажурирања</translation> <translation id="7780159184141939021">Ротирајте екран</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 4e950a5..e34aec4 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -122,6 +122,7 @@ <translation id="2050339315714019657">Wima</translation> <translation id="2067602449040652523">Ung'avu wa kibodi</translation> <translation id="2078034614700056995">Telezesha vidole vinne kulia ili uende kwenye eneokazi linalofuata</translation> +<translation id="2079504693865562705">Ficha programu kwenye rafu</translation> <translation id="2083190527011054446">Usiku mwema <ph name="GIVEN_NAME" />,</translation> <translation id="209965399369889474">Haijaunganishwa kwenye mtandao</translation> <translation id="2126242104232412123">Sehemu mpya ya kufanyia kazi</translation> @@ -238,6 +239,7 @@ <translation id="3226991577105957773">+<ph name="COUNT" /> zaidi</translation> <translation id="3236488194889173876">Mtandao wa simu haupatikani</translation> <translation id="3249513730522716925">Dirisha la <ph name="WINDOW_TITLE" /> limehamishwa kutoka Kiolesura cha <ph name="ACTIVE_DESK" /> hadi Kiolesura cha <ph name="TARGET_DESK" /></translation> +<translation id="3252068179161473151"><ph name="WIRELESS_PROVIDER" />, Uthabiti wa mtandao, asilimia <ph name="SIGNAL_STRENGTH" />.</translation> <translation id="3255483164551725916">Unaweza kufanya nini?</translation> <translation id="3269597722229482060">Bofya Kulia</translation> <translation id="3289674678944039601">Inachaji kupitia adapta</translation> @@ -369,6 +371,7 @@ <translation id="4389184120735010762">Umebofya mikato ya kibodi ya kikuzaji kilichoambatishwa. Ungependa kukiwasha?</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> kimezimwa.</translation> <translation id="4421231901400348175">Kushiriki udhibiti wa skrini yako na <ph name="HELPER_NAME" /> kupitia Usaidizi wa Mbali.</translation> +<translation id="4427613789487709312">Chaguomsingi (<ph name="RATE" />x)</translation> <translation id="4430019312045809116">Kiwango cha sauti</translation> <translation id="4450893287417543264">Usionyeshe tena</translation> <translation id="445864333228800152">Habari za jioni,</translation> @@ -449,6 +452,7 @@ <translation id="5078796286268621944">PIN isiyo sahihi</translation> <translation id="5083553833479578423">Fungua vipengele zaidi vya programu yako ya Mratibu.</translation> <translation id="5136175204352732067">Kibodi tofauti imeunganishwa</translation> +<translation id="5155897006997040331">Kasi ya kusoma</translation> <translation id="5168181903108465623">Vifaa vinavyorusha maudhui vinapatikana</translation> <translation id="5170568018924773124">Onyesha katika folda</translation> <translation id="5176318573511391780">Rekodi sehemu ya skrini</translation> @@ -713,6 +717,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{Arifa 1}other{Arifa #}}</translation> <translation id="7724603315864178912">Kata</translation> +<translation id="7745560842763881396">Onyesha programu kwenye rafu</translation> <translation id="7749443890790263709">Umefikia idadi ya juu zaidi ya violesura.</translation> <translation id="776344839111254542">Bofya ili uone maelezo ya masasisho</translation> <translation id="7780159184141939021">Zungusha Skrini</translation>
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.cc b/ash/wm/tablet_mode/tablet_mode_controller.cc index 56f83ff..36ce3a2e 100644 --- a/ash/wm/tablet_mode/tablet_mode_controller.cc +++ b/ash/wm/tablet_mode/tablet_mode_controller.cc
@@ -262,6 +262,17 @@ TabletModeController::ForcePhysicalTabletState::kForceTabletMode, }; +// Defines the behavior that sticks to physical tablet state. Used to implement +// the --force-in-tablet-physical-state switch. +constexpr TabletModeController::TabletModeBehavior kForceOnBySwitch{ + /*use_sensor=*/false, + /*observe_display_events=*/false, + /*observe_pointer_device_events=*/true, + /*block_internal_input_device=*/true, + /*always_show_overview_button=*/false, + TabletModeController::ForcePhysicalTabletState::kForceTabletMode, +}; + using LidState = chromeos::PowerManagerClient::LidState; using TabletMode = chromeos::PowerManagerClient::TabletMode; @@ -572,6 +583,12 @@ case UiMode::kNone: break; } + + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kForceInTabletPhysicalState)) { + tablet_mode_behavior_ = kForceOnBySwitch; + SetIsInTabletPhysicalState(CalculateIsInTabletPhysicalState()); + } } void TabletModeController::OnDisplayConfigurationChanged() {
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.h b/ash/wm/tablet_mode/tablet_mode_controller.h index 5c87daa1..0944db3 100644 --- a/ash/wm/tablet_mode/tablet_mode_controller.h +++ b/ash/wm/tablet_mode/tablet_mode_controller.h
@@ -378,8 +378,9 @@ UiMode forced_ui_mode_ = UiMode::kNone; // True if the device is physically in a tablet state regardless of the UI - // tablet mode state. The physical tablet state only changes based on device - // events such as lid angle changes, or device getting detached from its base. + // tablet mode state. The physical tablet state usually changes based on + // device events such as lid angle changes, or device getting detached from + // its base. A device also can be forced to stay in physical tablet state. bool is_in_tablet_physical_state_ = false; // Set when tablet mode switch is on. This is used to force tablet mode.
diff --git a/base/allocator/partition_allocator/partition_alloc-inl.h b/base/allocator/partition_allocator/partition_alloc-inl.h index 6a78cdf..0c5dc2cd 100644 --- a/base/allocator/partition_allocator/partition_alloc-inl.h +++ b/base/allocator/partition_allocator/partition_alloc-inl.h
@@ -16,6 +16,9 @@ #include <windows.h> #endif +#define PARTITION_EXTRAS_REQUIRED \ + (DCHECK_IS_ON() || ENABLE_REF_COUNT_FOR_BACKUP_REF_PTR) + namespace base { namespace internal {
diff --git a/base/allocator/partition_allocator/partition_root.cc b/base/allocator/partition_allocator/partition_root.cc index 243c424..d6c875b 100644 --- a/base/allocator/partition_allocator/partition_root.cc +++ b/base/allocator/partition_allocator/partition_root.cc
@@ -355,6 +355,7 @@ // ref-count at the beginning of the slot. allow_extras = (opts.alignment != PartitionOptions::Alignment::kAlignedAlloc); +#if PARTITION_EXTRAS_REQUIRED size_t size = 0, offset = 0; if (allow_extras) { size += internal::kPartitionCookieSizeAdjustment; @@ -365,6 +366,7 @@ } extras_size = static_cast<uint32_t>(size); extras_offset = static_cast<uint32_t>(offset); +#endif pcscan_mode = PartitionOptionsToPCScanMode<thread_safe>(opts.pcscan); if (pcscan_mode == PCScanMode::kEnabled) {
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 4fd2b3d..7ff1299 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -131,8 +131,6 @@ using ScopedGuard = internal::ScopedGuard<thread_safe>; using PCScan = internal::PCScan<thread_safe>; - internal::MaybeSpinLock<thread_safe> lock_; - enum class PCScanMode : uint8_t { kNonScannable, kDisabled, @@ -140,13 +138,41 @@ } pcscan_mode = PCScanMode::kNonScannable; // Flags accessed on fast paths. + // + // Careful! PartitionAlloc's performance is sensitive to its layout. Please + // put the fast-path objects below, and the other ones further (see comment in + // this file). bool with_thread_cache = false; const bool is_thread_safe = thread_safe; - bool initialized = false; bool allow_extras; + +#if !PARTITION_EXTRAS_REQUIRED + // Teach the compiler that `AdjustSizeForExtrasAdd` etc. can be eliminated + // in builds that use no extras. + static constexpr uint32_t extras_size = 0; + static constexpr uint32_t extras_offset = 0; +#else uint32_t extras_size; uint32_t extras_offset; +#endif + + // Not used on the fastest path (thread cache allocations), but on the fast + // path of the central allocator. + internal::MaybeSpinLock<thread_safe> lock_; + + // The bucket lookup table lets us map a size_t to a bucket quickly. + // The trailing +1 caters for the overflow case for very large allocation + // sizes. It is one flat array instead of a 2D array because in the 2D + // world, we'd need to index array[blah][max+1] which risks undefined + // behavior. + static uint16_t + bucket_index_lookup[((kBitsPerSizeT + 1) * kNumBucketsPerOrder) + 1]; + Bucket buckets[kNumBuckets] = {}; + Bucket sentinel_bucket; + + // All fields below this comment are not accessed on the fast path. + bool initialized = false; // Bookkeeping. // - total_size_of_super_pages - total virtual address space for normal bucket @@ -177,18 +203,6 @@ // Integrity check = ~reinterpret_cast<uintptr_t>(this). uintptr_t inverted_self = 0; - // The bucket lookup table lets us map a size_t to a bucket quickly. - // The trailing +1 caters for the overflow case for very large allocation - // sizes. It is one flat array instead of a 2D array because in the 2D - // world, we'd need to index array[blah][max+1] which risks undefined - // behavior. - static uint16_t - bucket_index_lookup[((kBitsPerSizeT + 1) * kNumBucketsPerOrder) + 1]; - // Accessed on fast paths, but sizeof(Bucket) is large, so there is no real - // benefit in packing it with other members. - Bucket buckets[kNumBuckets] = {}; - Bucket sentinel_bucket; - PartitionRoot() = default; explicit PartitionRoot(PartitionOptions opts) { Init(opts); } ~PartitionRoot();
diff --git a/base/android/java/src/org/chromium/base/BundleUtils.java b/base/android/java/src/org/chromium/base/BundleUtils.java index 1971e14..00fc6c5 100644 --- a/base/android/java/src/org/chromium/base/BundleUtils.java +++ b/base/android/java/src/org/chromium/base/BundleUtils.java
@@ -117,6 +117,15 @@ if (path != null) { return path; } + + // SplitCompat is installed on the application context, so check there for library paths + // which were added to that ClassLoader. + path = ((BaseDexClassLoader) ContextUtils.getApplicationContext().getClassLoader()) + .findLibrary(libraryName); + if (path != null) { + return path; + } + return getSplitApkLibraryPath(libraryName, splitName); } }
diff --git a/base/containers/flat_tree.h b/base/containers/flat_tree.h index 1cd1b32..733eedaf 100644 --- a/base/containers/flat_tree.h +++ b/base/containers/flat_tree.h
@@ -186,7 +186,7 @@ flat_tree() = default; flat_tree(const flat_tree&) = default; - flat_tree(flat_tree&&) noexcept = default; + flat_tree(flat_tree&&) = default; explicit flat_tree(const key_compare& comp); @@ -229,8 +229,7 @@ // Assume that move assignment invalidates iterators and references. flat_tree& operator=(const flat_tree&) = default; - flat_tree& operator=(flat_tree&&) noexcept( - std::is_nothrow_move_assignable<container_type>::value) = default; + flat_tree& operator=(flat_tree&&) = default; // Takes the first if there are duplicates in the initializer list. flat_tree& operator=(std::initializer_list<value_type> ilist);
diff --git a/base/containers/flat_tree_unittest.cc b/base/containers/flat_tree_unittest.cc index 21da264..0f8ef520 100644 --- a/base/containers/flat_tree_unittest.cc +++ b/base/containers/flat_tree_unittest.cc
@@ -199,6 +199,28 @@ "RandomAccessIterator is multipass"); } +// Tests that the compiler generated move operators propagrate noexcept +// specifiers. +TEST(FlatTree, NoExcept) { + struct MoveThrows { + MoveThrows(MoveThrows&&) noexcept(false) {} + MoveThrows& operator=(MoveThrows&&) noexcept(false) { return *this; } + }; + + using MoveThrowsTree = flat_tree<MoveThrows, base::identity, std::less<>, + std::array<MoveThrows, 1>>; + + static_assert(std::is_nothrow_move_constructible<IntTree>::value, + "Error: IntTree is not nothrow move constructible"); + static_assert(std::is_nothrow_move_assignable<IntTree>::value, + "Error: IntTree is not nothrow move assignable"); + + static_assert(!std::is_nothrow_move_constructible<MoveThrowsTree>::value, + "Error: MoveThrowsTree is nothrow move constructible"); + static_assert(!std::is_nothrow_move_assignable<MoveThrowsTree>::value, + "Error: MoveThrowsTree is nothrow move assignable"); +} + // ---------------------------------------------------------------------------- // Class.
diff --git a/base/memory/weak_ptr_unittest.nc b/base/memory/weak_ptr_unittest.nc index b96b033..2c53f36 100644 --- a/base/memory/weak_ptr_unittest.nc +++ b/base/memory/weak_ptr_unittest.nc
@@ -132,7 +132,8 @@ WeakPtr<Unrelated> ptr = AsWeakPtr(&f); } -#elif defined(NCTEST_AMBIGUOUS_ANCESTORS) // [r"fatal error: use of undeclared identifier 'AsWeakPtrImpl'"] +#elif defined(NCTEST_AMBIGUOUS_ANCESTORS) // [r"fatal error: (use of undeclared identifier|no matching function for call to) 'AsWeakPtrImpl'"] +// TODO(crbug.com/1155145): Update expectation after rolling clang. void WontCompile() { MultiplyDerivedProducer f;
diff --git a/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java b/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java index 565ebe6..5180ff769 100644 --- a/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java +++ b/build/android/bytecode/java/org/chromium/bytecode/FragmentActivityReplacer.java
@@ -21,6 +21,7 @@ */ public class FragmentActivityReplacer extends ByteCodeRewriter { private static final String GET_ACTIVITY_METHOD_NAME = "getActivity"; + private static final String GET_LIFECYCLE_ACTIVITY_METHOD_NAME = "getLifecycleActivity"; private static final String NEW_METHOD_DESCRIPTOR = "()Landroid/app/Activity;"; private static final String OLD_METHOD_DESCRIPTOR = "()Landroidx/fragment/app/FragmentActivity;"; @@ -44,16 +45,23 @@ @Override protected ClassVisitor getClassVisitorForClass(String classPath, ClassVisitor delegate) { - ClassVisitor getActivityReplacer = new GetActivityReplacer(delegate); - if (classPath.equals("androidx/fragment/app/Fragment.class")) { - return new FragmentClassVisitor(getActivityReplacer); + ClassVisitor invocationVisitor = new InvocationReplacer(delegate); + switch (classPath) { + case "androidx/fragment/app/Fragment.class": + return new FragmentClassVisitor(invocationVisitor); + case "com/google/android/gms/common/api/internal/SupportLifecycleFragmentImpl.class": + return new SupportLifecycleFragmentImplClassVisitor(invocationVisitor); + default: + return invocationVisitor; } - return getActivityReplacer; } - /** Updates any Fragment.getActivity/requireActivity() calls to call the replaced method. */ - private static class GetActivityReplacer extends ClassVisitor { - private GetActivityReplacer(ClassVisitor baseVisitor) { + /** + * Updates any Fragment.getActivity/requireActivity() or getLifecycleActivity() calls to call + * the replaced method. + */ + private static class InvocationReplacer extends ClassVisitor { + private InvocationReplacer(ClassVisitor baseVisitor) { super(Opcodes.ASM7, baseVisitor); } @@ -68,7 +76,8 @@ if ((opcode == Opcodes.INVOKEVIRTUAL || opcode == Opcodes.INVOKESPECIAL) && descriptor.equals(OLD_METHOD_DESCRIPTOR) && (name.equals(GET_ACTIVITY_METHOD_NAME) - || name.equals(REQUIRE_ACTIVITY_METHOD_NAME))) { + || name.equals(REQUIRE_ACTIVITY_METHOD_NAME) + || name.equals(GET_LIFECYCLE_ACTIVITY_METHOD_NAME))) { super.visitMethodInsn( opcode, owner, name, NEW_METHOD_DESCRIPTOR, isInterface); } else { @@ -92,8 +101,17 @@ int access, String name, String descriptor, String signature, String[] exceptions) { // Update the descriptor of getActivity() and requireActivity(). MethodVisitor baseVisitor; - if (name.equals(GET_ACTIVITY_METHOD_NAME) - || name.equals(REQUIRE_ACTIVITY_METHOD_NAME)) { + if (descriptor.equals(OLD_METHOD_DESCRIPTOR) + && (name.equals(GET_ACTIVITY_METHOD_NAME) + || name.equals(REQUIRE_ACTIVITY_METHOD_NAME))) { + // Some Fragments in a Clank library implement an interface that defines an + // `Activity getActivity()` method. Fragment.getActivity() is considered its + // implementation from a typechecking perspective, but javac still generates a + // getActivity() method in these Fragments that call Fragment.getActivity(). This + // isn't an issue when the methods return different types, but after changing + // Fragment.getActivity() to return an Activity, this generated implementation is + // now overriding Fragment's, which it can't do because Fragment.getActivity() is + // final. We make it non-final here to avoid this issue. baseVisitor = super.visitMethod( access & ~Opcodes.ACC_FINAL, name, NEW_METHOD_DESCRIPTOR, null, exceptions); } else { @@ -101,7 +119,7 @@ } // Replace getActivity() with `return ContextUtils.activityFromContext(getContext());` - if (name.equals(GET_ACTIVITY_METHOD_NAME)) { + if (name.equals(GET_ACTIVITY_METHOD_NAME) && descriptor.equals(OLD_METHOD_DESCRIPTOR)) { baseVisitor.visitVarInsn(Opcodes.ALOAD, 0); baseVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "androidx/fragment/app/Fragment", "getContext", "()Landroid/content/Context;", false); @@ -123,4 +141,34 @@ }); } } + + /** + * Update SupportLifecycleFragmentImpl.getLifecycleActivity(). + */ + private static class SupportLifecycleFragmentImplClassVisitor extends ClassVisitor { + private SupportLifecycleFragmentImplClassVisitor(ClassVisitor baseVisitor) { + super(Opcodes.ASM7, baseVisitor); + } + + @Override + public MethodVisitor visitMethod( + int access, String name, String descriptor, String signature, String[] exceptions) { + // SupportLifecycleFragmentImpl has two getActivity methods: + // 1. public FragmentActivity getLifecycleActivity(): + // This is what you'll see in the source. This delegates to Fragment.getActivity(). + // 2. public Activity getLifecycleActivity(): + // This is generated because the class implements LifecycleFragment, which + // declares this method, and delegates to #1. + // + // Here we change the return type of #1 and delete #2. + if (name.equals(GET_LIFECYCLE_ACTIVITY_METHOD_NAME)) { + if (descriptor.equals(OLD_METHOD_DESCRIPTOR)) { + return super.visitMethod( + access, name, NEW_METHOD_DESCRIPTOR, signature, exceptions); + } + return null; + } + return super.visitMethod(access, name, descriptor, signature, exceptions); + } + } }
diff --git a/build/android/pylib/local/machine/local_machine_junit_test_run.py b/build/android/pylib/local/machine/local_machine_junit_test_run.py index 422ab8b..da5de702 100644 --- a/build/android/pylib/local/machine/local_machine_junit_test_run.py +++ b/build/android/pylib/local/machine/local_machine_junit_test_run.py
@@ -28,15 +28,10 @@ 'org/hamcrest', 'org/junit', 'org/mockito') # Suites we shouldn't shard, usually because they don't contain enough test -# cases. Some suites have poorly formed tests that rely on setup in other -# tests. +# cases. _EXCLUDED_SUITES = { - # Too small to shard test suites. 'password_check_junit_tests', 'touch_to_fill_junit_tests', - # Poorly formed test suites. - # TODO: (crbug.com/1147740) Remove component_junit_tests when it's fixed. - 'components_junit_tests' } # Running time for chrome_junit_tests locally:
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index cff072e..da00159 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni
@@ -77,8 +77,9 @@ "//android_webview/glue:glue", ] -# These identify all non-leaf targets that have .build_config files. -_java_target_patterns = _java_library_patterns + _java_resource_patterns +# These identify all non-leaf targets that have .build_config files. This is the +# set of patterns that other targets can use to filter out java targets. +java_target_patterns = _java_library_patterns + _java_resource_patterns _r8_path = "//third_party/r8/lib/r8.jar" _desugar_jdk_libs_json = "//third_party/r8/desugar_jdk_libs.json" @@ -168,7 +169,7 @@ assert(false, "Invalid java library target name: $_target_label") } } else if (_type == "group") { - if (filter_exclude([ _target_label ], _java_target_patterns) != []) { + if (filter_exclude([ _target_label ], java_target_patterns) != []) { assert(false, "Invalid java target name: $_target_label") } } else if (filter_exclude([ _type ], _java_leaf_types) != []) { @@ -204,7 +205,7 @@ if (defined(invoker.possible_config_deps)) { foreach(_possible_dep, invoker.possible_config_deps) { _dep_label = get_label_info(_possible_dep, "label_no_toolchain") - if (filter_exclude([ _dep_label ], _java_target_patterns) == []) { + if (filter_exclude([ _dep_label ], java_target_patterns) == []) { # Put the bug number in the target name so that false-positives # have a hint in the error message about non-existent dependencies. deps += [ "$_dep_label$build_config_target_suffix" ]
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 14ff094..973c0f93 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -4282,15 +4282,11 @@ [ "custom_package", "create_srcjar", - "deps", "resource_overlay", "testonly", "strip_drawables", ]) - if (!defined(deps)) { - deps = [] - } - deps += [ ":$_unpack_target_name" ] + deps = [ ":$_unpack_target_name" ] if (_should_process_manifest) { android_manifest_dep = ":$_unpack_target_name" android_manifest = "${_output_path}/AndroidManifest.xml"
diff --git a/build/config/fuchsia/sizes.gni b/build/config/fuchsia/sizes.gni new file mode 100644 index 0000000..5725019 --- /dev/null +++ b/build/config/fuchsia/sizes.gni
@@ -0,0 +1,47 @@ +# 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("//build/util/generate_wrapper.gni") + +template("compute_fuchsia_package_sizes") { + generate_wrapper(target_name) { + forward_variables_from(invoker, + [ + "data", + "data_deps", + ]) + testonly = true + executable = "//build/fuchsia/binary_sizes.py" + wrapper_script = "$root_out_dir/bin/run_${target_name}" + + assert( + target_cpu == "arm64" || target_cpu == "x64", + "target_cpu must be arm64 or x64 in fuchsia_sizes_test($target_name)") + + if (!defined(data)) { + data = [] + } + + if (!defined(data_deps)) { + data_deps = [] + } + + # Declares the files that are needed for test execution on the + # swarming test client. + data += [ + "//build/fuchsia/", + "//third_party/fuchsia-sdk/sdk/tools/${target_cpu}/", + "//third_party/zstd-linux-${target_cpu}/", + "//tools/binary_size/", + ] + + executable_args = [ + "--output-directory", + "@WrappedPath(.)", + ] + if (defined(invoker.executable_args)) { + executable_args += invoker.executable_args + } + } +}
diff --git a/build/config/fuchsia/tests-with-exec.cmx b/build/config/fuchsia/tests-with-exec.cmx index 7e6b3d20..8cd8b75f 100644 --- a/build/config/fuchsia/tests-with-exec.cmx +++ b/build/config/fuchsia/tests-with-exec.cmx
@@ -1,5 +1,9 @@ { "sandbox": { + "dev": [ + "null", + "zero" + ], "features": [ "deprecated-ambient-replace-as-executable", "isolated-cache-storage", @@ -8,10 +12,6 @@ "root-ssl-certificates", "vulkan" ], - "dev": [ - "null", - "zero" - ], "services": [ "fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.camera3.DeviceWatcher", @@ -26,7 +26,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Environment",
diff --git a/build/config/fuchsia/tests.cmx b/build/config/fuchsia/tests.cmx index 57d07851..e263b0e 100644 --- a/build/config/fuchsia/tests.cmx +++ b/build/config/fuchsia/tests.cmx
@@ -1,5 +1,9 @@ { "sandbox": { + "dev": [ + "null", + "zero" + ], "features": [ "config-data", "isolated-cache-storage", @@ -8,10 +12,6 @@ "root-ssl-certificates", "vulkan" ], - "dev": [ - "null", - "zero" - ], "services": [ "fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.camera3.DeviceWatcher", @@ -26,7 +26,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Environment",
diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni index 05625a58..6a8cd8d 100644 --- a/build/config/mac/mac_sdk.gni +++ b/build/config/mac/mac_sdk.gni
@@ -16,7 +16,7 @@ # additional code changes are required to be compliant with the availability # rules. # Must be of the form x.x.x for Info.plist files. - mac_deployment_target = "10.10.0" + mac_deployment_target = "10.11.0" # The value of the LSMinimmumSystemVersion in Info.plist files. This partially # controls the minimum supported version of macOS for Chromium by
diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py index ef2ea9e..f2403445 100755 --- a/build/fuchsia/binary_sizes.py +++ b/build/fuchsia/binary_sizes.py
@@ -11,6 +11,7 @@ import collections import copy import json +import logging import math import os import re @@ -18,17 +19,11 @@ import subprocess import sys import tempfile +import traceback +import uuid -from common import GetHostToolPathFromPlatform, SDK_ROOT, DIR_SOURCE_ROOT - -# Import SendResults() from the results_dashboard.py in tools/perf/core instead -# of the deprecated one in the chrome infra build recipes folder on the recipes -# module path. -sys.path.insert(0, os.path.join(DIR_SOURCE_ROOT, 'tools', 'perf')) -sys.path.insert(0, os.path.join(DIR_SOURCE_ROOT, 'tools', 'perf', 'core')) -from results_dashboard import SendResults -sys.path.pop(0) -sys.path.pop(0) +from common import GetHostToolPathFromPlatform, GetHostArchFromPlatform +from common import SDK_ROOT, DIR_SOURCE_ROOT # Structure representing the compressed and uncompressed sizes for a Fuchsia # package. @@ -36,36 +31,32 @@ ['compressed', 'uncompressed']) -def CreateBinarySizeHistogram(name, commit_position, size): +def CreateSizesExternalDiagnostic(sizes_guid): + """Creates a histogram external sizes diagnostic.""" + + benchmark_diagnostic = { + 'type': 'GenericSet', + 'guid': str(sizes_guid), + 'values': ['sizes'], + } + + return benchmark_diagnostic + + +def CreateSizesHistogramItem(name, size, sizes_guid): """Create a performance dashboard histogram from the histogram template and binary size data.""" # Chromium performance dashboard histogram containing binary size data. histogram = { 'name': name, - 'sampleValues': [size], - 'maxNumSampleValues': 1, - 'running': [1, size, math.log(size), size, size, size, 0], 'unit': 'sizeInBytes_smallerIsBetter', - 'description': 'chrome-fuchsia package binary sizes', 'diagnostics': { - 'chromiumCommitPositions': { - 'type': 'GenericSet', - 'values': [commit_position], - }, - 'bots': { - 'type': 'GenericSet', - 'values': ['fuchsia-fyi-arm64-size'] - }, - 'benchmarks': { - 'type': 'GenericSet', - 'values': ['sizes'] - }, - 'masters': { - 'type': 'GenericSet', - 'values': ['ChromiumLinux'] - }, + 'benchmarks': str(sizes_guid), }, + 'sampleValues': [size], + 'running': [1, size, math.log(size), size, size, size, 0], + 'description': 'chrome-fuchsia package binary sizes', 'summaryOptions': { 'avg': True, 'count': False, @@ -79,15 +70,42 @@ return histogram +def CreateSizesHistogram(package_sizes): + """Create a performance dashboard histogram from binary size data.""" + + sizes_guid = uuid.uuid1() + histogram = [CreateSizesExternalDiagnostic(sizes_guid)] + for name, size in package_sizes.items(): + histogram.append( + CreateSizesHistogramItem('%s_%s' % (name, 'compressed'), + size.compressed, sizes_guid)) + histogram.append( + CreateSizesHistogramItem('%s_%s' % (name, 'uncompressed'), + size.uncompressed, sizes_guid)) + return histogram + + +def GetZstdPathFromPlatform(): + """Returns path to zstd compression utility based on the current platform.""" + + arch = GetHostArchFromPlatform() + if arch == 'arm64': + zstd_arch_dir = 'zstd-linux-arm64' + elif arch == 'x64': + zstd_arch_dir = 'zstd-linux-x64' + else: + raise Exception('zstd path unknown for architecture "%s"' % arch) + + return os.path.join(DIR_SOURCE_ROOT, 'third_party', zstd_arch_dir, 'bin', + 'zstd') + + def CompressedSize(file_path, compression_args): """Calculates size file after zstd compression. Uses non-chunked compression (Fuchsia uses chunked compression which is not available in the zstd command line tool). The compression level can be set using compression_args.""" - # Path to zstd compression utility. - zstd_path = os.path.join(DIR_SOURCE_ROOT, 'third_party', 'zstd', 'bin', - 'zstd') - + zstd_path = GetZstdPathFromPlatform() devnull = open(os.devnull) proc = subprocess.Popen([zstd_path, '-f', file_path, '-c'] + compression_args, stdout=open(os.devnull, 'w'), @@ -111,6 +129,14 @@ """Extracts contents of a Fuchsia archive file to the specified directory.""" far_tool = GetHostToolPathFromPlatform('far') + + if not os.path.isfile(far_tool): + raise Exception('Could not find FAR host tool "%s".' % far_tool) + if not os.path.isfile(file_path): + raise Exception('Could not find FAR file "%s".' % file_path) + if os.path.isdir(extract_dir): + raise Exception('Could not find extraction directory "%s".' % extract_dir) + subprocess.check_call([ far_tool, 'extract', '--archive=%s' % file_path, @@ -132,20 +158,6 @@ return blob_name_hashes -def CommitPositionFromGitShow(): - """Returns the chromium commit position for the current workspace.""" - - # Match a commit position from a "git show" string like - # " Cr-Commit-Position: refs/heads/master@{#819438}" - git_commit_position_re = r'^\s*Cr-Commit-Position:.*@\{#(?P<position>\d+)\}' - - show_output = subprocess.check_output(['git', 'show', 'origin/master']) - match = re.search(git_commit_position_re, show_output, re.MULTILINE) - if match: - return int(match.group('position')) - raise RuntimeError('could not get chromium commit position from git show') - - def CommitPositionFromBuildProperty(value): """Extracts the chromium commit position from a builders got_revision_cp property.""" @@ -268,8 +280,11 @@ return package_sizes -def GetBinarySizeHistogramsData(args): - """Get binary size histogram data for packages specified in args.""" +def GetBinarySizes(args): + """Get binary size data for packages specified in args. + + If "total_size_name" is set, then computes a synthetic package size which is + the aggregated sizes across all blobs.""" # Calculate compressed and uncompressed package sizes. sdk_libs = GetSDKLibs() @@ -286,34 +301,19 @@ uncompressed = sum([a.uncompressed for a in package_sizes.values()]) package_sizes[args.total_size_name] = PackageSizes(compressed, uncompressed) - # Determine chromium commit position from builder property or workspace. - if args.test_revision_cp: - commit_position = CommitPositionFromBuildProperty(args.test_revision_cp) - else: - commit_position = CommitPositionFromGitShow() - - print('Chromium commit position: %d' % commit_position) for name, size in package_sizes.items(): print('%s: compressed %d, uncompressed %d' % (name, size.compressed, size.uncompressed)) - # Generate chromium performance dashboard histogram data for each binary size. - histograms_data = [] - for name, size in package_sizes.items(): - histograms_data.append( - CreateBinarySizeHistogram('%s_%s' % (name, 'compressed'), - commit_position, size.compressed)) - histograms_data.append( - CreateBinarySizeHistogram('%s_%s' % (name, 'uncompressed'), - commit_position, size.uncompressed)) - - return histograms_data + return package_sizes def main(): parser = argparse.ArgumentParser() parser.add_argument( '--build-out-dir', + '--output-directory', + type=os.path.realpath, required=True, help='Location of the build artifacts.', ) @@ -331,12 +331,10 @@ required=True, action='append', help='Name of Fuchsia package FAR file (may be used more than once.)') - parser.add_argument('--histogram-path', - help='Optional output file for histogram data') parser.add_argument( - '--server-url', - help='Write data to performance dashboard server URL instead of to a file' - ) + '--isolated-script-test-output', + type=os.path.realpath, + help='File to which simplified JSON results will be written.') parser.add_argument( '--output-dir', help='Optional directory for histogram output file. This argument is ' @@ -354,6 +352,10 @@ '-v', action='store_true', help='Enable verbose output') + # Accepted to conform to the isolated script interface, but ignored. + parser.add_argument('--isolated-script-test-filter', help=argparse.SUPPRESS) + parser.add_argument('--isolated-script-test-perf-output', + help=argparse.SUPPRESS) args = parser.parse_args() # Optionally prefix the output_dir to the histogram_path. @@ -388,24 +390,42 @@ if not os.path.isfile(far_abs_path): raise Exception('Could not find FAR file "%s".' % far_abs_path) - histograms_data = GetBinarySizeHistogramsData(args) + isolated_script_output = { + 'valid': False, + 'failures': [], + 'version': 'simplified' + } + test_name = 'sizes' - if args.server_url: - # Send histograms to the performance dashboard. - for data in histograms_data: - SendResults([data], - 'chrome_fuchsia_package_size', - args.server_url, - send_as_histograms=True) + results_directory = None + if args.isolated_script_test_output: + results_directory = os.path.join( + os.path.dirname(args.isolated_script_test_output), test_name) + if not os.path.exists(results_directory): + os.makedirs(results_directory) - if args.histogram_path: - # Save histogram data to a file. - histogram_dir = os.path.dirname(os.path.abspath(args.histogram_path)) - if not os.path.isdir(histogram_dir): - raise Exception('Could not find histogram file output directory "%s".' % - histogram_dir) - json_out = open(args.histogram_path, 'w') - json.dump(histograms_data, json_out) + try: + package_sizes = GetBinarySizes(args) + sizes_histogram = CreateSizesHistogram(package_sizes) + isolated_script_output = { + 'valid': True, + 'failures': [], + 'version': 'simplified', + } + except: + _, value, trace = sys.exc_info() + traceback.print_tb(trace) + print(str(value)) + return 1 + finally: + if results_directory: + results_path = os.path.join(results_directory, 'test_results.json') + with open(results_path, 'w') as output_file: + json.dump(isolated_script_output, output_file) + + histogram_path = os.path.join(results_directory, 'perf_results.json') + with open(histogram_path, 'w') as f: + json.dump(sizes_histogram, f) return 0
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 1be904ca..b6ea818 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20201203.0.1 +0.20201203.2.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 1be904ca..b6ea818 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20201203.0.1 +0.20201203.2.1
diff --git a/build/write_buildflag_header.py b/build/write_buildflag_header.py index d46cfc8..47b9a03 100755 --- a/build/write_buildflag_header.py +++ b/build/write_buildflag_header.py
@@ -91,5 +91,13 @@ output_file.write('\n#endif // %s\n' % options.header_guard) +if os.name == 'nt': + major, minor, build, platform, service_pack = sys.getwindowsversion() + # Windows 10 will be 6.2 on Python 2 and 10.0 on Python 3. This check + # handles both. + if major < 6 or (major == 6 and minor < 2): + raise Exception( + 'Unsupported OS. Building Chromium requires Windows 10. %s detected.' % + str(sys.getwindowsversion())) options = GetOptions() WriteHeader(options)
diff --git a/chrome/VERSION b/chrome/VERSION index 05b421f..ed83715 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=89 MINOR=0 -BUILD=4344 +BUILD=4345 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 3a04eee0..96ca160 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -303,6 +303,7 @@ "//chrome/browser/browser_controls/android:java", "//chrome/browser/consent_auditor/android:java", "//chrome/browser/contextmenu:java", + "//chrome/browser/continuous_search:java", "//chrome/browser/device:java", "//chrome/browser/download/android:factory_java", "//chrome/browser/download/android:java", @@ -1036,6 +1037,7 @@ "//chrome/browser/banners/android:java", "//chrome/browser/browser_controls/android:java", "//chrome/browser/contextmenu:java", + "//chrome/browser/continuous_search:javatests", "//chrome/browser/device:java", "//chrome/browser/download/android:java", "//chrome/browser/download/internal/android:javatests", @@ -1253,6 +1255,7 @@ srcjar_deps = [ "//chrome/browser:tos_dialog_behavior_generated_enum" ] data = [ + "//chrome/browser/continuous_search/testdata/", "//chrome/test/data/android/", "//chrome/test/data/autofill/", "//chrome/test/data/background_sync/", @@ -1420,10 +1423,6 @@ data = [ "//chrome/android/shared_preference_files/test/", - "//components/test/data/js_dialogs/render_tests/", - "//components/test/data/permission_dialogs/render_tests/", - "//components/test/data/vr_browser_ui/render_tests/", - "//components/test/data/vr_browser_video/render_tests/", "//third_party/gvr-android-sdk/test-apks/", ] }
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index 255438fd..f8072ae 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -406,43 +406,6 @@ template("monochrome_public_common_apk_or_module_tmpl") { _is_bundle_module = defined(invoker.target_type) && invoker.target_type == "android_app_bundle_module" - _enable_chrome_module = - _is_bundle_module && invoker.is_base_module && enable_chrome_module - - # If the chrome module is enabled, collect shared libraries from all other - # DFMs and add them as loadable modules to the base module. - if (_enable_chrome_module) { - _module_descs = [] - if (defined(invoker.module_descs)) { - _module_descs = invoker.module_descs - } - _chrome_module_shared_lib_deps = [] - _chrome_module_loadable_modules = [] - _arch = "" - _toolchain = "" - if (android_64bit_target_cpu) { - if (invoker.is_64_bit_browser) { - _arch = "_64" - } else { - _toolchain = "($android_secondary_abi_toolchain)" - } - } - _base_target_name = "libmonochrome${_arch}" - foreach(_module_desc, _module_descs) { - if (defined(_module_desc.native_deps) && _module_desc.native_deps != []) { - _lib_target = "//chrome/android:${_base_target_name}_${_module_desc.name}${_toolchain}" - _chrome_module_shared_lib_deps += [ _lib_target ] - - # In component builds, native libraries from DFMs are not in partitions, - # so include them as normal shared libraries instead of loadable - # modules. - if (!is_component_build) { - _lib_out_dir = get_label_info(_lib_target, "root_out_dir") - _chrome_module_loadable_modules += [ "${_lib_out_dir}/${_base_target_name}_${_module_desc.name}_partition.so" ] - } - } - } - } chrome_public_common_apk_or_module_tmpl(target_name) { _overrides = { @@ -532,11 +495,15 @@ deps += [ ":${target_name}__all_dfm_resources" ] } - # Add all loadable modules and shared libraries from DFMs. + _enable_chrome_module = + _is_bundle_module && invoker.is_base_module && enable_chrome_module if (_enable_chrome_module) { - # The arcore manifest needs to be merged into the base module because the Play - # Store verifies the com.google.ar.core.min_apk_version meta-data tag is in - # the base manifest. + # TODO(crbug.com/1150459): Remove this once internal repo is updated. + not_needed(invoker, [ "module_descs" ]) + + # The arcore manifest needs to be merged into the base module because + # the Play Store verifies the com.google.ar.core.min_apk_version + # meta-data tag is in the base manifest. if (enable_arcore) { deps += [ "//third_party/arcore-android-sdk-client:com_google_ar_core_java", @@ -548,38 +515,6 @@ } else { deps += [ "//chrome/android:base_module_java" ] } - if (is_component_build) { - if (android_64bit_target_cpu && !invoker.is_64_bit_browser) { - secondary_abi_shared_libraries += _chrome_module_shared_lib_deps - } else { - shared_libraries += _chrome_module_shared_lib_deps - } - } else { - deps += _chrome_module_shared_lib_deps - } - _loadable_modules_32_bit = [] - _loadable_modules_64_bit = [] - foreach(_module_desc, _module_descs) { - if (defined(_module_desc.loadable_modules_32_bit)) { - _loadable_modules_32_bit += _module_desc.loadable_modules_32_bit - } - if (defined(_module_desc.loadable_modules_64_bit)) { - _loadable_modules_64_bit += _module_desc.loadable_modules_64_bit - } - } - - if (android_64bit_target_cpu) { - if (invoker.is_64_bit_browser) { - loadable_modules += - _loadable_modules_64_bit + _chrome_module_loadable_modules - } else { - secondary_abi_loadable_modules += - _loadable_modules_32_bit + _chrome_module_loadable_modules - } - } else { - loadable_modules += - _loadable_modules_32_bit + _chrome_module_loadable_modules - } } if (is_monochrome) {
diff --git a/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected index f54180a..28ace4d 100644 --- a/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected +++ b/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected
@@ -3,10 +3,6 @@ apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libcrashpad_handler_trampoline.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libmonochrome.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_cablev2_authenticator_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_stack_unwinder_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_test_dummy_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_vr_partition.so, compress=False, alignment=4096 apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4 apk_path=assets/icudtl.dat, compress=False, alignment=4 apk_path=assets/locales/af.pak, compress=False, alignment=4
diff --git a/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected index a771646..e9c8441 100644 --- a/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected +++ b/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected
@@ -1,9 +1,5 @@ apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libchromium_android_linker.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_cablev2_authenticator_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_stack_unwinder_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_test_dummy_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_vr_partition.so, compress=False, alignment=4096 apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4 apk_path=assets/locales/af.pak, compress=False, alignment=4 apk_path=assets/locales/am.pak, compress=False, alignment=4
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsViewBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsViewBinder.java index 203f494f..a0a98a2 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsViewBinder.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsViewBinder.java
@@ -209,9 +209,9 @@ details.getHighlightLine2(), R.style.TextAppearance_TextMedium_Secondary); // TODO(crbug.com/1118226): Update the styles that use *_Disabled with UX guidance. setTextStyle(viewHolder.mDescriptionLine3View, details.getUserApprovalRequired(), - details.getHighlightLine3(), R.style.TextAppearance_TextSmall_Disabled); + details.getHighlightLine3(), R.style.TextAppearance_TextSmall_Secondary); setTextStyle(viewHolder.mPriceAttributionView, details.getUserApprovalRequired(), - details.getHighlightLine3(), R.style.TextAppearance_TextSmall_Disabled); + details.getHighlightLine3(), R.style.TextAppearance_TextSmall_Secondary); setTextStyle(viewHolder.mTotalPriceLabelView, details.getUserApprovalRequired(), /* highlight= */ false, R.style.TextAppearance_TextMedium_Secondary); setTextStyle(viewHolder.mTotalPriceView, details.getUserApprovalRequired(),
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java index b86af312..b7fa427 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java
@@ -310,9 +310,7 @@ } public void initWithNative() { - // TODO (https://crbug.com/1048632): Use the current profile (i.e., regular profile or - // incognito profile) instead of always using regular profile. It works correctly now, but - // it is not safe. + Profile profile = mTabModelSelector.getCurrentModel().getProfile(); mTabListFaviconProvider.initWithNative(Profile.getLastUsedRegularProfile()); }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java index 457644b..50c91bf 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
@@ -77,6 +77,7 @@ private final Context mContext; private final TabListModel mModel; private final @UiType int mItemType; + private final TabModelSelector mTabModelSelector; private boolean mIsInitialized; private ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener; @@ -116,6 +117,7 @@ mContext = context; mModel = new TabListModel(); mAdapter = new SimpleRecyclerViewAdapter(mModel); + mTabModelSelector = tabModelSelector; RecyclerView.RecyclerListener recyclerListener = null; if (mMode == TabListMode.GRID || mMode == TabListMode.CAROUSEL) { mAdapter.registerType(UiType.SELECTABLE, parent -> { @@ -231,9 +233,6 @@ mRecyclerView.setHasFixedSize(true); if (recyclerListener != null) mRecyclerView.setRecyclerListener(recyclerListener); - // TODO (https://crbug.com/1048632): Use the current profile (i.e., regular profile or - // incognito profile) instead of always using regular profile. It works correctly now, but - // it is not safe. TabListFaviconProvider tabListFaviconProvider = new TabListFaviconProvider(mContext, mMode == TabListMode.STRIP); @@ -292,7 +291,7 @@ mIsInitialized = true; - Profile profile = Profile.getLastUsedRegularProfile(); + Profile profile = mTabModelSelector.getCurrentModel().getProfile(); mMediator.initWithNative(profile); if (dynamicResourceLoader != null) { mRecyclerView.createDynamicView(dynamicResourceLoader);
diff --git a/chrome/android/features/vr/BUILD.gn b/chrome/android/features/vr/BUILD.gn index 6adc045..2702e04 100644 --- a/chrome/android/features/vr/BUILD.gn +++ b/chrome/android/features/vr/BUILD.gn
@@ -118,4 +118,5 @@ "java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java", "java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java", ] + split_name = "vr" }
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java index b28adb8..e3a902c9 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegate.java
@@ -160,13 +160,13 @@ } } - /* package */ void setSystemUiVisibilityForVr(Activity activity) { + public void setSystemUiVisibilityForVr(Activity activity) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); int flags = activity.getWindow().getDecorView().getSystemUiVisibility(); activity.getWindow().getDecorView().setSystemUiVisibility(flags | VR_SYSTEM_UI_FLAGS); } - /* package */ void addBlackOverlayViewForActivity(ChromeActivity activity) { + public void addBlackOverlayViewForActivity(ChromeActivity activity) { View overlay = activity.getWindow().findViewById(R.id.vr_overlay_view); if (overlay != null) return; FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( @@ -178,7 +178,7 @@ decor.addView(v, params); } - /* package */ void removeBlackOverlayView(Activity activity, boolean animate) { + public void removeBlackOverlayView(Activity activity, boolean animate) { View overlay = activity.getWindow().findViewById(R.id.vr_overlay_view); if (overlay == null) return; FrameLayout decor = (FrameLayout) activity.getWindow().getDecorView(); @@ -207,7 +207,7 @@ } } - /* package */ boolean activitySupportsVrBrowsing(Activity activity) { + public boolean activitySupportsVrBrowsing(Activity activity) { if (activity instanceof ChromeTabbedActivity) return true; return false; }
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateProvider.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateProvider.java index 99c4acd..cd6efc1 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateProvider.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateProvider.java
@@ -8,7 +8,7 @@ /** Provides delegate interfaces that can be used to call into VR. */ @ModuleInterface(module = "vr", impl = "org.chromium.chrome.browser.vr.VrDelegateProviderImpl") -/* package */ interface VrDelegateProvider { +public interface VrDelegateProvider { VrDelegate getDelegate(); VrIntentDelegate getIntentDelegate(); }
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java index 01409dd..7070932 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java
@@ -103,7 +103,7 @@ // TODO(crbug.com/870055): JNI should be registered in the shared VR library's JNI_OnLoad // function. Do this once we have a shared VR library. - /* package */ static void registerJni() { + public static void registerJni() { VrModuleProviderJni.get().registerJni(); }
diff --git a/chrome/android/features/vr/vr_module.gni b/chrome/android/features/vr/vr_module.gni index 9aa2d838..8c03722c 100644 --- a/chrome/android/features/vr/vr_module.gni +++ b/chrome/android/features/vr/vr_module.gni
@@ -18,8 +18,5 @@ # by native library load). Therefore disable auto-load on Module.getImpl(); # the VR DFM manages its own loading on start-up and on install. load_native_on_get_impl = false - - # TODO(crbug.com/1145287): Need to support @CalledByNative in isolated splits - # before this can be enabled. - # uses_split = "chrome" + uses_split = "chrome" }
diff --git a/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml b/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml index 4eafd91f..8ca2608 100644 --- a/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml +++ b/chrome/android/java/res/layout/account_picker_bottom_sheet_header.xml
@@ -15,6 +15,7 @@ app:srcCompat="@drawable/chrome_sync_logo" /> <TextView + android:id="@+id/account_picker_header_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"
diff --git a/chrome/android/java/res/layout/account_picker_state_auth_error.xml b/chrome/android/java/res/layout/account_picker_state_auth_error.xml index 87770e3..189b1c2 100644 --- a/chrome/android/java/res/layout/account_picker_state_auth_error.xml +++ b/chrome/android/java/res/layout/account_picker_state_auth_error.xml
@@ -18,6 +18,7 @@ app:srcCompat="@drawable/ic_warning_red_24dp" /> <TextView + android:id="@+id/account_picker_auth_error_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"
diff --git a/chrome/android/java/res/layout/account_picker_state_general_error.xml b/chrome/android/java/res/layout/account_picker_state_general_error.xml index 1ca831c..05d05ac 100644 --- a/chrome/android/java/res/layout/account_picker_state_general_error.xml +++ b/chrome/android/java/res/layout/account_picker_state_general_error.xml
@@ -18,6 +18,7 @@ app:srcCompat="@drawable/ic_warning_red_24dp" /> <TextView + android:id="@+id/account_picker_general_error_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"
diff --git a/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml b/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml index c4aebc38..a9f9193 100644 --- a/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml +++ b/chrome/android/java/res/layout/account_picker_state_signin_in_progress.xml
@@ -18,6 +18,7 @@ app:srcCompat="@drawable/chrome_sync_logo" /> <TextView + android:id="@+id/account_picker_signin_in_progress_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java index 3815cc1..f600054 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -1377,10 +1377,7 @@ VrModuleProvider.maybeInit(); VrModuleProvider.getDelegate().onNativeLibraryAvailable(); - ArDelegate arDelegate = ArDelegateProvider.getDelegate(); - if (arDelegate != null) { - arDelegate.init(); - } + if (getSavedInstanceState() == null && getIntent() != null) { VrModuleProvider.getDelegate().onNewIntentWithNative(this, getIntent()); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java index 8c59cd5..18a23ef 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
@@ -28,8 +28,7 @@ import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.SigninManager; import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; -import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.AccountsChangeObserver; @@ -44,8 +43,9 @@ * Class that manages all the logic and UI behind the signin promo header in the bookmark * content UI. The header is shown only on certain situations, (e.g., not signed in). */ -class BookmarkPromoHeader implements AndroidSyncSettingsObserver, SignInStateObserver, - ProfileDataCache.Observer, AccountsChangeObserver { +class BookmarkPromoHeader implements ProfileSyncService.SyncStateChangedListener, + SignInStateObserver, ProfileDataCache.Observer, + AccountsChangeObserver { /** * Specifies the various states in which the Bookmarks promo can be. */ @@ -72,6 +72,7 @@ private @Nullable ProfileDataCache mProfileDataCache; private final @Nullable SigninPromoController mSigninPromoController; private @PromoState int mPromoState; + private final @Nullable ProfileSyncService mProfileSyncService; /** * Initializes the class. Note that this will start listening to signin related events and @@ -81,7 +82,8 @@ mContext = context; mPromoHeaderChangeAction = promoHeaderChangeAction; - AndroidSyncSettings.get().registerObserver(this); + mProfileSyncService = ProfileSyncService.get(); + if (mProfileSyncService != null) mProfileSyncService.addSyncStateChangedListener(this); mSignInManager = IdentityServicesProvider.get().getSigninManager( Profile.getLastUsedRegularProfile()); @@ -111,7 +113,7 @@ * Clean ups the class. Must be called once done using this class. */ void destroy() { - AndroidSyncSettings.get().unregisterObserver(this); + if (mProfileSyncService != null) mProfileSyncService.removeSyncStateChangedListener(this); if (mSigninPromoController != null) { mAccountManagerFacade.removeObserver(this); @@ -208,7 +210,13 @@ return sPromoStateForTests; } - if (!AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync()) { + if (mProfileSyncService == null) { + // |mProfileSyncService| will remain null until the next browser startup, so no sense in + // offering any promo. + return PromoState.PROMO_NONE; + } + + if (!mProfileSyncService.isSyncAllowedByPlatform()) { return PromoState.PROMO_NONE; } @@ -229,15 +237,15 @@ SharedPreferencesManager.getInstance().readInt( ChromePreferenceKeys.SIGNIN_AND_SYNC_PROMO_SHOW_COUNT) < MAX_SIGNIN_AND_SYNC_PROMO_SHOW_COUNT; - if (!AndroidSyncSettings.get().isChromeSyncEnabled() && impressionLimitNotReached) { + if (!mProfileSyncService.isSyncRequested() && impressionLimitNotReached) { return PromoState.PROMO_SYNC; } return PromoState.PROMO_NONE; } - // AndroidSyncSettingsObserver implementation. + // ProfileSyncService.SyncStateChangedListener implementation. @Override - public void androidSyncSettingsChanged() { + public void syncStateChanged() { mPromoState = calculatePromoState(); triggerPromoUpdate(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java index 4d6e385..0211c17 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java
@@ -526,4 +526,18 @@ public boolean shouldBlockNewNotificationRequests() { return false; } + + /** + * Returns true if 'open in chrome' should be shown in the tab context menu. + */ + public boolean shouldShowOpenInChromeMenuItemInContextMenu() { + return true; + } + + /** + * Returns true if 'open in chrome' should be shown in the app menu. + */ + public boolean shouldShowOpenInChromeMenuItem() { + return true; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java index 0caf04b6..33866c98 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java
@@ -11,7 +11,6 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tabmodel.document.TabDelegate; @@ -55,9 +54,8 @@ } private boolean isHistorySyncEnabled() { - boolean syncEnabled = AndroidSyncSettings.get().isSyncEnabled(); ProfileSyncService syncService = ProfileSyncService.get(); - return syncEnabled && syncService != null + return syncService != null && syncService.isSyncRequested() && syncService.getActiveDataTypes().contains(ModelType.HISTORY_DELETE_DIRECTIVES); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java index b1351ff..fb1caf7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -540,7 +540,8 @@ .second; if (mMode == ContextMenuMode.WEB_APP) { items.add(createListItem(Item.OPEN_IN_CHROME)); - } else if (mMode == ContextMenuMode.CUSTOM_TAB) { + } else if (mMode == ContextMenuMode.CUSTOM_TAB + && mItemDelegate.supportsOpenInChromeFromCct()) { boolean addNewEntries = false; try { URI uri = new URI(mParams.getUrl());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java index 053b5a9..ec0be07 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
@@ -16,7 +16,7 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason; import org.chromium.chrome.browser.contextualsearch.ResolvedSearchTerm.CardTag; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; +import org.chromium.chrome.browser.sync.ProfileSyncService; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -866,7 +866,7 @@ public static void logTapResultsSeen(boolean wasPanelSeen) { RecordHistogram.recordBooleanHistogram( "Search.ContextualSearch.Tap.ResultsSeen", wasPanelSeen); - if (AndroidSyncSettings.get().isSyncEnabled()) { + if (ProfileSyncService.get() != null && ProfileSyncService.get().isSyncRequested()) { RecordHistogram.recordBooleanHistogram( "Search.ContextualSearch.Tap.SyncEnabled.ResultsSeen", wasPanelSeen); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java index 88bf834..f1be1d85 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
@@ -327,7 +327,7 @@ mIntentDataProvider.shouldShowShareMenuItem(), mIntentDataProvider.shouldShowStarButton(), mIntentDataProvider.shouldShowDownloadButton(), mIntentDataProvider.isIncognito(), - getModalDialogManager()); + getModalDialogManager(), mIntentDataProvider.shouldShowOpenInChromeMenuItem()); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java index 50f9e89..68e855f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java
@@ -55,6 +55,7 @@ private final boolean mShowDownload; private final boolean mIsOpenedByChrome; private final boolean mIsIncognito; + private final boolean mShowOpenInChrome; private final List<String> mMenuEntries; private final Map<MenuItem, Integer> mItemToIndexMap = new HashMap<MenuItem, Integer>(); @@ -63,6 +64,8 @@ /** * Creates an {@link CustomTabAppMenuPropertiesDelegate} instance. + * + * @param showOpenInChrome Whether 'open in chrome' is shown, depending upon other state. */ public CustomTabAppMenuPropertiesDelegate(Context context, ActivityTabProvider activityTabProvider, @@ -71,7 +74,7 @@ ObservableSupplier<BookmarkBridge> bookmarkBridgeSupplier, Verifier verifier, @CustomTabsUiType final int uiType, List<String> menuEntries, boolean isOpenedByChrome, boolean showShare, boolean showStar, boolean showDownload, boolean isIncognito, - ModalDialogManager modalDialogManager) { + ModalDialogManager modalDialogManager, boolean showOpenInChrome) { super(context, activityTabProvider, multiWindowModeStateDispatcher, tabModelSelector, toolbarManager, decorView, null, bookmarkBridgeSupplier, modalDialogManager); mVerifier = verifier; @@ -82,6 +85,7 @@ mShowStar = showStar; mShowDownload = showDownload; mIsIncognito = isIncognito; + mShowOpenInChrome = showOpenInChrome; } @Override @@ -202,6 +206,9 @@ prepareTranslateMenuItem(menu, currentTab); + if (!mShowOpenInChrome) { + openInChromeItemVisible = false; + } MenuItem openInChromeItem = menu.findItem(R.id.open_in_browser_id); if (openInChromeItemVisible) { String title = mIsIncognito ?
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java index 369aa529..4ba04d2b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
@@ -356,6 +356,7 @@ private final MultiWindowUtils mMultiWindowUtils; private final PendingIntent mFocusIntent; private final Verifier mVerifier; + private final boolean mShouldShowOpenInChromeMenuItemInContextMenu; private TabWebContentsDelegateAndroid mWebContentsDelegateAndroid; private ExternalNavigationDelegateImpl mNavigationDelegate; @@ -377,13 +378,15 @@ * @param verifier Decides how to handle navigation to a new URL. * @param ephemeralTabCoordinatorSupplier A provider of {@link EphemeralTabCoordinator} that * shows preview tab. + * @param shouldShowOpenInChromeMenuItemInContextMenu Whether 'open in chrome' is shown. */ private CustomTabDelegateFactory(ChromeActivity<?> activity, boolean shouldHideBrowserControls, boolean isOpenedByChrome, @Nullable String webApkScopeUrl, @WebDisplayMode int displayMode, boolean shouldEnableEmbeddedMediaExperience, BrowserControlsVisibilityDelegate visibilityDelegate, ExternalAuthUtils authUtils, MultiWindowUtils multiWindowUtils, @Nullable PendingIntent focusIntent, - Verifier verifier, Lazy<EphemeralTabCoordinator> ephemeralTabCoordinator) { + Verifier verifier, Lazy<EphemeralTabCoordinator> ephemeralTabCoordinator, + boolean shouldShowOpenInChromeMenuItemInContextMenu) { mActivity = activity; mShouldHideBrowserControls = shouldHideBrowserControls; mIsOpenedByChrome = isOpenedByChrome; @@ -397,6 +400,7 @@ mFocusIntent = focusIntent; mVerifier = verifier; mEphemeralTabCoordinator = ephemeralTabCoordinator; + mShouldShowOpenInChromeMenuItemInContextMenu = shouldShowOpenInChromeMenuItemInContextMenu; } @Inject @@ -410,7 +414,8 @@ getDisplayMode(intentDataProvider), intentDataProvider.shouldEnableEmbeddedMediaExperience(), visibilityDelegate, authUtils, multiWindowUtils, intentDataProvider.getFocusIntent(), verifier, - ephemeralTabCoordinator); + ephemeralTabCoordinator, + intentDataProvider.shouldShowOpenInChromeMenuItemInContextMenu()); } /** @@ -419,7 +424,7 @@ */ static CustomTabDelegateFactory createDummy() { return new CustomTabDelegateFactory(null, false, false, null, WebDisplayMode.BROWSER, false, - null, null, null, null, null, () -> null); + null, null, null, null, null, () -> null, true); } @Override @@ -465,19 +470,28 @@ return new ExternalNavigationHandler(mNavigationDelegate); } + @VisibleForTesting + TabContextMenuItemDelegate createTabContextMenuItemDelegate(Tab tab) { + TabModelSelector tabModelSelector = + mActivity != null ? mActivity.getTabModelSelector() : null; + return new TabContextMenuItemDelegate(tab, tabModelSelector, + EphemeralTabCoordinator.isSupported() ? mEphemeralTabCoordinator::get : () + -> null, + () -> {}, mActivity == null ? null : mActivity::getSnackbarManager) { + @Override + public boolean supportsOpenInChromeFromCct() { + return mShouldShowOpenInChromeMenuItemInContextMenu; + } + }; + } + @Override public ContextMenuPopulatorFactory createContextMenuPopulatorFactory(Tab tab) { @ChromeContextMenuPopulator.ContextMenuMode int contextMenuMode = getContextMenuMode(mActivityType); Supplier<ShareDelegate> shareDelegateSupplier = mActivity == null ? null : mActivity.getShareDelegateSupplier(); - TabModelSelector tabModelSelector = - mActivity != null ? mActivity.getTabModelSelector() : null; - return new ChromeContextMenuPopulatorFactory( - new TabContextMenuItemDelegate(tab, tabModelSelector, - EphemeralTabCoordinator.isSupported() ? mEphemeralTabCoordinator::get : () - -> null, - () -> {}, mActivity == null ? null : mActivity::getSnackbarManager), + return new ChromeContextMenuPopulatorFactory(createTabContextMenuItemDelegate(tab), shareDelegateSupplier, contextMenuMode, AppHooks.get().getExternalAuthUtils()); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java index 79f25b9..5b061c4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -172,6 +172,20 @@ "androidx.browser.customtabs.extra.HIDE_OMNIBOX_SUGGESTIONS_FROM_CCT"; /** + * Extra that determines whether the 'open in chrome' menu item should be shown in the context + * menu. The value is a boolean. Default value is false, meaning the item is shown. + */ + public static final String EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU = + "androidx.browser.customtabs.extra.HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU"; + + /** + * Extra that determines whether the 'open in chrome' menu item should be shown in the menu. The + * value is a boolean. Default value is false, meaning the item is shown. + */ + public static final String EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM = + "androidx.browser.customtabs.extra.HIDE_OPEN_IN_CHROME_MENU_ITEM"; + + /** * Extra that, if set, results in marking visits from cct as hidden. The value is * a boolean, and is only considered if the feature kCCTHideVisits is enabled. */ @@ -954,4 +968,24 @@ return IntentUtils.safeGetBooleanExtra( mIntent, EXTRA_BLOCK_NEW_NOTIFICATION_REQUESTS_IN_CCT, false); } + + @Override + public boolean shouldShowOpenInChromeMenuItemInContextMenu() { + // Only 1p apps are allowed to hide visits. + String clientPackageName = + CustomTabsConnection.getInstance().getClientPackageNameForSession(getSession()); + if (!GSAState.isGsaPackageName(clientPackageName)) return true; + return !IntentUtils.safeGetBooleanExtra( + mIntent, EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU, false); + } + + @Override + public boolean shouldShowOpenInChromeMenuItem() { + // Only 1p apps are allowed to hide visits. + String clientPackageName = + CustomTabsConnection.getInstance().getClientPackageNameForSession(getSession()); + if (!GSAState.isGsaPackageName(clientPackageName)) return true; + return !IntentUtils.safeGetBooleanExtra( + mIntent, EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM, false); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java index 18c6d73..f40c62d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
@@ -61,6 +61,7 @@ import org.chromium.chrome.browser.tab.TrustedCdn; import org.chromium.chrome.browser.toolbar.LocationBarModel; import org.chromium.chrome.browser.toolbar.ToolbarColors; +import org.chromium.chrome.browser.toolbar.ToolbarProgressBar; import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; import org.chromium.chrome.browser.toolbar.top.ToolbarPhone; import org.chromium.components.browser_ui.styles.ChromeColors; @@ -249,7 +250,6 @@ mLocationBarModel = locationBarModel; mLocationBar = new CustomTabLocationBar(locationBarModel, actionModeCallback, (UrlBar) mUrlBar); - mLocationBar.updateVisualsForState(); return mLocationBar; } @@ -495,6 +495,7 @@ super.onConfigurationChanged(newConfig); mLocationBarModel.notifyTitleChanged(); mLocationBarModel.notifyUrlChanged(); + mLocationBarModel.notifyPrimaryColorChanged(); } @Override @@ -540,9 +541,7 @@ // Using the current background color instead of the final color in case this // animation was cancelled. This ensures the assets are updated to the visible // color. - int backgroundColor = background.getColor(); - mUseDarkColors = !ColorUtils.shouldUseLightForegroundOnBackground(backgroundColor); - mLocationBar.updateVisualsForState(); + updateUseDarkColors(background.getColor()); } }); mBrandColorTransitionAnimation.start(); @@ -550,7 +549,12 @@ if (!shouldAnimate) mBrandColorTransitionAnimation.end(); } - + private void updateUseDarkColors(int backgroundColor) { + boolean useDarkColors = !ColorUtils.shouldUseLightForegroundOnBackground(backgroundColor); + if (mUseDarkColors == useDarkColors) return; + mUseDarkColors = useDarkColors; + mLocationBar.onUseDarkColorsChanged(); + } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @@ -613,8 +617,9 @@ ActionMode.Callback actionModeCallback, UrlBar urlBar) { mLocationBarDataProvider = locationBarDataProvider; mLocationBarDataProvider.addObserver(this); - mUrlCoordinator = new UrlBarCoordinator( - urlBar, null, actionModeCallback, /*focusChangeCallback=*/(unused) -> {}, this); + mUrlCoordinator = new UrlBarCoordinator(urlBar, /*windowDelegate=*/null, + actionModeCallback, /*focusChangeCallback=*/(unused) -> {}, this); + onPrimaryColorChanged(); } public void onNativeLibraryReady() { @@ -752,6 +757,24 @@ public void onNtpStartedLoading() {} @Override + public void onPrimaryColorChanged() { + onUseDarkColorsChanged(); + updateProgressBarColors(); + } + + private void onUseDarkColorsChanged() { + updateButtonsTint(); + if (mUrlCoordinator.setUseDarkTextColors(mUseDarkColors)) { + // Update the URL to make it use the new color scheme. + onUrlChanged(); + } + + mTitleBar.setTextColor(ApiCompatibilityUtils.getColor(getResources(), + mUseDarkColors ? R.color.default_text_color_dark + : R.color.default_text_color_light)); + } + + @Override public void updateLoadingState(boolean updateUrl) { if (updateUrl) onUrlChanged(); updateStatusIcon(); @@ -759,27 +782,23 @@ @Override public void updateVisualsForState() { - Resources resources = getResources(); updateStatusIcon(); - updateButtonsTint(); - if (mUrlCoordinator.setUseDarkTextColors(mUseDarkColors)) { - onUrlChanged(); - } + updateProgressBarColors(); + } - mTitleBar.setTextColor(ApiCompatibilityUtils.getColor(resources, - mUseDarkColors ? R.color.default_text_color_dark - : R.color.default_text_color_light)); - - if (getProgressBar() != null) { - if (!ToolbarColors.isUsingDefaultToolbarColor( - getResources(), false, getBackground().getColor())) { - getProgressBar().setThemeColor(getBackground().getColor(), false); - } else { - getProgressBar().setBackgroundColor(ApiCompatibilityUtils.getColor( - resources, R.color.progress_bar_background)); - getProgressBar().setForegroundColor(ApiCompatibilityUtils.getColor( - resources, R.color.progress_bar_foreground)); - } + private void updateProgressBarColors() { + final ToolbarProgressBar progressBar = getProgressBar(); + if (progressBar == null) return; + final Resources resources = getResources(); + final int backgroundColor = getBackground().getColor(); + if (ToolbarColors.isUsingDefaultToolbarColor( + resources, /*isIncognito=*/false, backgroundColor)) { + progressBar.setBackgroundColor( + ApiCompatibilityUtils.getColor(resources, R.color.progress_bar_background)); + progressBar.setForegroundColor( + ApiCompatibilityUtils.getColor(resources, R.color.progress_bar_foreground)); + } else { + progressBar.setThemeColor(backgroundColor, /*isIncognito=*/false); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java index 7f22471..09e7399e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java
@@ -16,13 +16,15 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; +import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacadeProvider; /** Provides first run related utility functions. */ public class FirstRunUtils { private static Boolean sHasGoogleAccountAuthenticator; - static final int SKIP_TOS_EXIT_DELAY_MS = 1000; + private static final int DEFAULT_SKIP_TOS_EXIT_DELAY_MS = 1000; + private static final int A11Y_DELAY_FACTOR = 2; /** * Synchronizes first run native and Java preferences. @@ -121,6 +123,22 @@ return FirstRunUtilsJni.get().getCctTosDialogEnabled(); } + /** + * The the number of ms delay before exiting FRE with policy. By default the delay would be + * {@link #DEFAULT_SKIP_TOS_EXIT_DELAY_MS}, while in a11y mode it will be extended by a factor + * of {@link #A11Y_DELAY_FACTOR}. This is intended to avoid screen reader being interrupted, but + * it is likely not going to work perfectly for all languages. + * + * @return The number of ms delay before exiting FRE with policy. + */ + public static int getSkipTosExitDelayMs() { + int durationMs = DEFAULT_SKIP_TOS_EXIT_DELAY_MS; + if (ChromeAccessibilityUtil.get().isTouchExplorationEnabled()) { + durationMs *= A11Y_DELAY_FACTOR; + } + return durationMs; + } + @NativeMethods public interface Natives { boolean getFirstRunEulaAccepted();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java index 04a36e6..d6a59a8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/LightweightFirstRunActivity.java
@@ -262,7 +262,7 @@ mExitFreRunnable = null; }; mHandler = new Handler(ThreadUtils.getUiThreadLooper()); - mHandler.postDelayed(mExitFreRunnable, FirstRunUtils.SKIP_TOS_EXIT_DELAY_MS); + mHandler.postDelayed(mExitFreRunnable, FirstRunUtils.getSkipTosExitDelayMs()); } private void exitLightweightFirstRun() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java index e379914..f2b1e1b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFirstRunFragmentWithEnterpriseSupport.java
@@ -10,6 +10,7 @@ import android.os.SystemClock; import android.view.View; import android.view.accessibility.AccessibilityEvent; +import android.widget.TextView; import androidx.annotation.NonNull; @@ -66,7 +67,7 @@ private boolean mViewCreated; private View mLoadingSpinnerContainer; private LoadingView mLoadingSpinner; - private View mPrivacyDisclaimer; + private TextView mPrivacyDisclaimer; private SkipTosDialogPolicyListener mSkipTosDialogPolicyListener; private final OneshotSupplierImpl<PolicyService> mPolicyServiceProvider = new OneshotSupplierImpl<>(); @@ -122,7 +123,7 @@ } else if (mSkipTosDialogPolicyListener.get()) { // Skip the FRE if we know dialog is disabled by policy. setTosAndUmaVisible(false); - exitCctFirstRun(); + exitCctFirstRun(/*shiftA11yFocus*/ false); } } @@ -155,7 +156,7 @@ boolean hasAccessibilityFocus = mLoadingSpinnerContainer.isAccessibilityFocused(); mLoadingSpinnerContainer.setVisibility(View.GONE); if (mSkipTosDialogPolicyListener.get()) { - exitCctFirstRun(); + exitCctFirstRun(hasAccessibilityFocus); } else { // Else, show the UMA as the loading spinner is GONE. setTosAndUmaVisible(true); @@ -170,18 +171,26 @@ if (mViewCreated) mLoadingSpinner.hideLoadingUI(); } - private void exitCctFirstRun() { + private void exitCctFirstRun(boolean shiftA11yFocus) { // TODO(crbug.com/1108582): Save a shared pref indicating Enterprise CCT FRE is complete, // and skip waiting for future cold starts. Log.d(TAG, "TosAndUmaFirstRunFragmentWithEnterpriseSupport finished."); mPrivacyDisclaimer.setVisibility(View.VISIBLE); - mPrivacyDisclaimer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); + + // If the screen reader focus was on the loading spinner, to avoid the focus get lost from + // the screen, shift the focus to the disclaimer instead. Otherwise, announce the disclaimer + // without shifting the focus as it is not necessary. + if (shiftA11yFocus) { + mPrivacyDisclaimer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); + } else { + mPrivacyDisclaimer.announceForAccessibility(mPrivacyDisclaimer.getText()); + } mExitFreRunnable = () -> { getPageDelegate().exitFirstRun(); mExitFreRunnable = null; }; mHandler = new Handler(ThreadUtils.getUiThreadLooper()); - mHandler.postDelayed(mExitFreRunnable, FirstRunUtils.SKIP_TOS_EXIT_DELAY_MS); + mHandler.postDelayed(mExitFreRunnable, FirstRunUtils.getSkipTosExitDelayMs()); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java index e7d72a5..4f17140a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@@ -7,6 +7,7 @@ import android.content.Context; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.chromium.base.metrics.RecordUserAction; @@ -23,8 +24,7 @@ import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.SigninManager; import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; -import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.favicon.FaviconHelper; import org.chromium.chrome.browser.ui.favicon.FaviconHelper.FaviconImageCallback; @@ -42,8 +42,9 @@ /** * Provides the domain logic and data for RecentTabsPage and RecentTabsRowAdapter. */ -public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInStateObserver, - ProfileDataCache.Observer, AccountsChangeObserver { +public class RecentTabsManager implements ProfileSyncService.SyncStateChangedListener, + SignInStateObserver, ProfileDataCache.Observer, + AccountsChangeObserver { /** * Implement this to receive updates when the page contents change. */ @@ -83,6 +84,8 @@ private final ProfileDataCache mProfileDataCache; private final SigninPromoController mSigninPromoController; + @Nullable + private final ProfileSyncService mProfileSyncService; /** * Create an RecentTabsManager to be used with RecentTabsPage and RecentTabsRowAdapter. @@ -107,6 +110,7 @@ mProfileDataCache = ProfileDataCache.createProfileDataCache(context); mSigninPromoController = new SigninPromoController(SigninAccessPoint.RECENT_TABS); + mProfileSyncService = ProfileSyncService.get(); mRecentlyClosedTabManager.setTabsUpdatedRunnable(() -> { updateRecentlyClosedTabs(); @@ -127,7 +131,9 @@ */ public void destroy() { mIsDestroyed = true; - AndroidSyncSettings.get().unregisterObserver(this); + if (mProfileSyncService != null) { + mProfileSyncService.removeSyncStateChangedListener(this); + } mSignInManager.removeSignInStateObserver(this); mSignInManager = null; @@ -161,7 +167,10 @@ } private void registerObservers() { - AndroidSyncSettings.get().registerObserver(this); + if (mProfileSyncService != null) { + mProfileSyncService.addSyncStateChangedListener(this); + } + mSignInManager.addSignInStateObserver(this); mProfileDataCache.addObserver(this); @@ -372,8 +381,13 @@ return PromoState.PROMO_SIGNIN_PERSONALIZED; } - if (AndroidSyncSettings.get().isSyncEnabled() - && AndroidSyncSettings.get().isChromeSyncEnabled() && !mForeignSessions.isEmpty()) { + if (mProfileSyncService == null) { + // |mProfileSyncService| will remain null until the next browser startup, so no sense in + // offering any promo. + return PromoState.PROMO_NONE; + } + + if (mProfileSyncService.isSyncRequested() && !mForeignSessions.isEmpty()) { return PromoState.PROMO_NONE; } return PromoState.PROMO_SYNC; @@ -416,9 +430,9 @@ update(); } - // AndroidSyncSettingsObserver implementation. + // ProfileSyncService.SyncStateChangedListener implementation. @Override - public void androidSyncSettingsChanged() { + public void syncStateChanged() { update(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarDataProvider.java index 10008af..9de4daf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarDataProvider.java
@@ -30,10 +30,16 @@ * consumer will query the data it cares about. */ interface Observer { - void onTitleChanged(); - void onUrlChanged(); void onIncognitoStateChanged(); void onNtpStartedLoading(); + + /** + * Notifies about a possible change of the value of {@link #getPrimaryColor()}, or {@link + * #isUsingBrandColor()}. + */ + void onPrimaryColorChanged(); + void onTitleChanged(); + void onUrlChanged(); // TODO(https://crbug.com/1139481): Add methods for other LocationBarDataProvider // data, e.g. security state. }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 4b1e9d5..23a8f53 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -325,7 +325,7 @@ } mDeferredNativeRunnables.clear(); - updateVisualsForState(); + onPrimaryColorChanged(); updateMicButtonVisibility(); @@ -592,48 +592,48 @@ if (visibility == View.VISIBLE) updateMicButtonState(); } + /** Updates visuals after the primary color has changed. */ + @CallSuper + public void onPrimaryColorChanged() { + updateAssistantVoiceSearchColors(); + updateUseDarkColors(); + } + /** - * Call to force the UI to update the state of various buttons based on whether or not the - * current tab is incognito. + * Update visuals to use a correct light or dark color scheme depending on the primary color. */ - public void updateVisualsForState() { - // If the location bar is focused, the toolbar background color would be the default color - // regardless of whether it is branded or not. - final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( - getResources(), mLocationBarDataProvider.isIncognito()); - final int primaryColor = - mUrlHasFocus ? defaultPrimaryColor : mLocationBarDataProvider.getPrimaryColor(); - - // This will be called between inflation and initialization. For those calls, using a null - // ColorStateList should have no visible impact to the user. - AssistantVoiceSearchService assistantVoiceSearchService = - mAssistantVoiceSearchServiceSupplier.get(); - ColorStateList micColorStateList = assistantVoiceSearchService == null - ? null - : assistantVoiceSearchService.getMicButtonColorStateList( - primaryColor, getContext()); - ApiCompatibilityUtils.setImageTintList(mMicButton, micColorStateList); - + private void updateUseDarkColors() { + // TODO(crbug.com/1114183): Unify light and dark color logic in chrome and make it clear + // whether the foreground or background color is dark. final boolean useDarkColors = - !ColorUtils.shouldUseLightForegroundOnBackground(primaryColor); - ColorStateList colorStateList = - ChromeColors.getPrimaryIconTint(getContext(), !useDarkColors); - ApiCompatibilityUtils.setImageTintList(mDeleteButton, colorStateList); + !ColorUtils.shouldUseLightForegroundOnBackground(getPrimaryBackgroundColor()); + ApiCompatibilityUtils.setImageTintList( + mDeleteButton, ChromeColors.getPrimaryIconTint(getContext(), !useDarkColors)); // If the URL changed colors and is not focused, update the URL to account for the new // color scheme. if (mUrlCoordinator.setUseDarkTextColors(useDarkColors) && !mUrlBar.hasFocus()) { setUrl(mLocationBarDataProvider.getCurrentUrl()); } - mStatusCoordinator.setUseDarkColors(useDarkColors); - if (mAutocompleteCoordinator != null) { mAutocompleteCoordinator.updateVisualsForState( useDarkColors, mLocationBarDataProvider.isIncognito()); } } + /** Returns the primary color based on the url focus, and incognito state. */ + private int getPrimaryBackgroundColor() { + // If the url bar is focused, the toolbar background color is the default color regardless + // of whether it is branded or not. + if (mUrlHasFocus) { + return ChromeColors.getDefaultThemeColor( + getResources(), mLocationBarDataProvider.isIncognito()); + } else { + return mLocationBarDataProvider.getPrimaryColor(); + } + } + protected void onNtpStartedLoading() {} public View getContainerView() { @@ -644,8 +644,6 @@ return mStatusCoordinator.getSecurityIconView(); } - public void setShowTitle(boolean showTitle) {} - protected WindowAndroid getWindowAndroid() { return mWindowAndroid; } @@ -656,13 +654,21 @@ assert assistantVoiceSearchService != null; Drawable drawable = assistantVoiceSearchService.getCurrentMicDrawable(); mMicButton.setImageDrawable(drawable); + updateAssistantVoiceSearchColors(); + } - final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( - getResources(), mLocationBarDataProvider.isIncognito()); - final int primaryColor = - mUrlHasFocus ? defaultPrimaryColor : mLocationBarDataProvider.getPrimaryColor(); - ColorStateList colorStateList = - assistantVoiceSearchService.getMicButtonColorStateList(primaryColor, getContext()); + private void updateAssistantVoiceSearchColors() { + AssistantVoiceSearchService assistantVoiceSearchService = + mAssistantVoiceSearchServiceSupplier.get(); + ColorStateList colorStateList; + // This will be called between inflation and initialization. For those calls, using a null + // ColorStateList should have no visible impact to the user. + if (assistantVoiceSearchService == null) { + colorStateList = null; + } else { + colorStateList = assistantVoiceSearchService.getMicButtonColorStateList( + getPrimaryBackgroundColor(), getContext()); + } ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList); } @@ -923,6 +929,7 @@ mUrlHasFocus = hasFocus; updateButtonVisibility(); updateShouldAnimateIconChanges(); + onPrimaryColorChanged(); if (mUrlHasFocus) { if (mNativeInitialized) RecordUserAction.record("FocusLocation"); @@ -959,8 +966,6 @@ if (imm.isActive(mUrlBar)) imm.hideSoftInputFromWindow(getWindowToken(), 0, null); } - if (mLocationBarDataProvider.isUsingBrandColor()) updateVisualsForState(); - mStatusCoordinator.onUrlFocusChange(mUrlHasFocus); if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(mUrlHasFocus);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java index 885ad83..3a13d56 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -90,15 +90,6 @@ } // LocationBarData.Observer implementation - - @Override - public void onTitleChanged() {} - - @Override - public void onUrlChanged() { - mLocationBarLayout.setUrl(mLocationBarDataProvider.getCurrentUrl()); - } - @Override public void onIncognitoStateChanged() { mLocationBarLayout.updateMicButtonState(); @@ -109,9 +100,21 @@ mLocationBarLayout.onNtpStartedLoading(); } - // LocationBar implementation. + @Override + public void onPrimaryColorChanged() { + mLocationBarLayout.onPrimaryColorChanged(); + } @Override + public void onTitleChanged() {} + + @Override + public void onUrlChanged() { + mLocationBarLayout.setUrl(mLocationBarDataProvider.getCurrentUrl()); + } + + // LocationBar implementation. + @Override public void destroy() { mLocationBarLayout = null; mVoiceRecognitionHandler = null; @@ -126,12 +129,12 @@ @Override public void updateVisualsForState() { - mLocationBarLayout.updateVisualsForState(); + mLocationBarLayout.onPrimaryColorChanged(); } @Override public void setShowTitle(boolean showTitle) { - mLocationBarLayout.setShowTitle(showTitle); + // This method is only used in CustomTabToolbar. } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java index 129e91bc..08eb00b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
@@ -178,8 +178,8 @@ } @Override - public void updateVisualsForState() { - super.updateVisualsForState(); + public void onPrimaryColorChanged() { + super.onPrimaryColorChanged(); boolean isIncognito = mLocationBarDataProvider.isIncognito(); setShowIconsWhenUrlFocused(SearchEngineLogoUtils.shouldShowSearchEngineLogo(isIncognito)); updateStatusVisibility();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordEntryViewer.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordEntryViewer.java index b3af0ef..cfa7427 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordEntryViewer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordEntryViewer.java
@@ -36,7 +36,6 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.ui.text.SpanApplier; @@ -215,8 +214,8 @@ private boolean isPasswordSyncingUser() { ProfileSyncService syncService = ProfileSyncService.get(); - return (AndroidSyncSettings.get().isSyncEnabled() && syncService.isEngineInitialized() - && !syncService.isUsingSecondaryPassphrase()); + return syncService != null && syncService.isSyncRequested() + && syncService.isEngineInitialized() && !syncService.isUsingSecondaryPassphrase(); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java index aacbc67..cffd3f5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
@@ -149,7 +149,7 @@ // Implements BrowserPaymentRequest: @Override public List<PaymentApp> getPaymentApps() { - return mPaymentUiService.getPaymentAppsInPaymentAppList(); + return mPaymentUiService.getPaymentApps(); } // Implements BrowserPaymentRequest: @@ -230,11 +230,6 @@ @Override public String showOrSkipAppSelector(boolean isShowWaitingForUpdatedDetails, PaymentItem total, boolean shouldSkipAppSelector) { - // Send AppListReady signal when all apps are created and request.show() is called. - if (PaymentRequestService.getNativeObserverForTest() != null) { - PaymentRequestService.getNativeObserverForTest().onAppListReady( - mPaymentUiService.getPaymentApps(), total); - } ChromeActivity chromeActivity = ChromeActivity.fromWebContents(mWebContents); if (chromeActivity == null) return ErrorStrings.ACTIVITY_NOT_FOUND; String error = mPaymentUiService.buildPaymentRequestUI(chromeActivity, @@ -642,7 +637,7 @@ | AutofillPaymentInstrument.CompletionStatus.CREDIT_CARD_NO_BILLING_ADDRESS; } } else { - PaymentApp firstApp = (PaymentApp) mPaymentUiService.getPaymentApps().get(0); + PaymentApp firstApp = mPaymentUiService.getPaymentApps().get(0); if (firstApp.isAutofillInstrument()) { missingFields = ((AutofillPaymentInstrument) (firstApp)).getMissingFields(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java index 66cee2d..327f8cb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
@@ -335,16 +335,8 @@ return mMerchantSupportsAutofillCards; } - /** @return Get the payment apps of the PaymentRequest UI. */ - public List<EditableOption> getPaymentApps() { - return mPaymentMethodsSection.getItems(); - } - - /** - * @return Get the payment apps of the PaymentRequest UI in the form of a {@link PaymentApp} - * list. - */ - public List<PaymentApp> getPaymentAppsInPaymentAppList() { + /** @return The payment apps. */ + public List<PaymentApp> getPaymentApps() { List<PaymentApp> paymentApps = new ArrayList<>(); for (EditableOption each : mPaymentMethodsSection.getItems()) { paymentApps.add((PaymentApp) each);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java index 25dca80..e7ed116 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java
@@ -11,7 +11,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfAndroidBridge; import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfCoordinator; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.Tab; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider; @@ -23,7 +23,6 @@ */ public class SendTabToSelfShareActivity extends ChromeAccessorActivity { private static BottomSheetController sBottomSheetControllerForTesting; - private static AndroidSyncSettings sAndroidSyncSettings; @Override public void handleAction(ChromeActivity triggeringActivity) { @@ -37,7 +36,8 @@ return; } - boolean isSyncEnabled = getAndroidSyncSettings().isSyncEnabled(); + boolean isSyncEnabled = + ProfileSyncService.get() != null && ProfileSyncService.get().isSyncRequested(); controller.requestShowContent( SendTabToSelfCoordinator.createBottomSheetContent(triggeringActivity, entry.getUrl(), entry.getTitle(), entry.getTimestamp(), controller, @@ -57,18 +57,8 @@ return BottomSheetControllerProvider.from(window); } - private AndroidSyncSettings getAndroidSyncSettings() { - if (sAndroidSyncSettings != null) return sAndroidSyncSettings; - return AndroidSyncSettings.get(); - } - @VisibleForTesting public static void setBottomSheetControllerForTesting(BottomSheetController controller) { sBottomSheetControllerForTesting = controller; } - - @VisibleForTesting - public static void setAndroidSyncSettingsForTesting(AndroidSyncSettings syncSettings) { - sAndroidSyncSettings = syncSettings; - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java index fe89b6b..249dc671 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareDelegateImpl.java
@@ -27,7 +27,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.share.share_sheet.ShareSheetCoordinator; import org.chromium.chrome.browser.share.share_sheet.ShareSheetPropertyModelBuilder; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.SadTab; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.util.ChromeFileProvider; @@ -108,9 +108,10 @@ if (mShareStartTime == 0L) { mShareStartTime = System.currentTimeMillis(); } + boolean isSyncEnabled = + ProfileSyncService.get() != null && ProfileSyncService.get().isSyncRequested(); mDelegate.share(params, chromeShareExtras, mBottomSheetController, mLifecycleDispatcher, - mTabProvider, this::printTab, shareOrigin, - AndroidSyncSettings.get().isSyncEnabled(), mShareStartTime, + mTabProvider, this::printTab, shareOrigin, isSyncEnabled, mShareStartTime, isSharingHubV1Enabled()); mShareStartTime = 0; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncPromoView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncPromoView.java index aa9c6f2..072f06bbf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncPromoView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncPromoView.java
@@ -20,8 +20,7 @@ import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.signin.SigninActivity.AccessPoint; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; -import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.settings.SyncAndServicesSettings; import org.chromium.components.signin.metrics.SigninAccessPoint; @@ -31,7 +30,8 @@ * If inflated manually, {@link SyncPromoView#init(int)} must be called before * attaching this View to a ViewGroup. */ -public class SyncPromoView extends LinearLayout implements AndroidSyncSettingsObserver { +public class SyncPromoView + extends LinearLayout implements ProfileSyncService.SyncStateChangedListener { private @AccessPoint int mAccessPoint; private boolean mInitialized; @@ -58,6 +58,9 @@ */ public SyncPromoView(Context context, AttributeSet attrs) { super(context, attrs); + // This promo is about enabling sync, so no sense in showing it if + // syncing isn't possible. + assert ProfileSyncService.get() != null; } @Override @@ -93,9 +96,9 @@ private void update() { ViewState viewState; - if (!AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync()) { + if (!ProfileSyncService.get().isSyncAllowedByPlatform()) { viewState = getStateForEnableAndroidSync(); - } else if (!AndroidSyncSettings.get().isChromeSyncEnabled()) { + } else if (!ProfileSyncService.get().isSyncRequested()) { viewState = getStateForEnableChromeSync(); } else { viewState = getStateForStartUsing(); @@ -142,6 +145,8 @@ private final int mTextResource; private final OnClickListener mOnClickListener; + // TODO(crbug.com/1107904): Once Chrome is decoupled from auto-sync, + // |onClickListener| can be inlined. public ButtonPresent(int textResource, OnClickListener onClickListener) { mTextResource = textResource; mOnClickListener = onClickListener; @@ -196,19 +201,19 @@ assert mInitialized : "init(...) must be called on SyncPromoView before use."; super.onAttachedToWindow(); - AndroidSyncSettings.get().registerObserver(this); + ProfileSyncService.get().addSyncStateChangedListener(this); update(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - AndroidSyncSettings.get().unregisterObserver(this); + ProfileSyncService.get().removeSyncStateChangedListener(this); } - // AndroidSyncStateObserver + // ProfileSyncService.SyncStateChangedListener @Override - public void androidSyncSettingsChanged() { + public void syncStateChanged() { update(); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java index 21c430180..e373938 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java
@@ -8,6 +8,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; +import android.view.accessibility.AccessibilityEvent; import android.widget.ImageView; import android.widget.ViewFlipper; @@ -42,6 +43,21 @@ boolean onBackPressed(); } + /** + * The title id for each screen of the bottom sheet's view flipper, the position of + * each id corresponds to the value of {@link ViewState}. It is used to set focus + * on title when the view flipper moves to a new screen. + */ + private static final @IdRes int[] sTitleIds = new int[] { + R.id.account_picker_header_title, + R.id.account_picker_header_title, + R.id.account_picker_header_title, + R.id.account_picker_signin_in_progress_title, + R.id.incognito_interstitial_title, + R.id.account_picker_general_error_title, + R.id.account_picker_auth_error_title, + }; + private final Activity mActivity; private final BackPressListener mBackPressListener; private final View mContentView; @@ -50,9 +66,6 @@ private final View mSelectedAccountView; private final ButtonCompat mDismissButton; - private @StringRes int mTitleId; - private @StringRes int mContentDescriptionId; - /** * @param activity The activity that hosts this view. Used for inflating views. * @param backPressListener The listener to be notified when the user taps the back button. @@ -87,12 +100,6 @@ R.string.auth_error_card_button); } - void setTitleAndContentDescriptionStrings( - @StringRes int titleId, @StringRes @Nullable Integer subtitleId) { - mTitleId = titleId; - mContentDescriptionId = subtitleId != null ? subtitleId : titleId; - } - /** * The account list view is visible when the account list is expanded. */ @@ -140,6 +147,8 @@ */ void setDisplayedView(@ViewState int state) { mViewFlipper.setDisplayedChild(state); + View titleView = mViewFlipper.getChildAt(state).findViewById(sTitleIds[state]); + titleView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); } /** @@ -208,22 +217,27 @@ @Override public int getSheetContentDescriptionStringId() { - return mContentDescriptionId; + // TODO(https://crbug.com/1112696): Use more specific string + // account picker content description + return R.string.signin_account_picker_bottom_sheet_subtitle; } @Override public int getSheetHalfHeightAccessibilityStringId() { - return mTitleId; + return R.string.signin_account_picker_dialog_title; } @Override public int getSheetFullHeightAccessibilityStringId() { - return mTitleId; + // TODO(https://crbug.com/1112696): Use more specific string + // like |Open account picker bottom sheet...| when bottom sheet opens + // after a11y meeting + return R.string.signin_account_picker_dialog_title; } @Override public int getSheetClosedAccessibilityStringId() { - // TODO(https://crbug.com/1112696): Use more specific string to when the account + // TODO(https://crbug.com/1112696): Use more specific string when the account // picker is closed. return R.string.close; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java index f23b590..63fd12f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetViewBinder.java
@@ -4,10 +4,6 @@ package org.chromium.chrome.browser.signin.account_picker; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; - -import org.chromium.chrome.R; import org.chromium.chrome.browser.signin.account_picker.AccountPickerBottomSheetProperties.ViewState; import org.chromium.chrome.browser.signin.services.DisplayableProfileData; import org.chromium.ui.modelutil.PropertyKey; @@ -25,8 +21,6 @@ } else if (propertyKey == AccountPickerBottomSheetProperties.VIEW_STATE) { @ViewState int viewState = model.get(AccountPickerBottomSheetProperties.VIEW_STATE); - view.setTitleAndContentDescriptionStrings( - getTitleId(viewState), getSubtitleId(viewState)); view.setDisplayedView(viewState); } else if (propertyKey == AccountPickerBottomSheetProperties.SELECTED_ACCOUNT_DATA) { DisplayableProfileData profileData = @@ -43,42 +37,5 @@ } } - private static @StringRes int getTitleId(@ViewState int viewState) { - switch (viewState) { - case ViewState.NO_ACCOUNTS: - case ViewState.COLLAPSED_ACCOUNT_LIST: - case ViewState.EXPANDED_ACCOUNT_LIST: - return R.string.signin_account_picker_dialog_title; - case ViewState.SIGNIN_IN_PROGRESS: - return R.string.signin_account_picker_bottom_sheet_signin_title; - case ViewState.INCOGNITO_INTERSTITIAL: - return R.string.incognito_interstitial_title; - case ViewState.SIGNIN_GENERAL_ERROR: - case ViewState.SIGNIN_AUTH_ERROR: - return R.string.signin_account_picker_bottom_sheet_error_title; - default: - throw new IllegalArgumentException("Unknown ViewState:" + viewState); - } - } - - private static @Nullable @StringRes Integer getSubtitleId(@ViewState int viewState) { - switch (viewState) { - case ViewState.NO_ACCOUNTS: - case ViewState.COLLAPSED_ACCOUNT_LIST: - case ViewState.EXPANDED_ACCOUNT_LIST: - return R.string.signin_account_picker_bottom_sheet_subtitle; - case ViewState.INCOGNITO_INTERSTITIAL: - return R.string.incognito_interstitial_message; - case ViewState.SIGNIN_GENERAL_ERROR: - return R.string.signin_account_picker_general_error_subtitle; - case ViewState.SIGNIN_AUTH_ERROR: - return R.string.signin_account_picker_auth_error_subtitle; - case ViewState.SIGNIN_IN_PROGRESS: - return null; - default: - throw new IllegalArgumentException("Unknown ViewState:" + viewState); - } - } - private AccountPickerBottomSheetViewBinder() {} }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/AndroidSyncSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/AndroidSyncSettings.java index 4164ba06..efa53257 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/AndroidSyncSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/AndroidSyncSettings.java
@@ -15,7 +15,6 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.ContextUtils; -import org.chromium.base.ObserverList; import org.chromium.base.ThreadUtils; import org.chromium.base.task.PostTask; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -33,7 +32,6 @@ * DecoupleSyncFromAndroidMasterSync is enabled. * * A helper class to handle the current status of sync for Chrome in Android settings. - * It also provides an observer to be used whenever Android sync settings change. * * {@link #updateAccount(Account)} should be invoked whenever sync account is changed. */ @@ -57,12 +55,14 @@ private boolean mShouldDecoupleSyncFromMasterSync; - private final ObserverList<AndroidSyncSettingsObserver> mObservers = new ObserverList<>(); + // Is set at most once. + @Nullable + private Delegate mDelegate; /** - * Provides notifications when Android sync settings have changed. + * Propagates changes from Android sync settings to the native code. */ - public interface AndroidSyncSettingsObserver { + public interface Delegate { void androidSyncSettingsChanged(); } @@ -122,9 +122,7 @@ // This is called by Android on a background thread, but AndroidSyncSettings // methods should be called from the UI thread, so post a task. PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { - if (updateCachedSettings()) { - notifyObservers(); - } + if (updateCachedSettings()) maybeNotifyDelegate(); }); } }; @@ -133,26 +131,12 @@ } /** - * Checks whether sync is currently enabled from Chrome for the currently signed in account. + * DEPRECATED - DO NOT USE! You probably want ProfileSyncService.isSyncRequested() instead. * - * It checks both the master sync for the device, and Chrome sync setting for the given account. - * If no user is currently signed in it returns false. - * - * @return true if sync is on, false otherwise + * @return The state of the Chrome sync setting for the given account, + * *ignoring* the master sync setting. */ - public boolean isSyncEnabled() { - ThreadUtils.assertOnUiThread(); - return mChromeSyncEnabled && doesMasterSyncSettingAllowChromeSync(); - } - - /** - * Checks whether sync is currently enabled for Chrome for a given account. - * - * It checks only Chrome sync setting for the given account, - * and ignores the master sync setting. - * - * @return true if sync is on, false otherwise - */ + @Deprecated public boolean isChromeSyncEnabled() { ThreadUtils.assertOnUiThread(); return mChromeSyncEnabled; @@ -190,9 +174,7 @@ ThreadUtils.assertOnUiThread(); mAccount = account; updateSyncability(); - if (updateCachedSettings()) { - notifyObservers(); - } + if (updateCachedSettings()) maybeNotifyDelegate(); } /** @@ -206,19 +188,13 @@ } /** - * Add a new AndroidSyncSettingsObserver. + * Must be called at most once to set a (non-null) delegate. */ - public void registerObserver(AndroidSyncSettingsObserver observer) { + public void setDelegate(Delegate delegate) { ThreadUtils.assertOnUiThread(); - mObservers.addObserver(observer); - } - - /** - * Remove an AndroidSyncSettingsObserver that was previously added. - */ - public void unregisterObserver(AndroidSyncSettingsObserver observer) { - ThreadUtils.assertOnUiThread(); - mObservers.removeObserver(observer); + assert delegate != null; + assert mDelegate == null; + mDelegate = delegate; } private void setChromeSyncEnabled(boolean value) { @@ -227,7 +203,7 @@ mChromeSyncEnabled = value; mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mContractAuthority, value); - notifyObservers(); + maybeNotifyDelegate(); } /** @@ -301,10 +277,8 @@ || oldMasterSyncEnabled != mMasterSyncEnabled; } - private void notifyObservers() { - for (AndroidSyncSettingsObserver observer : mObservers) { - observer.androidSyncSettingsChanged(); - } + private void maybeNotifyDelegate() { + if (mDelegate != null) mDelegate.androidSyncSettingsChanged(); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java index b587d7f..8d11a42b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java
@@ -369,6 +369,11 @@ } } + public boolean isSyncAllowedByPlatform() { + return ProfileSyncServiceJni.get().isSyncAllowedByPlatform( + mNativeProfileSyncServiceAndroid, ProfileSyncService.this); + } + public void setSyncAllowedByPlatform(boolean allowed) { ProfileSyncServiceJni.get().setSyncAllowedByPlatform( mNativeProfileSyncServiceAndroid, ProfileSyncService.this, allowed); @@ -651,6 +656,8 @@ void requestStart(long nativeProfileSyncServiceAndroid, ProfileSyncService caller); void requestStop(long nativeProfileSyncServiceAndroid, ProfileSyncService caller); + boolean isSyncAllowedByPlatform( + long nativeProfileSyncServiceAndroid, ProfileSyncService caller); void setSyncAllowedByPlatform( long nativeProfileSyncServiceAndroid, ProfileSyncService caller, boolean allowed); void setSyncSessionsId(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java index 13a55236..3877084 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncController.java
@@ -36,8 +36,8 @@ * are careful to not change the Android Chrome sync setting so we know whether to turn sync back * on when it is re-enabled. */ -public class SyncController implements ProfileSyncService.SyncStateChangedListener, - AndroidSyncSettings.AndroidSyncSettingsObserver { +public class SyncController + implements ProfileSyncService.SyncStateChangedListener, AndroidSyncSettings.Delegate { private static final String TAG = "SyncController"; /** @@ -58,7 +58,7 @@ private final SyncNotificationController mSyncNotificationController; private SyncController() { - AndroidSyncSettings.get().registerObserver(this); + AndroidSyncSettings.get().setDelegate(this); mProfileSyncService = ProfileSyncService.get(); mProfileSyncService.addSyncStateChangedListener(this); @@ -100,9 +100,8 @@ mProfileSyncService.setSyncAllowedByPlatform( AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync()); - boolean isSyncEnabled = AndroidSyncSettings.get().isSyncEnabled(); - if (isSyncEnabled == mProfileSyncService.isSyncRequested()) return; - if (isSyncEnabled) { + if (isSyncEnabledInAndroidSyncSettings() == mProfileSyncService.isSyncRequested()) return; + if (isSyncEnabledInAndroidSyncSettings()) { mProfileSyncService.requestStart(); return; } @@ -138,11 +137,11 @@ public void syncStateChanged() { ThreadUtils.assertOnUiThread(); if (mProfileSyncService.isSyncRequested()) { - if (!AndroidSyncSettings.get().isSyncEnabled()) { + if (!isSyncEnabledInAndroidSyncSettings()) { AndroidSyncSettings.get().enableChromeSync(); } } else { - if (AndroidSyncSettings.get().isSyncEnabled()) { + if (isSyncEnabledInAndroidSyncSettings()) { // Both Android's master and Chrome sync setting are enabled, so we want to disable // the Chrome sync setting to match isSyncRequested. We have to be careful not to // disable it when isSyncRequested becomes false due to master sync being disabled @@ -154,7 +153,7 @@ } /** - * From {@link AndroidSyncSettings.AndroidSyncSettingsObserver}. + * From {@link AndroidSyncSettings.Delegate}. */ @Override public void androidSyncSettingsChanged() { @@ -193,4 +192,13 @@ } mProfileSyncService.setSessionsId(SESSION_TAG_PREFIX + uniqueTag); } + + /** + * Checks both the master sync for the device, and Chrome sync setting for the given account. + * If no user is currently signed in it returns false. + */ + private boolean isSyncEnabledInAndroidSyncSettings() { + return AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync() + && AndroidSyncSettings.get().isChromeSyncEnabled(); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java index 8602e9b..65c6a36c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java
@@ -63,7 +63,7 @@ ThreadUtils.assertOnUiThread(); // Auth errors take precedence over passphrase errors. - if (!AndroidSyncSettings.get().isSyncEnabled()) { + if (!mProfileSyncService.isSyncRequested()) { cancelNotifications(); return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java index 7c646cd..a2078c98 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.services.DisplayableProfileData; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils; @@ -48,7 +47,6 @@ */ public class SignInPreference extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer, - AndroidSyncSettings.AndroidSyncSettingsObserver, SyncStateChangedListener, AccountsChangeObserver { @IntDef({State.SIGNIN_DISABLED_BY_POLICY, State.SIGNIN_DISALLOWED, State.GENERIC_PROMO, State.SIGNED_IN}) @@ -94,7 +92,6 @@ .addSignInAllowedObserver(this); mProfileDataCache.addObserver(this); FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone(); - AndroidSyncSettings.get().registerObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.addSyncStateChangedListener(this); @@ -112,7 +109,6 @@ .getSigninManager(Profile.getLastUsedRegularProfile()) .removeSignInAllowedObserver(this); mProfileDataCache.removeObserver(this); - AndroidSyncSettings.get().unregisterObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.removeSyncStateChangedListener(this); @@ -257,12 +253,6 @@ update(); } - // AndroidSyncSettings.AndroidSyncSettingsObserver implementation. - @Override - public void androidSyncSettingsChanged() { - update(); - } - // AccountsChangeObserver implementation. @Override public void onAccountsChanged() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java index 909a0a2..345f09c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncErrorCardPreference.java
@@ -18,7 +18,6 @@ import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView; import org.chromium.chrome.browser.signin.ProfileDataCache; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils.SyncError; import org.chromium.components.signin.base.CoreAccountInfo; @@ -27,8 +26,7 @@ import java.util.Collections; public class SyncErrorCardPreference extends Preference - implements AndroidSyncSettings.AndroidSyncSettingsObserver, - ProfileSyncService.SyncStateChangedListener, ProfileDataCache.Observer { + implements ProfileSyncService.SyncStateChangedListener, ProfileDataCache.Observer { /** * Listener for the buttons in the error card. */ @@ -68,7 +66,6 @@ public void onAttached() { super.onAttached(); mProfileDataCache.addObserver(this); - AndroidSyncSettings.get().registerObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.addSyncStateChangedListener(this); @@ -80,7 +77,6 @@ public void onDetached() { super.onDetached(); mProfileDataCache.removeObserver(this); - AndroidSyncSettings.get().unregisterObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.removeSyncStateChangedListener(this); @@ -173,14 +169,6 @@ } /** - * {@link AndroidSyncSettings.AndroidSyncSettingsObserver} implementation. - */ - @Override - public void androidSyncSettingsChanged() { - update(); - } - - /** * {@link ProfileDataCache.Observer} implementation. */ @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java index 88a153d1c..4f4e0ea 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.SigninPromoUtil; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; import org.chromium.components.signin.AccountManagerFacade; @@ -42,7 +41,6 @@ // TODO(https://crbug.com/1110889): Move all promos from SigninPreference to this class. public class SyncPromoPreference extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer, - AndroidSyncSettings.AndroidSyncSettingsObserver, SyncStateChangedListener, AccountsChangeObserver { @Retention(RetentionPolicy.SOURCE) @IntDef({State.PROMO_HIDDEN, State.PERSONALIZED_SIGNIN_PROMO, State.PERSONALIZED_SYNC_PROMO}) @@ -83,7 +81,6 @@ .addSignInAllowedObserver(this); mProfileDataCache.addObserver(this); FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone(); - AndroidSyncSettings.get().registerObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.addSyncStateChangedListener(this); @@ -101,7 +98,6 @@ .getSigninManager(Profile.getLastUsedRegularProfile()) .removeSignInAllowedObserver(this); mProfileDataCache.removeObserver(this); - AndroidSyncSettings.get().unregisterObserver(this); ProfileSyncService syncService = ProfileSyncService.get(); if (syncService != null) { syncService.removeSyncStateChangedListener(this); @@ -224,12 +220,6 @@ update(); } - // AndroidSyncSettings.AndroidSyncSettingsObserver implementation. - @Override - public void androidSyncSettingsChanged() { - update(); - } - // AccountsChangeObserver implementation. @Override public void onAccountsChanged() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java index 2877a15b7..f865caee 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
@@ -34,7 +34,6 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.TrustedVaultClient; import org.chromium.components.signin.base.CoreAccountInfo; @@ -77,18 +76,19 @@ */ @SyncError public static int getSyncError() { - if (!AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync()) { - return SyncError.ANDROID_SYNC_DISABLED; - } - - if (!AndroidSyncSettings.get().isChromeSyncEnabled()) { - return SyncError.NO_ERROR; - } - ProfileSyncService profileSyncService = ProfileSyncService.get(); if (profileSyncService == null) { return SyncError.NO_ERROR; } + + if (!profileSyncService.isSyncAllowedByPlatform()) { + return SyncError.ANDROID_SYNC_DISABLED; + } + + if (!profileSyncService.isSyncRequested()) { + return SyncError.NO_ERROR; + } + if (profileSyncService.getAuthError() == GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS) { return SyncError.AUTH_ERROR; @@ -219,15 +219,15 @@ return ""; } - if (!AndroidSyncSettings.get().doesMasterSyncSettingAllowChromeSync()) { - return res.getString(R.string.sync_android_system_sync_disabled); - } - ProfileSyncService profileSyncService = ProfileSyncService.get(); if (profileSyncService == null) { return res.getString(R.string.sync_is_disabled); } + if (!profileSyncService.isSyncAllowedByPlatform()) { + return res.getString(R.string.sync_android_system_sync_disabled); + } + if (profileSyncService.isSyncDisabledByEnterprisePolicy()) { return res.getString(R.string.sync_is_disabled_by_administrator); } @@ -251,30 +251,27 @@ return res.getString(R.string.sync_error_generic); } - if (!profileSyncService.isSyncRequested() - && ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) { - return res.getString(R.string.sync_data_types_off); + if (!profileSyncService.isSyncRequested()) { + return ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) + ? res.getString(R.string.sync_data_types_off) + : context.getString(R.string.sync_is_disabled); } - boolean syncEnabled = AndroidSyncSettings.get().isSyncEnabled(); - if (syncEnabled) { - if (!profileSyncService.isSyncActive()) { - return res.getString(R.string.sync_setup_progress); - } - - if (profileSyncService.isPassphraseRequiredForPreferredDataTypes()) { - return res.getString(R.string.sync_need_passphrase); - } - - if (profileSyncService.isTrustedVaultKeyRequiredForPreferredDataTypes()) { - return profileSyncService.isEncryptEverythingEnabled() - ? context.getString(R.string.sync_error_card_title) - : context.getString(R.string.sync_passwords_error_card_title); - } - - return context.getString(R.string.sync_and_services_summary_sync_on); + if (!profileSyncService.isSyncActive()) { + return res.getString(R.string.sync_setup_progress); } - return context.getString(R.string.sync_is_disabled); + + if (profileSyncService.isPassphraseRequiredForPreferredDataTypes()) { + return res.getString(R.string.sync_need_passphrase); + } + + if (profileSyncService.isTrustedVaultKeyRequiredForPreferredDataTypes()) { + return profileSyncService.isEncryptEverythingEnabled() + ? context.getString(R.string.sync_error_card_title) + : context.getString(R.string.sync_passwords_error_card_title); + } + + return context.getString(R.string.sync_and_services_summary_sync_on); } /** @@ -292,7 +289,7 @@ } ProfileSyncService profileSyncService = ProfileSyncService.get(); - if (profileSyncService == null || !AndroidSyncSettings.get().isSyncEnabled()) { + if (profileSyncService == null || !profileSyncService.isSyncRequested()) { return useNewIcon ? AppCompatResources.getDrawable(context, R.drawable.ic_sync_off_48dp) : UiUtils.getTintedDrawable(context, R.drawable.ic_sync_green_legacy_40dp,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS index 4e69285..543e4312 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
@@ -21,6 +21,7 @@ "+chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuNativeDelegate.java", "+chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuPopulator.java", "+chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuPopulatorFactory.java", + "+chrome/browser/continuous_search/android/java/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelper.java", "+chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java", "+chrome/android/java/src/org/chromium/chrome/browser/ui/TabObscuringHandler.java", "+chrome/android/java/src/org/chromium/chrome/browser/webapps/WebDisplayMode.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java index d5ef5eb..a4e215b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -317,6 +317,15 @@ } } + /** + * Returns whether the 'open in chrome' menu item should be shown. This is only called when the + * context menu is shown in cct. + */ + @Override + public boolean supportsOpenInChromeFromCct() { + return true; + } + @Override public void onOpenInNewChromeTabFromCCT(String linkUrl, boolean isIncognito) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUrl));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java index 9b170ac..ab40506 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java
@@ -7,6 +7,7 @@ import org.chromium.chrome.browser.SwipeRefreshHandler; import org.chromium.chrome.browser.complex_tasks.TaskTabHelper; import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; +import org.chromium.chrome.browser.continuous_search.ContinuousSearchTabHelper; import org.chromium.chrome.browser.crypto.CipherFactory; import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; import org.chromium.chrome.browser.dom_distiller.TabDistillabilityProvider; @@ -33,6 +34,7 @@ MediaSessionTabHelper.createForTab(tab); TaskTabHelper.createForTab(tab, parentTab); TabBrowserControlsConstraintsHelper.createForTab(tab); + ContinuousSearchTabHelper.createForTab(tab); if (ReaderModeManager.isEnabled()) ReaderModeManager.createForTab(tab); // TODO(jinsukkim): Do this by having something observe new tab creation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java index 9a0f3c1..d532d91 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
@@ -121,6 +121,7 @@ updateUsingBrandColor(); notifyTitleChanged(); notifyUrlChanged(); + notifyPrimaryColorChanged(); } @Override @@ -346,7 +347,10 @@ } public void setShouldShowOmniboxInOverviewMode(boolean shouldShowOmniboxInOverviewMode) { - mShouldShowOmniboxInOverviewMode = shouldShowOmniboxInOverviewMode; + if (mShouldShowOmniboxInOverviewMode != shouldShowOmniboxInOverviewMode) { + mShouldShowOmniboxInOverviewMode = shouldShowOmniboxInOverviewMode; + notifyPrimaryColorChanged(); + } } /** @@ -356,6 +360,7 @@ public void setPrimaryColor(int color) { mPrimaryColor = color; updateUsingBrandColor(); + notifyPrimaryColorChanged(); } private void updateUsingBrandColor() { @@ -379,6 +384,12 @@ return isInOverviewAndShowingOmnibox() || mIsUsingBrandColor; } + public void notifyPrimaryColorChanged() { + for (LocationBarDataProvider.Observer observer : mLocationBarDataObservers) { + observer.onPrimaryColorChanged(); + } + } + @Override public boolean isOfflinePage() { return hasTab() && OfflinePageUtils.isOfflinePage(mTab);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreDeviceUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreDeviceUtils.java deleted file mode 100644 index 738b65b..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreDeviceUtils.java +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.vr; - -import org.chromium.base.annotations.JNINamespace; -import org.chromium.base.annotations.NativeMethods; - -/** - * Helper used to ensure that the ArCore device is appropriately "installed" in - * the browser after any requisite dependencies (e.g. the AR DFM), have been - * installed. - */ -@JNINamespace("vr") -public class ArCoreDeviceUtils { - /** - * Installs the ArCoreDeviceProvider, so that the browser can use an ArCore device. - * Should be called once any ArCore dependencies (except ArCore itself) have been installed. - */ - public static void installArCoreDeviceProviderFactory() { - ArCoreDeviceUtilsJni.get().installArCoreDeviceProviderFactory(); - } - - @NativeMethods - /* package */ interface ArCodeDeviceUtilsNative { - void installArCoreDeviceProviderFactory(); - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java index fcd64bf..a56e4f65 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java
@@ -18,11 +18,6 @@ public ArDelegateImpl() {} @Override - public void init() { - ArCoreDeviceUtils.installArCoreDeviceProviderFactory(); - } - - @Override public boolean onBackPressed() { return ArCoreJavaUtils.onBackPressed(); }
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index d9088e44..b5a8a66 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -46,7 +46,6 @@ chrome_java_sources += [ "java/src/org/chromium/chrome/browser/vr/ArCompositorDelegateImpl.java", "java/src/org/chromium/chrome/browser/vr/ArCompositorDelegateProviderImpl.java", - "java/src/org/chromium/chrome/browser/vr/ArCoreDeviceUtils.java", "java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java", ] }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java index 585e8ee..a1f0d8c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
@@ -11,8 +11,6 @@ import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; import static org.chromium.components.browser_ui.widget.highlight.ViewHighlighterTestUtils.checkHighlightOff; @@ -72,8 +70,7 @@ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; -import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; @@ -139,7 +136,7 @@ private EmbeddedTestServer mTestServer; private @Nullable BookmarkActivity mBookmarkActivity; @Mock - private AndroidSyncSettings mAndroidSyncSettings; + private ProfileSyncService mProfileSyncService; @BeforeClass public static void setUpBeforeActivityLaunched() { @@ -160,17 +157,10 @@ mActivityTestRule.getActivity().getActivityTab().getWebContents())); mBookmarkBridge = mActivityTestRule.getActivity().getBookmarkBridgeForTesting(); - // Stub AndroidSyncSettings state to make sure promos aren't suppressed. - when(mAndroidSyncSettings.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); - when(mAndroidSyncSettings.isSyncEnabled()).thenReturn(false); - when(mAndroidSyncSettings.isChromeSyncEnabled()).thenReturn(false); - doNothing() - .when(mAndroidSyncSettings) - .registerObserver(any(AndroidSyncSettingsObserver.class)); - doNothing() - .when(mAndroidSyncSettings) - .unregisterObserver(any(AndroidSyncSettingsObserver.class)); - AndroidSyncSettings.overrideForTests(mAndroidSyncSettings); + // Stub ProfileSyncService state to make sure promos aren't suppressed. + when(mProfileSyncService.isSyncAllowedByPlatform()).thenReturn(true); + when(mProfileSyncService.isSyncRequested()).thenReturn(false); + ProfileSyncService.overrideForTests(mProfileSyncService); }); mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); mTestPage = mTestServer.getURL(TEST_PAGE_URL_GOOGLE);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java index c6d9b533..5663ffd 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasicTest.java
@@ -7,7 +7,6 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.when; import androidx.preference.CheckBoxPreference; import androidx.preference.PreferenceScreen; @@ -19,16 +18,12 @@ import org.junit.Test; import org.junit.rules.RuleChain; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; import org.chromium.base.CollectionUtil; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment.DialogOption; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; @@ -60,18 +55,22 @@ @Rule public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(); - @Rule - public final MockitoRule mMockitoRule = MockitoJUnit.rule(); - private static final String GOOGLE_ACCOUNT = "Google Account"; private static final String OTHER_ACTIVITY = "other forms of browsing history"; private static final String SIGNED_IN_DEVICES = "signed-in devices"; - @Mock - private AndroidSyncSettings mAndroidSyncSettings; + + private StubProfileSyncService mStubProfileSyncService; @Before public void setUp() throws InterruptedException { mActivityTestRule.startMainActivityOnBlankPage(); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + // Can only construct StubProfileSyncService after native was initialized by + // startMainActivityOnBlankPage() above. + mStubProfileSyncService = new StubProfileSyncService(); + ProfileSyncService.overrideForTests(mStubProfileSyncService); + }); } @After @@ -80,29 +79,24 @@ } private static class StubProfileSyncService extends ProfileSyncService { - private final boolean mSyncable; + private boolean mSyncable; - StubProfileSyncService(boolean syncable) { - super(); + public void setSyncable(boolean syncable) { mSyncable = syncable; } @Override + public boolean isSyncRequested() { + return mSyncable; + } + + @Override public Set<Integer> getActiveDataTypes() { return mSyncable ? CollectionUtil.newHashSet(ModelType.HISTORY_DELETE_DIRECTIVES) : new HashSet<Integer>(); } } - private void setSyncable(final boolean syncable) { - TestThreadUtils.runOnUiThreadBlocking(() -> { - when(mAndroidSyncSettings.isSyncEnabled()).thenReturn(syncable); - AndroidSyncSettings.overrideForTests(mAndroidSyncSettings); - - ProfileSyncService.overrideForTests(new StubProfileSyncService(syncable)); - }); - } - private String getCheckboxSummary(PreferenceScreen screen, String preference) { CheckBoxPreference checkbox = (CheckBoxPreference) screen.findPreference(preference); return new StringBuilder(checkbox.getSummary()).toString(); @@ -113,7 +107,7 @@ */ @Test @SmallTest - public void testCheckBoxTextNonsigned() { + public void testCheckBoxTextNotSignedIn() { mSettingsActivityTestRule.startSettingsActivity(); TestThreadUtils.runOnUiThreadBlocking(() -> { @@ -133,15 +127,15 @@ } /** - * Tests that for users who are signed in but don't have sync activated, - * only information about your "google account" which will stay signed in - * and "other activity" is shown. + * Tests that for users who are signed in with a primary account but have + * sync disabled, only "google account" and "other activity" are shown. */ @Test @SmallTest - public void testCheckBoxTextSigned() { + public void testCheckBoxTextSignedInButNotSyncing() { mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); - setSyncable(false); + // Simulate that Sync was stopped but the primary account remained. + TestThreadUtils.runOnUiThreadBlocking(() -> mStubProfileSyncService.setSyncable(false)); mSettingsActivityTestRule.startSettingsActivity(); @@ -168,9 +162,9 @@ */ @Test @SmallTest - public void testCheckBoxTextSignedAndSynced() { + public void testCheckBoxTextSignedInAndSyncing() { mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); - setSyncable(true); + TestThreadUtils.runOnUiThreadBlocking(() -> mStubProfileSyncService.setSyncable(true)); mSettingsActivityTestRule.startSettingsActivity();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java index c8ea57f..dee3bbb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java
@@ -73,6 +73,8 @@ @Mock private ChromeContextMenuPopulator mPopulator; + private boolean mSupportsOpenInChromeFromCct = true; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -86,6 +88,8 @@ when(mItemDelegate.supportsSendEmailMessage()).thenReturn(true); when(mItemDelegate.supportsSendTextMessage()).thenReturn(true); when(mItemDelegate.supportsAddToContacts()).thenReturn(true); + when(mItemDelegate.supportsOpenInChromeFromCct()) + .thenAnswer((mock) -> mSupportsOpenInChromeFromCct); HashMap<String, Boolean> features = new HashMap<String, Boolean>(); features.put(ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS, false); @@ -174,6 +178,23 @@ @Test @SmallTest @UiThreadTest + public void testShouldShowOpenInChromeMenuItemInContextMenu() { + FirstRunStatus.setFirstRunFlowComplete(true); + ContextMenuParams params = new ContextMenuParams(0, 0, PAGE_URL, LINK_URL, LINK_TEXT, "", + "", "", null, false, 0, 0, MenuSourceType.MENU_SOURCE_TOUCH); + + // If the delegate returns false from supportsOpenInChromeFromCct() then open_in_chrome item + // should not be present. + mSupportsOpenInChromeFromCct = false; + initializePopulator(ChromeContextMenuPopulator.ContextMenuMode.CUSTOM_TAB, params); + int[] expected = {R.id.contextmenu_copy_link_address, R.id.contextmenu_copy_link_text, + R.id.contextmenu_save_link_as, R.id.contextmenu_share_link}; + checkMenuOptions(expected); + } + + @Test + @SmallTest + @UiThreadTest public void testHttpLinkWithPreviewTabEnabled() { ContextMenuParams params = new ContextMenuParams(0, 0, PAGE_URL, LINK_URL, LINK_TEXT, "", "", "", null, false, 0, 0, MenuSourceType.MENU_SOURCE_TOUCH);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java index a1e20a3..ed3a40b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -108,6 +108,7 @@ import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tab.TabContextMenuItemDelegate; import org.chromium.chrome.browser.tab.TabCreationState; import org.chromium.chrome.browser.tab.TabHidingType; import org.chromium.chrome.browser.tab.TabLaunchType; @@ -2572,6 +2573,131 @@ .getActivityTab() .getShouldBlockNewNotificationRequests()); } + + @Test + @SmallTest + public void testHideOpenInChromeMenuItemInContextMenu() throws Exception { + Context context = InstrumentationRegistry.getInstrumentation() + .getTargetContext() + .getApplicationContext(); + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context, mTestPage); + intent.setData(Uri.parse(mTestPage)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra( + CustomTabIntentDataProvider.EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU, + true); + CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); + CustomTabsConnection connection = CustomTabsConnection.getInstance(); + connection.newSession(token); + connection.overridePackageNameForSessionForTesting( + token, "com.google.android.googlequicksearchbox"); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + TestThreadUtils.runOnUiThreadBlocking(() -> { + Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab(); + Assert.assertTrue(tab != null); + Assert.assertTrue( + TabTestUtils.getDelegateFactory(tab) instanceof CustomTabDelegateFactory); + TabContextMenuItemDelegate tabContextMenuItemDelegate = + ((CustomTabDelegateFactory) TabTestUtils.getDelegateFactory(tab)) + .createTabContextMenuItemDelegate(tab); + // EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU should be propagated to the + // tabContextMenuItemDelegate. + Assert.assertFalse(tabContextMenuItemDelegate.supportsOpenInChromeFromCct()); + }); + } + + @Test + @SmallTest + public void testHideOpenInChromeMenuItemInContextMenuIgnoredWrongPackage() throws Exception { + Context context = InstrumentationRegistry.getInstrumentation() + .getTargetContext() + .getApplicationContext(); + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context, mTestPage); + intent.setData(Uri.parse(mTestPage)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra( + CustomTabIntentDataProvider.EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU, + true); + CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); + CustomTabsConnection connection = CustomTabsConnection.getInstance(); + connection.newSession(token); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + // EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU should be ignored without the right + // package. + TestThreadUtils.runOnUiThreadBlocking(() -> { + Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab(); + Assert.assertTrue(tab != null); + Assert.assertTrue( + TabTestUtils.getDelegateFactory(tab) instanceof CustomTabDelegateFactory); + TabContextMenuItemDelegate tabContextMenuItemDelegate = + ((CustomTabDelegateFactory) TabTestUtils.getDelegateFactory(tab)) + .createTabContextMenuItemDelegate(tab); + // EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM_IN_CONTEXT_MENU should be ignored without the + // right package. + Assert.assertTrue(tabContextMenuItemDelegate.supportsOpenInChromeFromCct()); + }); + } + + @Test + @SmallTest + public void testHideOpenInChromeMenuItem() throws Exception { + Context context = InstrumentationRegistry.getInstrumentation() + .getTargetContext() + .getApplicationContext(); + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context, mTestPage); + intent.setData(Uri.parse(mTestPage)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(CustomTabIntentDataProvider.EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM, true); + CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); + CustomTabsConnection connection = CustomTabsConnection.getInstance(); + connection.newSession(token); + connection.overridePackageNameForSessionForTesting( + token, "com.google.android.googlequicksearchbox"); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + + IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW); + final ActivityMonitor monitor = + InstrumentationRegistry.getInstrumentation().addMonitor(filter, null, false); + openAppMenuAndAssertMenuShown(); + PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> { + MenuItem item = + AppMenuTestSupport.getMenu(mCustomTabActivityTestRule.getAppMenuCoordinator()) + .findItem(R.id.open_in_browser_id); + // The menu item should be there, but hidden. + Assert.assertNotNull(item); + Assert.assertFalse(item.isVisible()); + }); + } + + @Test + @SmallTest + public void testHideOpenInChromeMenuItemVisibleWithWrongPackage() throws Exception { + Context context = InstrumentationRegistry.getInstrumentation() + .getTargetContext() + .getApplicationContext(); + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context, mTestPage); + intent.setData(Uri.parse(mTestPage)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(CustomTabIntentDataProvider.EXTRA_HIDE_OPEN_IN_CHROME_MENU_ITEM, true); + CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); + CustomTabsConnection connection = CustomTabsConnection.getInstance(); + connection.newSession(token); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + + IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW); + final ActivityMonitor monitor = + InstrumentationRegistry.getInstrumentation().addMonitor(filter, null, false); + openAppMenuAndAssertMenuShown(); + PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> { + MenuItem item = + AppMenuTestSupport.getMenu(mCustomTabActivityTestRule.getAppMenuCoordinator()) + .findItem(R.id.open_in_browser_id); + // As the package name doesn't match the expected package, the item should be visible. + Assert.assertNotNull(item); + Assert.assertTrue(item.isVisible()); + }); + } + /** * The following test that history only has a single final page after speculation, * whether it was a hit or a miss.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java index 66252a9..25e9ffd6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
@@ -677,7 +677,7 @@ Tab tab = mActivityTestRule.loadUrlInNewTab(url, incognito); setupModelsForCurrentTab(); setUrlToPageUrl(locationBar); - TestThreadUtils.runOnUiThreadBlocking(() -> { locationBar.updateVisualsForState(); }); + TestThreadUtils.runOnUiThreadBlocking(() -> { locationBar.onPrimaryColorChanged(); }); return tab; }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordViewingTypeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordViewingTypeTest.java index 4cd7baf..e4620e9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordViewingTypeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordViewingTypeTest.java
@@ -22,7 +22,6 @@ import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.settings.MainSettings; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.components.browser_ui.settings.ChromeBasePreference; @@ -50,9 +49,8 @@ public final MockitoRule mMockitoRule = MockitoJUnit.rule(); private ChromeBasePreference mPasswordsPref; - private String mAuthority; @Mock - private AndroidSyncSettings mAndroidSyncSettings; + private ProfileSyncService mProfileSyncService; @Before public void setUp() { @@ -61,41 +59,8 @@ MainSettings mainSettings = mSettingsActivityTestRule.getFragment(); mPasswordsPref = (ChromeBasePreference) mainSettings.findPreference(MainSettings.PREF_PASSWORDS); - TestThreadUtils.runOnUiThreadBlocking(() -> { - AndroidSyncSettings.overrideForTests(mAndroidSyncSettings); - setSyncability(false); - mAuthority = AndroidSyncSettings.getContractAuthority(); - }); - } - - /** - * Override ProfileSyncService using FakeProfileSyncService. - */ - private void overrideProfileSyncService(final boolean usingPassphrase) { - class FakeProfileSyncService extends ProfileSyncService { - @Override - public boolean isUsingSecondaryPassphrase() { - return usingPassphrase; - } - - @Override - public boolean isEngineInitialized() { - return true; - } - } TestThreadUtils.runOnUiThreadBlocking( - () -> { ProfileSyncService.overrideForTests(new FakeProfileSyncService()); }); - } - - /** - * Turn syncability on/off. - */ - private void setSyncability(boolean syncState) { - TestThreadUtils.runOnUiThreadBlocking(() -> { - when(mAndroidSyncSettings.isSyncEnabled()).thenReturn(syncState); - when(mAndroidSyncSettings.isChromeSyncEnabled()).thenReturn(syncState); - when(mAndroidSyncSettings.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); - }); + () -> ProfileSyncService.overrideForTests(mProfileSyncService)); } /** @@ -106,13 +71,10 @@ @SmallTest @Feature({"Sync"}) public void testUserRedirectSyncSettings() { - setSyncability(true); - overrideProfileSyncService(false); - TestThreadUtils.runOnUiThreadBlocking(() -> { - Assert.assertTrue(AndroidSyncSettings.get().isSyncEnabled()); - Assert.assertTrue(ProfileSyncService.get().isEngineInitialized()); - Assert.assertFalse(ProfileSyncService.get().isUsingSecondaryPassphrase()); - }); + when(mProfileSyncService.isSyncRequested()).thenReturn(true); + when(mProfileSyncService.isEngineInitialized()).thenReturn(true); + when(mProfileSyncService.isUsingSecondaryPassphrase()).thenReturn(false); + Assert.assertEquals( PasswordSettings.class.getCanonicalName(), mPasswordsPref.getFragment()); } @@ -124,8 +86,10 @@ @Test @SmallTest public void testSyncingNativePasswordView() { - setSyncability(true); - overrideProfileSyncService(true); + when(mProfileSyncService.isSyncRequested()).thenReturn(true); + when(mProfileSyncService.isEngineInitialized()).thenReturn(true); + when(mProfileSyncService.isUsingSecondaryPassphrase()).thenReturn(true); + Assert.assertEquals( PasswordSettings.class.getCanonicalName(), mPasswordsPref.getFragment()); Assert.assertNotNull(mSettingsActivityTestRule.getActivity().getIntent()); @@ -137,7 +101,10 @@ @Test @SmallTest public void testNonSyncingNativePasswordView() { - setSyncability(false); + when(mProfileSyncService.isSyncRequested()).thenReturn(false); + when(mProfileSyncService.isEngineInitialized()).thenReturn(false); + when(mProfileSyncService.isUsingSecondaryPassphrase()).thenReturn(false); + Assert.assertEquals( PasswordSettings.class.getCanonicalName(), mPasswordsPref.getFragment()); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java index be2c00c..76ef063 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/read_later/ReadLaterIphTest.java
@@ -41,6 +41,7 @@ import org.chromium.base.Callback; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.FlakyTest; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.R; import org.chromium.chrome.browser.app.ChromeActivity; @@ -117,6 +118,7 @@ @Test @MediumTest @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) + @FlakyTest(message = "https://crbug.com/1155085") public void testShowBookmarksReadLaterIPH() throws Throwable { mActivityTestRule.loadUrl(mTestServer.getServer().getURL(CONTEXT_MENU_TEST_URL)); ChromeActivity activity = mActivityTestRule.getActivity();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTest.java index 7e5ea517..5dca4a1d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTest.java
@@ -10,7 +10,6 @@ import static org.chromium.chrome.browser.sync.AndroidSyncSettingsTestUtils.getDoesMasterSyncAllowSyncOnUiThread; import static org.chromium.chrome.browser.sync.AndroidSyncSettingsTestUtils.getIsChromeSyncEnabledOnUiThread; -import static org.chromium.chrome.browser.sync.AndroidSyncSettingsTestUtils.getIsSyncEnabledOnUiThread; import android.accounts.Account; import android.os.Bundle; @@ -31,7 +30,6 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.signin.AccountManagerFacadeProvider; @@ -100,8 +98,8 @@ } } - // Should live on the UI thread as normal a AndroidSyncSettingsObserver. - private static class MockSyncSettingsObserver implements AndroidSyncSettingsObserver { + // Should live on the UI thread as a normal AndroidSyncSettings.Delegate. + private static class MockSyncSettingsDelegate implements AndroidSyncSettings.Delegate { private boolean mReceivedNotification; public void clearNotification() { @@ -222,17 +220,17 @@ // First sync mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); + Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(getIsChromeSyncEnabledOnUiThread()); // Disable sync automatically for the app mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, false); - Assert.assertFalse(getIsSyncEnabledOnUiThread()); + Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertFalse(getIsChromeSyncEnabledOnUiThread()); // Re-enable sync mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); + Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(getIsChromeSyncEnabledOnUiThread()); // Disable master sync @@ -240,10 +238,8 @@ Assert.assertTrue(getIsChromeSyncEnabledOnUiThread()); if (ChromeFeatureList.isEnabled(ChromeFeatureList.DECOUPLE_SYNC_FROM_ANDROID_MASTER_SYNC)) { Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); } else { Assert.assertFalse(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertFalse(getIsSyncEnabledOnUiThread()); } } @@ -256,10 +252,10 @@ createAndroidSyncSettings(); TestThreadUtils.runOnUiThreadBlocking(() -> mAndroidSyncSettings.enableChromeSync()); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); + Assert.assertTrue(getIsChromeSyncEnabledOnUiThread()); TestThreadUtils.runOnUiThreadBlocking(() -> mAndroidSyncSettings.disableChromeSync()); - Assert.assertFalse(getIsSyncEnabledOnUiThread()); + Assert.assertFalse(getIsChromeSyncEnabledOnUiThread()); } @Test @@ -272,20 +268,20 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mAndroidSyncSettings.enableChromeSync(); - Assert.assertTrue(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertTrue(mAndroidSyncSettings.isChromeSyncEnabled()); mAndroidSyncSettings.updateAccount(mAlternateAccount); mAndroidSyncSettings.enableChromeSync(); - Assert.assertTrue(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertTrue(mAndroidSyncSettings.isChromeSyncEnabled()); mAndroidSyncSettings.disableChromeSync(); - Assert.assertFalse(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertFalse(mAndroidSyncSettings.isChromeSyncEnabled()); mAndroidSyncSettings.updateAccount(mAccount); - Assert.assertTrue(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertTrue(mAndroidSyncSettings.isChromeSyncEnabled()); // Ensure we don't erroneously re-use cached data. mAndroidSyncSettings.updateAccount(null); - Assert.assertFalse(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertFalse(mAndroidSyncSettings.isChromeSyncEnabled()); }); } @@ -299,7 +295,7 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mAndroidSyncSettings.enableChromeSync(); - Assert.assertTrue(mAndroidSyncSettings.isSyncEnabled()); + Assert.assertTrue(mAndroidSyncSettings.isChromeSyncEnabled()); int masterSyncAutomaticallyCalls = mSyncContentResolverDelegate.mGetMasterSyncAutomaticallyCalls.get(); @@ -309,7 +305,6 @@ // Do a bunch of reads. mAndroidSyncSettings.doesMasterSyncSettingAllowChromeSync(); - mAndroidSyncSettings.isSyncEnabled(); mAndroidSyncSettings.isChromeSyncEnabled(); // Ensure values were read from cache. @@ -323,7 +318,6 @@ // Do a bunch of reads for alternate account. mAndroidSyncSettings.updateAccount(mAlternateAccount); mAndroidSyncSettings.doesMasterSyncSettingAllowChromeSync(); - mAndroidSyncSettings.isSyncEnabled(); mAndroidSyncSettings.isChromeSyncEnabled(); // Ensure settings were only fetched once. @@ -339,42 +333,42 @@ @Test @SmallTest @Feature({"Sync"}) - public void testAndroidSyncSettingsPostsNotifications() { + public void testAndroidSyncSettingsNotifiesDelegate() { createAndroidSyncSettings(); TestThreadUtils.runOnUiThreadBlocking(() -> { - MockSyncSettingsObserver syncSettingsObserver = new MockSyncSettingsObserver(); - mAndroidSyncSettings.registerObserver(syncSettingsObserver); + MockSyncSettingsDelegate syncSettingsDelegate = new MockSyncSettingsDelegate(); + mAndroidSyncSettings.setDelegate(syncSettingsDelegate); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.enableChromeSync(); - Assert.assertTrue("enableChromeSync should trigger observers", - syncSettingsObserver.receivedNotification()); + Assert.assertTrue("enableChromeSync should notify delegate", + syncSettingsDelegate.receivedNotification()); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.updateAccount(mAlternateAccount); Assert.assertTrue("switching to account with different settings should notify", - syncSettingsObserver.receivedNotification()); + syncSettingsDelegate.receivedNotification()); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.updateAccount(mAccount); Assert.assertTrue("switching to account with different settings should notify", - syncSettingsObserver.receivedNotification()); + syncSettingsDelegate.receivedNotification()); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.enableChromeSync(); - Assert.assertFalse("enableChromeSync shouldn't trigger observers", - syncSettingsObserver.receivedNotification()); + Assert.assertFalse("enableChromeSync shouldn't notify delegate", + syncSettingsDelegate.receivedNotification()); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.disableChromeSync(); - Assert.assertTrue("disableChromeSync should trigger observers", - syncSettingsObserver.receivedNotification()); + Assert.assertTrue("disableChromeSync should notify delegate", + syncSettingsDelegate.receivedNotification()); - syncSettingsObserver.clearNotification(); + syncSettingsDelegate.clearNotification(); mAndroidSyncSettings.disableChromeSync(); - Assert.assertFalse("disableChromeSync shouldn't observers", - syncSettingsObserver.receivedNotification()); + Assert.assertFalse("disableChromeSync shouldn't notify delegate", + syncSettingsDelegate.receivedNotification()); }); } @@ -423,28 +417,24 @@ // Master sync is disabled on startup and the user hasn't gone through the decoupling flow // in the past. mSyncContentResolverDelegate.setMasterSyncAutomatically(false); - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true); TestThreadUtils.runOnUiThreadBlocking(() -> { when(mProfileSyncService.getDecoupledFromAndroidMasterSync()).thenReturn(false); }); - // Sync must remain disabled as long as master sync is not re-enabled. + // Sync must remain disallowed as long as master sync is not re-enabled. createAndroidSyncSettings(); Assert.assertFalse(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertFalse(getIsSyncEnabledOnUiThread()); - // Re-enable master sync at least once. Sync is now re-enabled and decoupled from master + // Re-enable master sync at least once. Sync is now allowed and decoupled from master // sync. TestThreadUtils.runOnUiThreadBlocking( () -> doNothing().when(mProfileSyncService).setDecoupledFromAndroidMasterSync()); mSyncContentResolverDelegate.setMasterSyncAutomatically(true); Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); TestThreadUtils.runOnUiThreadBlocking( () -> verify(mProfileSyncService).setDecoupledFromAndroidMasterSync()); mSyncContentResolverDelegate.setMasterSyncAutomatically(false); Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); } @Test @@ -455,7 +445,6 @@ // Master sync is disabled on startup, but the user has gone through the decoupling flow in // the past and has the DecoupleSyncFromAndroidMasterSync feature enabled. mSyncContentResolverDelegate.setMasterSyncAutomatically(false); - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true); TestThreadUtils.runOnUiThreadBlocking(() -> { when(mProfileSyncService.getDecoupledFromAndroidMasterSync()).thenReturn(true); }); @@ -464,7 +453,6 @@ // sync being disabled. createAndroidSyncSettings(); Assert.assertTrue(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertTrue(getIsSyncEnabledOnUiThread()); } @Test @@ -475,15 +463,13 @@ // The user went through the master sync decoupling flow in the past, but has the // DecoupleSyncFromAndroidMasterSync feature disabled. mSyncContentResolverDelegate.setMasterSyncAutomatically(false); - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true); TestThreadUtils.runOnUiThreadBlocking(() -> { when(mProfileSyncService.getDecoupledFromAndroidMasterSync()).thenReturn(true); }); // Chrome should ignore that a previous decoupling happened. Sync should again respect - // master sync and stay disabled. + // master sync, so it's not allowed. createAndroidSyncSettings(); Assert.assertFalse(getDoesMasterSyncAllowSyncOnUiThread()); - Assert.assertFalse(getIsSyncEnabledOnUiThread()); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTestUtils.java index 0d3e9fc..7f2f9e2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AndroidSyncSettingsTestUtils.java
@@ -26,11 +26,6 @@ () -> SyncContentResolverDelegate.overrideForTests(delegate)); } - public static boolean getIsSyncEnabledOnUiThread() { - return TestThreadUtils.runOnUiThreadBlockingNoException( - () -> AndroidSyncSettings.get().isSyncEnabled()); - } - public static boolean getIsChromeSyncEnabledOnUiThread() { return TestThreadUtils.runOnUiThreadBlockingNoException( () -> AndroidSyncSettings.get().isChromeSyncEnabled());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java index 559a75f..168e91b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
@@ -4,9 +4,6 @@ package org.chromium.chrome.browser.sync; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - import android.view.View; import androidx.test.filters.LargeTest; @@ -19,7 +16,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.chromium.base.test.params.ParameterAnnotations; import org.chromium.base.test.params.ParameterizedRunner; @@ -68,9 +64,6 @@ public final ChromeRenderTestRule mRenderTestRule = ChromeRenderTestRule.Builder.withPublicCorpus().setRevision(2).build(); - @Mock - private AndroidSyncSettings mAndroidSyncSettingsMock; - private FakeProfileSyncService mFakeProfileSyncService; @ParameterAnnotations.UseMethodParameterBefore(NightModeTestUtils.NightModeParams.class) @@ -86,7 +79,6 @@ @Before public void setUp() throws Exception { - initMocks(this); // Start main activity before because native side needs to be initialized before overriding // ProfileSyncService. mActivityTestRule.startMainActivityOnBlankPage(); @@ -94,8 +86,6 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mFakeProfileSyncService = new FakeProfileSyncService(); ProfileSyncService.overrideForTests(mFakeProfileSyncService); - AndroidSyncSettings.overrideForTests(mAndroidSyncSettingsMock); - when(mAndroidSyncSettingsMock.isChromeSyncEnabled()).thenReturn(true); }); } @@ -116,13 +106,14 @@ @Feature("RenderTest") @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForAndroidSyncDisabled(boolean nightModeEnabled) throws Exception { - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(false); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); - TestThreadUtils.runOnUiThreadBlocking( - () - -> Assert.assertEquals("ANDROID_SYNC_DISABLED SyncError should be set", - SyncSettingsUtils.SyncError.ANDROID_SYNC_DISABLED, - SyncSettingsUtils.getSyncError())); + TestThreadUtils.runOnUiThreadBlocking(() -> { + mFakeProfileSyncService.setSyncAllowedByPlatform(false); + + Assert.assertEquals("ANDROID_SYNC_DISABLED SyncError should be set", + SyncSettingsUtils.SyncError.ANDROID_SYNC_DISABLED, + SyncSettingsUtils.getSyncError()); + }); mSettingsActivityTestRule.startSettingsActivity(); mRenderTestRule.render( @@ -135,7 +126,6 @@ @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForAuthError(boolean nightModeEnabled) throws Exception { mFakeProfileSyncService.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS); - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); TestThreadUtils.runOnUiThreadBlocking( () @@ -153,7 +143,6 @@ @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForClientOutOfDate(boolean nightModeEnabled) throws Exception { mFakeProfileSyncService.setRequiresClientUpgrade(true); - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); TestThreadUtils.runOnUiThreadBlocking( () @@ -172,7 +161,6 @@ @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForOtherErrors(boolean nightModeEnabled) throws Exception { mFakeProfileSyncService.setAuthError(GoogleServiceAuthError.State.CONNECTION_FAILED); - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); TestThreadUtils.runOnUiThreadBlocking( () @@ -191,7 +179,6 @@ public void testSyncErrorCardForPassphraseRequired(boolean nightModeEnabled) throws Exception { mFakeProfileSyncService.setEngineInitialized(true); mFakeProfileSyncService.setPassphraseRequiredForPreferredDataTypes(true); - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); TestThreadUtils.runOnUiThreadBlocking( () @@ -212,7 +199,6 @@ mFakeProfileSyncService.setEngineInitialized(true); mFakeProfileSyncService.setTrustedVaultKeyRequiredForPreferredDataTypes(true); mFakeProfileSyncService.setEncryptEverythingEnabled(true); - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(mFakeProfileSyncService); TestThreadUtils.runOnUiThreadBlocking( () @@ -231,7 +217,6 @@ @Feature("RenderTest") @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForSyncSetupIncomplete(boolean nightModeEnabled) throws Exception { - when(mAndroidSyncSettingsMock.doesMasterSyncSettingAllowChromeSync()).thenReturn(true); // Passing a null ProfileSyncService instance here would sign-in the user but // FirstSetupComplete will be unset. mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java index a41cac25..488cbf9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
@@ -155,7 +155,8 @@ mSyncTestRule.setUpAccountAndEnableSyncForTesting()); String authority = AndroidSyncSettings.getContractAuthority(); - Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsChromeSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(SyncTestUtil.isSyncRequested()); // Disabling Android sync should turn Chrome sync engine off. @@ -175,7 +176,8 @@ public void testStopAndStartSyncThroughAndroidMasterSync() { mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsChromeSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(SyncTestUtil.isSyncRequested()); // Disabling Android's master sync should turn Chrome sync engine off. @@ -197,7 +199,8 @@ mSyncTestRule.setUpAccountAndEnableSyncForTesting()); String authority = AndroidSyncSettings.getContractAuthority(); - Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsChromeSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(SyncTestUtil.isSyncRequested()); Assert.assertTrue(SyncTestUtil.canSyncFeatureStart()); @@ -231,7 +234,8 @@ mSyncTestRule.setUpAccountAndEnableSyncForTesting()); String authority = AndroidSyncSettings.getContractAuthority(); - Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getIsChromeSyncEnabledOnUiThread()); + Assert.assertTrue(AndroidSyncSettingsTestUtils.getDoesMasterSyncAllowSyncOnUiThread()); Assert.assertTrue(SyncTestUtil.isSyncRequested()); Assert.assertTrue(SyncTestUtil.canSyncFeatureStart());
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivityTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivityTest.java index b0292ef7..8472c72 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivityTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivityTest.java
@@ -29,13 +29,14 @@ import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfAndroidBridge; import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfAndroidBridgeJni; import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfCoordinator; -import org.chromium.chrome.browser.sync.AndroidSyncSettings; +import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.tab.Tab; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.content_public.browser.NavigationController; import org.chromium.content_public.browser.NavigationEntry; import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.test.util.TestThreadUtils; /** Tests for SendTabToSelfShareActivityTest */ @RunWith(BaseRobolectricTestRunner.class) @@ -66,7 +67,7 @@ private BottomSheetController mBottomSheetController; @Mock - private AndroidSyncSettings mSyncSettings; + private ProfileSyncService mProfileSyncService; private Profile mProfile; @@ -102,8 +103,9 @@ when(mNavigationController.getVisibleEntry()).thenReturn(mNavigationEntry); // Setup the mocked object for sync settings. - when(mSyncSettings.isSyncEnabled()).thenReturn(true); - SendTabToSelfShareActivity.setAndroidSyncSettingsForTesting(mSyncSettings); + when(mProfileSyncService.isSyncRequested()).thenReturn(true); + TestThreadUtils.runOnUiThreadBlocking( + () -> ProfileSyncService.overrideForTests(mProfileSyncService)); // Setup the mocked object chain to get the bottom controller. SendTabToSelfShareActivity shareActivity = new SendTabToSelfShareActivity();
diff --git a/chrome/app/chrome_exe_main_mac.cc b/chrome/app/chrome_exe_main_mac.cc index df2dcbb2..180dcdeb 100644 --- a/chrome/app/chrome_exe_main_mac.cc +++ b/chrome/app/chrome_exe_main_mac.cc
@@ -9,7 +9,6 @@ #include <errno.h> #include <libgen.h> #include <mach-o/dyld.h> -#include <os/availability.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> @@ -31,7 +30,7 @@ // system CrashReporter and Crashpad collect in crash reports. Using a Crashpad // Annotation would be preferable, but this executable cannot depend on // Crashpad directly. -void abort_report_np(const char* fmt, ...) API_AVAILABLE(macos(10.11)); +void abort_report_np(const char* fmt, ...); } namespace { @@ -43,9 +42,7 @@ va_start(valist, format); char message[4096]; if (vsnprintf(message, sizeof(message), format, valist) >= 0) { - if (__builtin_available(macOS 10.11, *)) { - abort_report_np("%s", message); - } + abort_report_np("%s", message); } va_end(valist); abort();
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index 1760a45..95e9d88 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -2165,6 +2165,15 @@ <message name="IDS_SETTINGS_INTERNET_NETWORK_RENAME_DIALOG_CANCEL" desc="Settings > Internet > Network details >Rename profile dialog: The Label for the dialog cancel button to rename an eSIM cellular network"> Cancel </message> + <message name="IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_TITLE" desc="Settings > Internet > Network details >Remove profile dialog: Title remove esim profile dialog"> + Remove "<ph name="ESIM_PROFILE_NAME">$1<ex>Profile 1</ex></ph>"? + </message> + <message name="IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_CANCEL" desc="Settings > Internet > Network details >Remove profile dialog: The Label for the dialog cancel button to remove an eSIM cellular network"> + Cancel + </message> + <message name="IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_REMOVE" desc="Settings > Internet > Network details >ReMOVE profile dialog: The Label for the dialog remove button to remove an eSIM cellular network"> + Remove + </message> <message name="IDS_SETTINGS_INTERNET_BUTTON_ACTIVATE" desc="Settings > Internet > Network details: The label for the button to activate a Cellular network."> Activate </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_CANCEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_CANCEL.png.sha1 new file mode 100644 index 0000000..17c9e059 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_CANCEL.png.sha1
@@ -0,0 +1 @@ +ef26abd2aaab1cbe0943c1e379edfe1c08e76057 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_REMOVE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_REMOVE.png.sha1 new file mode 100644 index 0000000..17c9e059 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_REMOVE.png.sha1
@@ -0,0 +1 @@ +ef26abd2aaab1cbe0943c1e379edfe1c08e76057 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_TITLE.png.sha1 new file mode 100644 index 0000000..6cbda73 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@ +feba34f333cc935b6e6bd0a94f48b59b4f61ba5d \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_af.xtb b/chrome/app/resources/chromium_strings_af.xtb index af422c1..78e3755 100644 --- a/chrome/app/resources/chromium_strings_af.xtb +++ b/chrome/app/resources/chromium_strings_af.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium-bedryfstelsel kon nie jou data sinkroniseer nie, omdat jou rekening se aanmeldbesonderhede verouderd is.</translation> <translation id="2560420686485554789">Chromium het bergingtoegang nodig om lêers af te laai</translation> <translation id="2572494885440352020">Chromium-helper</translation> +<translation id="2583187216237139145">Enige Chromium-data wat tydens die gebruik van hierdie profiel gegenereer word (soos die skepping van boekmerke, geskiedenis, wagwoorde, en ander instellings) kan deur die werkprofieladministrateur verwyder word. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium-bedryfstelsel moet herbegin word om die opdatering toe te pas.</translation> <translation id="2615699638672665509">Hierdie rekenaar sal binnekort nie meer Chromium-opdaterings ontvang nie want sy hardeware word nie meer gesteun nie.</translation> <translation id="2648074677641340862">'n Bedryfstelselfout het voorgekom met installering. Laai Chromium asseblief weer af.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Daar is 'n nuwe weergawe van Chromium beskikbaar, en dit is vinniger as ooit.</translation> <translation id="6063093106622310249">&Maak in Chromium oop</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> is by Chromium gevoeg</translation> +<translation id="608006075545470555">Voeg werkprofiel by hierdie blaaier</translation> <translation id="608189560609172163">Chromium kon nie jou data sinkroniseer nie weens 'n fout tydens aanmelding.</translation> <translation id="6096348254544841612">Pasmaak en beheer Chromium. Opdatering is beskikbaar.</translation> <translation id="6120345080069858279">Chromium sal hierdie wagwoord in jou Google-rekening stoor. Jy sal dit nie hoef te onthou nie.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium is 'n webblaaier wat webbladsye en programme blitsvinning laat loop. Dis vinnig, stabiel en maklik om te gebruik. Blaai veiliger deur die web met beskerming teen wanware en uitvissing wat by Chromium ingebou is.</translation> <translation id="6434250628340475518">Chromium-bedryfstelsel</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium sal oor 1 sekonde herbegin}other{Chromium sal oor # sekondes herbegin}}</translation> +<translation id="6464340581899189425">As jy veelvuldige Google-rekeninge het, kan jy hulle by jou <ph name="DEVICE_TYPE" /> voeg. Jou rekeninge sal in Chromium-blaaier en Play Winkel beskikbaar wees, asook dienste soos Gmail, Drive en YouTube.<ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Dit beheer ook watter bladsy gewys word wanneer jy Chromium begin.</translation> <translation id="6510925080656968729">Deïnstalleer Chromium</translation> <translation id="6570579332384693436">Chromium stuur die teks wat jy in teksvelde intik na Google toe om spelfoute reg te maak</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Jy het OS X 10.11 of nuwer nodig om in die toekoms Chromium-opdaterings te kry. Hierdie rekenaar gebruik OS X 10.10.</translation> <translation id="7867198900892795913">Chromium kon nie na die nuutste weergawe opdateer nie en daarom het jy nie nuwe kenmerke en sekuriteitregstellings nie.</translation> <translation id="7898472181347242998">Gaan na <ph name="LINK_BEGIN" />Chromium OS-instellings<ph name="LINK_END" /> om te sien of jou toestel op datum is</translation> +<translation id="7907774600618164274">Chromium OS het nie reg toegemaak nie.</translation> <translation id="7937630085815544518">Jy was as <ph name="USER_EMAIL_ADDRESS" /> by Chromium aangemeld. Gebruik asseblief dieselfde rekening om weer aan te meld.</translation> <translation id="7975919845073681630">Dit is 'n sekondêre installering van Chromium en kan nie jou verstekblaaier gemaak word nie.</translation> <translation id="7979877361127045932">Versteek in Chromium-kieslys</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Herbegin Chromium binne 'n dag}other{Herbegin Chromium binne # dae}}</translation> <translation id="8453117565092476964">Die installeerderargief is korrup of ongeldig. Laai Chromium asseblief weer af.</translation> <translation id="8493179195440786826">Chromium is verouderd</translation> +<translation id="8550334526674375523">Hierdie werkprofiel is heeltemal apart van jou persoonlike profiel.</translation> <translation id="8558383651099478961">Jou ouer het "Toestemmings vir werwe, programme en uitbreidings" vir Chromium afgeskakel. Hierdie <ph name="EXTENSION_TYPE_PARAMETER" /> mag nie bygevoeg word nie.</translation> <translation id="8568283329061645092">Chromium kan jou wagwoorde nagaan as jy met jou Google-rekening aanmeld</translation> <translation id="8586442755830160949">Kopiereg <ph name="YEAR" /> Die Chromium-outeurs. Alle regte voorbehou.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium probeer tans om wagwoorde te wys. Tik jou Windows-wagwoord in om dit toe te laat.</translation> <translation id="8941642502866065432">Kan nie Chromium opdateer nie</translation> <translation id="8974095189086268230">Chromium-bedryfstelsel word moontlik gemaak deur bykomende <ph name="BEGIN_LINK_CROS_OSS" />oopbronsagteware<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Jy voeg tans 'n werkprofiel by hierdie blaaier en gee jou administrateur beheer oor net jou werkprofiel.</translation> <translation id="9019929317751753759">Om Chromium veiliger te maak, het ons die volgende uitbreiding, wat nie in die <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> gelys word nie en wat dalk sonder jou medewete bygevoeg is, gedeaktiveer.</translation> <translation id="9089354809943900324">Chromium is verouderd</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium sal oor 'n uur herbegin}other{Chromium sal oor # uur herbegin}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Vee ook jou blaaidata uit?</translation> <translation id="9158494823179993217">Jou stelseladministrateur het Chromium opgestel om 'n alternatiewe blaaier oop te maak om na <ph name="TARGET_URL_HOSTNAME" /> toe te gaan.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS-bedryfstelsel</translation> <translation id="93478295209880648">Chromium sal dalk nie reg werk nie omdat dit nie meer in Windows XP en Windows Vista gesteun word nie</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> vereis dat jy die volgende diensbepalings lees en aanvaar voor jy hierdie toestel gebruik. Hierdie bepalings verander, beperk of brei nie die Chromium-bedryfstelseldiensbepalings uit nie.</translation> <translation id="965162752251293939">Wie gebruik tans Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb index 502b2e10..e91448e 100644 --- a/chrome/app/resources/chromium_strings_am.xtb +++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">የመለያ መግቢያ ዝርዝሮችዎ ጊዜ ያለፈባቸው ስለሆኑ Chromium OS ውሂብዎን ማመሳሰል አልቻለም።</translation> <translation id="2560420686485554789">Chromium ፋይሎችን ለማውረድ የማከማቻ መዳረሻ ያስፈልገዋል</translation> <translation id="2572494885440352020">Chromium አጋዥ</translation> +<translation id="2583187216237139145">ይህን መገለጫ በሚጠቀሙበት ጊዜ የመነጨ ማንኛውም የChromium ውሂብ (እንደ የዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች መፈጠር ያለ) በስራ መገለጫ አስተዳዳሪው ሊወገድ ይችላል። <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS ዝማኔውን ለመተግበር ዳግም መጀመር አለበት።</translation> <translation id="2615699638672665509">ይህ ኮምፒውተር ሃርድዌሩ ከአሁን በኋላ ስለማይደገፍ በቅርቡ የChromium ዝማኔዎችን መቀበሉን ያቆማል።</translation> <translation id="2648074677641340862">በጭነት ጊዜ የስርዓተ ክወና ስህተት ተፈጥሯል። እባክዎ Chromiumን እንደገና ያውርዱት።</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">አዲስ የChromium ስሪት ይገኛል፣ እና ከመቼውም በበለጠ ፈጣን ሆኗል።</translation> <translation id="6063093106622310249">በChromium ውስጥ &ክፈት</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> ወደ Chromium ታክሏል።</translation> +<translation id="608006075545470555">የስራ መገለጫ ወደዚህ አሳሽ ያክሉ</translation> <translation id="608189560609172163">በመለያ ሲገባ በነበረ ስህተት ምክንያት Chromium ውሂብዎን ማመሳሰል አልቻለም።</translation> <translation id="6096348254544841612">Chromiumን ያብጁትና ይቆጣጠሩት። ዝማኔ ይገኛል።</translation> <translation id="6120345080069858279">Chromium ይህን የይለፍ ቃል በእርስዎ የGoogle መለያ ውስጥ ያስቀምጠዋል። ማስታወስ አይኖርብዎትም።</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium ድረ-ገጾችን እና መተግበሪያዎችን እጅግ በጣም ፈጣን በሆነ ፍጥነት የሚያሄድ ድር አሳሽ ነው። ፈጣን፣ የረጋ እና ለመጠቀም ቀላል ነው። Chromium ውስጥ አብሮ በተሰራላቸው የተንኮል-አዘል ሶፍትዌር እና የማስገሪያ መከላከያዎች አማካኝነት ደህንነትዎ ይበልጥ በተጠበቀ ሁኔታ ድሩን ያስሱ።</translation> <translation id="6434250628340475518">Chromium OS ሥርዓት</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium በ1 ሰከንድ ውስጥ ዳግም ይጀምራል}one{Chromium በ# ሰከንዶች ውስጥ ዳግም ይጀምራል}other{Chromium በ# ሰከንዶች ውስጥ ዳግም ይጀምራል}}</translation> +<translation id="6464340581899189425">በርካታ የGoogle መለያዎች ካለዎት ወደ የእርስዎ <ph name="DEVICE_TYPE" /> ሊያክሏቸው ይችላሉ። የእርስዎ መለያዎች በChromium አሳሽ እና Play መደብር ላይ እና እንዲሁም እንደ Gmail፣ Drive እና YouTube ባሉ አገልግሎቶች ላይ ይገኛሉ።<ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="6475912303565314141">እንዲሁም Chromiumን ሲጀምሩት የሚታየውን ገጽ ይቆጣጠራል።</translation> <translation id="6510925080656968729">Chromiumን ያራግፉ</translation> <translation id="6570579332384693436">የሥርዓተ ፊደል አጻጻፍ ስህተቶችን ለማስተካከል፣ Chromium እርስዎ በጽሑፍ መስኮች ውስጥ የሚተይቡትን ጽሑፍ ወደ Google ይልካል</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">የወደፊቱን የChromium ዝመኔዎችን ለማግኘት፣ OS X 10.11 ወይም ከዚያ በኋላ ያለው ያስፈልግዎታል። ይህ ኮምፒተር OS X 10.10 እየተጠቀመ ነው።</translation> <translation id="7867198900892795913">Chromium ወደ የቅርብ ጊዜው ስሪት ሊዘመን አልቻለም፣ ስለዚህ አዲስ ባህሪያት እና የደህንነት ጥገናዎች እያመለጡዎት ናቸው። Chromiumን ማዘመን አለብዎት።</translation> <translation id="7898472181347242998">መሣሪያዎ የተዘመነ ከሆነ ለማየት ወደ <ph name="LINK_BEGIN" />የChromium OS ቅንብሮች ይሂዱ<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS በትክክል አልተዘጋም።</translation> <translation id="7937630085815544518">እንደ <ph name="USER_EMAIL_ADDRESS" /> ሆነው ወደ Chromium ገብተዋል። እባክዎ እንደገና ለመግባት ተመሳሳዩን መለያ ይጠቀሙ።</translation> <translation id="7975919845073681630">ይሄ ሁለተኛ የChromium ጭነት ነው፣ እና ነባሪ አሳሽዎ ማድረግ አይቻልም።</translation> <translation id="7979877361127045932">በChromium ምናሌ ውስጥ ደብቅ</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{በአንድ ቀን ውስጥ Chromiumን ዳግም አስጀምር}one{በ# ቀኖች ውስጥ Chromiumን ዳግም አስጀምር}other{በ# ቀኖች ውስጥ Chromiumን ዳግም አስጀምር}}</translation> <translation id="8453117565092476964">የጫኚው መዝገብ ተበላሽቷል ወይም ትክክል አይደለም። እባክዎ Chromiumን እንደገና ያውርዱ።</translation> <translation id="8493179195440786826">Chromium ጊዜው አልፎበታል</translation> +<translation id="8550334526674375523">ይህ የስራ መገለጫ ከግል መገለጫዎ ሙሉ ለሙሉ የተለየ ነው።</translation> <translation id="8558383651099478961">የእርስዎ ወላጅ ለChromium «የጣቢያዎች፣ መተግበሪያዎች እና ቅጥያዎች ፈቃዶች»ን አጥፍተዋል። ይህን <ph name="EXTENSION_TYPE_PARAMETER" /> ማከል አይፈቀድም።</translation> <translation id="8568283329061645092">Chromium በእርስዎ የGoogle መለያ በሚገቡበት ጊዜ የእርስዎን የይለፍ ቃላትን ሊፈትሽ ይችላል</translation> <translation id="8586442755830160949">የቅጂ መብት <ph name="YEAR" /> የChromium ደራሲያን። ሁሉም መብቶች የተጠበቁ ናቸው።</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium የይለፍ ቃሎችን ለማሳየት እየሞከረ ነው። ይህንን ለመፍቀድ የWindows የይለፍ ቃልዎን ይተይቡ።</translation> <translation id="8941642502866065432">Chromiumን ማዘመን አልተቻለም</translation> <translation id="8974095189086268230">Chromium ስርዓተ ክወና በተጨማሪ <ph name="BEGIN_LINK_CROS_OSS" />ክፍት ምንጭ ሶፍትዌር<ph name="END_LINK_CROS_OSS" /> እውን ሊሆን ችሏል።</translation> +<translation id="8986207147630327271">የስራ መገለጫን ወደዚህ አሳሽ እያከሉ እና ለአስተዳዳሪዎ በስራ መገለጫው ላይ ብቻ ቁጥጥር እየሰጡ ነው።</translation> <translation id="9019929317751753759">Chromiumን ይበልጥ ደህንነቱ የተጠበቀ እንዲሆን ለማድረግ፣ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ውስጥ ያልተዘረዘረውን የሚከተለውን ቅጥያ አሰናክለነዋል እና እርስዎ ሳያውቁት የታከለ ሊሆን ይችላል።</translation> <translation id="9089354809943900324">Chromium ጊዜው አልፎበታል</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium በአንድ ሰዓት ውስጥ ዳግም ይጀምራል}one{Chromium በ# ሰዓቶች ውስጥ ዳግም ይጀምራል}other{Chromium በ# ሰዓቶች ውስጥ ዳግም ይጀምራል}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">የአሰሳ ውሂብዎም ይሰረዝ?</translation> <translation id="9158494823179993217">የእርስዎ የስርዓት አስተዳዳሪ <ph name="TARGET_URL_HOSTNAME" />ን ለመድረስ Chromium ተለዋጭ አሳሽን እንዲከፍት አዋቅረውታል።</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">የChromium OS ሥርዓት</translation> <translation id="93478295209880648">Chromium በWindows XP ወይም Windows Vista ላይ ከእንግዲህ ስለማይደገፍ በአግባቡ ላይሰራ ይችላል</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> ይህን መሣሪያ ከመጠቀምዎ በፊት የሚከተለውን የአገልግሎት ውል እንዲያነቡት እና እንዲቀበሉት ይፈለጋል። ይህ ውል የChromium ስርዓተ ክወና ውሉን አያስፋፋውም፣ አይቀይረውም ወይም አይገድበውም።</translation> <translation id="965162752251293939">ማነው Chromiumን የሚጠቀመው?</translation>
diff --git a/chrome/app/resources/chromium_strings_az.xtb b/chrome/app/resources/chromium_strings_az.xtb index d743b701..23118a2 100644 --- a/chrome/app/resources/chromium_strings_az.xtb +++ b/chrome/app/resources/chromium_strings_az.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS datanızı sinxronizasiya edə bilmir, çünki hesaba giriş məlumatlarınız köhnədir.</translation> <translation id="2560420686485554789">Faylları endirmək üçün Chromium yaddaşa giriş tələb edir</translation> <translation id="2572494885440352020">Chromium Yardım</translation> +<translation id="2583187216237139145">Bu profilin istifadəsi zamanı yaranan hər hansı bir Chromium datası (əlfəcinlər, tarixçələr, parolların yaradılması və digər ayarlar kimi) iş profili administratoru tərəfindən silinə bilər. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Güncəlləşmənin tətbiq olunması üçün Chromium OS yenidən başladılmalıdır.</translation> <translation id="2615699638672665509">Bu kompüterin avadanlığı dəstəklənmədiyindən, tezliklə Chromium güncəlləşmələri almağı dayandıracaq.</translation> <translation id="2648074677641340862">Quraşdırma zamanı əməliyyat sistemi xətası baş verdi. Chromium'u yenidən endirin.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Chromium'um yeni versiyası əlçatandır və həmişəkindən daha sürətlidir.</translation> <translation id="6063093106622310249">Chromium'də açın</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> Chromium'a əlavə edildi</translation> +<translation id="608006075545470555">Bu brauzerə İş Profili əlavə edin</translation> <translation id="608189560609172163">Giriş xətası səbəbindən Chromium datanızı sinxronizasiya edə bilmədi.</translation> <translation id="6096348254544841612">Chromium'u fərdiləşdirin və idarə edin. Güncəlləmə əlçatandır.</translation> <translation id="6120345080069858279">Chromium bu parolu Google Hesabında yadda saxlayacaq. Onu yadda saxlamalı olmayacaqsınız.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium veb səhifələri və tətbiqləri ildırım sürəti ilə işlədən veb brauzerdir. Chromium sürətlidir, stabildir və istifadəyə rahatdır. Chromium ilə internetdən fırıldaqlardan və viruslardan uzaq şəkildə istifadə edin.</translation> <translation id="6434250628340475518">Chromium OS Sistemi</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium 1 saniyəyə yenidən başlayacaq}other{Chromium # saniyəyə yenidən başlayacaq}}</translation> +<translation id="6464340581899189425">Birdən çox Google Hesabınız varsa, onları <ph name="DEVICE_TYPE" />cihazınıza əlavə edə bilərsiniz. Hesablarınız Chromium brauzerində və Play Marketdə, eləcə də Gmail, Disk və YouTube kimi xidmətlərdə əlçatan olacaq.<ph name="LINK_BEGIN" />Ətraflı məlumat<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Həmçinin, Chromium açılanda hansı səhifənin göstərildiyini idarə edir.</translation> <translation id="6510925080656968729">Chromium'u sistemdən silin</translation> <translation id="6570579332384693436">Chromium, yazı səhvlərini düzəltmək üçün mətn sahələrinə yazdığınız mətni Google'a göndərir</translation> @@ -218,6 +221,7 @@ <translation id="7857220146454061152">Chromium güncəlləmələrini əldə etmək üçün OS X 10.11 və ya daha yeni versiya tələb olunur. Bu kompüter OS X 10.10 istifadə edir.</translation> <translation id="7867198900892795913">Chromium ən son versiyaya güncəllənə bilmədi. Yeni funksiyaları və təhlükəsizlik həllərini əldən verirsiniz.</translation> <translation id="7898472181347242998">Cihazınızın güncəl olub-olmadığına baxmaq üçün <ph name="LINK_BEGIN" />Chromium OS Ayarlarına<ph name="LINK_END" /> keçin</translation> +<translation id="7907774600618164274">Chromium OS düzgün qapadılmadı.</translation> <translation id="7937630085815544518">Chromium'a <ph name="USER_EMAIL_ADDRESS" /> kimi daxil olmuşdunuz. Lütfən, yenidən daxil olmaq üçün eyni hesabdan istifadə edin.</translation> <translation id="7975919845073681630">Bu Chromium'un ikinci quraşdırmasıdır və defolt brauzer kimi ayarlana bilmir.</translation> <translation id="7979877361127045932">Chromium menyusunda gizlədin</translation> @@ -232,6 +236,7 @@ <translation id="8417404458978023919">{0,plural, =1{Chromium'u bir gün ərzində yenidən başladın}other{Chromium'u # gün ərzində yenidən başladın}}</translation> <translation id="8453117565092476964">Quraşdırıcı arxivi zədələnib və ya yanlışdır. Lütfən, Chromium'u yenidən endirin.</translation> <translation id="8493179195440786826">Chromium'um vaxtı keçib</translation> +<translation id="8550334526674375523">Bu iş profili şəxsi profilinizdən tamamilə ayrıdır.</translation> <translation id="8558383651099478961">Valideyniniz Chromium üçün "Saytlar, tətbiqlər və artırmalar üçün icazələri" deaktiv edib. Bu <ph name="EXTENSION_TYPE_PARAMETER" /> artırmasının əlavə edilməsinə icazə verilmir.</translation> <translation id="8568283329061645092">Google Hesabınız ilə daxil olduqda Chromium parollarınızı yoxlaya bilər</translation> <translation id="8586442755830160949">Müəlliflik Hüququ <ph name="YEAR" /> Chromium Müəllifləri. Bütün hüquqlar qorunur.</translation> @@ -248,6 +253,7 @@ <translation id="8907580949721785412">Chromium parolları göstərməyə çalışır. buna icazə vermək üçün Windows parolunuzu yazın.</translation> <translation id="8941642502866065432">Chromium'u güncəlləmək alınmadı</translation> <translation id="8974095189086268230">Chromium OS əlavə <ph name="BEGIN_LINK_CROS_OSS" />açıq mənbə proqram təminatı ilə<ph name="END_LINK_CROS_OSS" /> mümkün oldu.</translation> +<translation id="8986207147630327271">Bu brauzerə iş profili əlavə edirsiniz və administratorunuza yalnız iş profili üzərində nəzarət verirsiniz.</translation> <translation id="9019929317751753759">Chromium'u təhlükəsiz etmək üçün, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> siyahısında olmayan və xəbəriniz olmadan əlavə edilən artırmanı deaktiv etdik.</translation> <translation id="9089354809943900324">Chromium'un vaxtı keçib</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium 1 saata yenidən başlayacaq}other{Chromium # saata yenidən başlayacaq}}</translation> @@ -255,6 +261,7 @@ <translation id="911206726377975832">Brauzinq datanız da silinsin?</translation> <translation id="9158494823179993217">Sistem administratoru Chromium'u <ph name="TARGET_URL_HOSTNAME" /> ünvanına daxil olmaq məqsədilə alternativ brauzer açmaq üçün konfiqurasiya edib.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS sistemi</translation> <translation id="93478295209880648">Chromium düzgün işləməyə bilər, çünki daha Windows XP və ya Windows Vista'da dəstəklənmir</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> bu cihazı istifadə etməzdən əvvəl aşağıdakı Xidmət Şərtlərini oxuyub razılaşmağı tələb edir. Bu şərtlər Chromium OS Şərtlərini artırmır, dəyişdirmir və ya məhdudlaşdırmır.</translation> <translation id="965162752251293939">Chromium'u kim istifadə edir?</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb index 6db12cdf..59fafb5 100644 --- a/chrome/app/resources/chromium_strings_bg.xtb +++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium OS не можа да синхронизира данните ви, защото потребителското име и паролата за вход в профила ви не са актуални.</translation> <translation id="2560420686485554789">Chromium се нуждае от достъп до хранилището, за да изтегля файлове</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Данните в Chromium, които са генерирани при използването на този служебен потребителски профил (напр. създаването на отметки, историята, паролите и други настройки), могат да бъдат премахнати от администратора му. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS трябва да се рестартира, за да приложи актуализацията.</translation> <translation id="2615699638672665509">Този компютър скоро ще спре да получава актуализации на Chromium, защото хардуерът му вече не се поддържа.</translation> <translation id="2648074677641340862">По време на инсталирането възникна грешка в операционната система. Моля, изтеглете отново Chromium.</translation> @@ -139,6 +140,7 @@ <translation id="6055895534982063517">Налице е нова версия на Chromium, която е по-бърза от всякога.</translation> <translation id="6063093106622310249">&Отваряне в Chromium</translation> <translation id="6072279588547424923">Разширението <ph name="EXTENSION_NAME" /> бе добавено към Chromium</translation> +<translation id="608006075545470555">Добавяне на служебен потребителски профил към този браузър</translation> <translation id="608189560609172163">Chromium не можа да синхронизира данните ви поради грешка при влизането.</translation> <translation id="6096348254544841612">Персонализиране и управление на Chromium. Налице е актуализация.</translation> <translation id="6120345080069858279">Chromium ще запази тази парола в профила ви в Google. Няма да се налага да я помните.</translation> @@ -159,6 +161,7 @@ <translation id="6403826409255603130">Chromium е уеб браузър, който зарежда уеб страници и изпълнява приложения със светкавична скорост. Той е бърз, стабилен и лесен за употреба. Сърфирайте в мрежата по-безопасно с вградената защита на Chromium срещу злонамерен софтуер и фишинг.</translation> <translation id="6434250628340475518">Система Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium ще се рестартира след 1 секунда}other{Chromium ще се рестартира след # секунди}}</translation> +<translation id="6464340581899189425">Ако имате няколко профила в Google, можете да ги добавите към устройството си <ph name="DEVICE_TYPE" />. Профилите ви ще бъдат налични в браузъра Chromium, в Google Play Магазин и в други услуги, като например Gmail, Диск и YouTube. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation> <translation id="6475912303565314141">То също контролира коя страница се показва при стартиране на Chromium.</translation> <translation id="6510925080656968729">Деинсталиране на Chromium</translation> <translation id="6570579332384693436">С цел поправка на правописни грешки Chromium изпраща до Google текста, който въвеждате в текстовите полета</translation> @@ -213,6 +216,7 @@ <translation id="7857220146454061152">За да получавате бъдещи актуализации на Chromium, трябва да използвате OS X 10.11 или по-нова версия. Компютърът ви работи с OS X 10.10.</translation> <translation id="7867198900892795913">Chromium не можа да се актуализира до най-новата версия. Това означава, че пропускате нови функции и корекции за сигурност.</translation> <translation id="7898472181347242998">За да разберете дали устройството ви е актуално, отворете <ph name="LINK_BEGIN" />настройките на Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS не се изключи правилно.</translation> <translation id="7937630085815544518">Бяхте влезли в Chromium като <ph name="USER_EMAIL_ADDRESS" />. Моля, използвайте същия профил, за да влезете отново.</translation> <translation id="7975919845073681630">Тази инсталация на Chromium е алтернативна и не може да се зададе като браузър по подразбиране.</translation> <translation id="7979877361127045932">Скриване в менюто на Chromium</translation> @@ -227,6 +231,7 @@ <translation id="8417404458978023919">{0,plural, =1{Повторно стартиране на Chromium до 1 ден}other{Повторно стартиране на Chromium до # дни}}</translation> <translation id="8453117565092476964">Архивът на инсталационната програма е повреден или невалиден. Моля, изтеглете отново Chromium.</translation> <translation id="8493179195440786826">Chromium не е актуален</translation> +<translation id="8550334526674375523">Този служебен потребителски профил е изцяло отделен от личния ви.</translation> <translation id="8558383651099478961">Някой от родителите ви е изключил разрешенията за сайтове, приложения и разширения за Chromium. Добавянето на <ph name="EXTENSION_TYPE_PARAMETER" /> не е разрешено.</translation> <translation id="8568283329061645092">Chromium може да проверява паролите ви, когато влезете с профила си в Google</translation> <translation id="8586442755830160949">Авторски права <ph name="YEAR" /> Авторите на Chromium. Всички права запазени.</translation> @@ -243,6 +248,7 @@ <translation id="8907580949721785412">Chromium опитва да покаже паролите. За да разрешите това, въведете паролата си за Windows.</translation> <translation id="8941642502866065432">Chromium не може да се актуализира</translation> <translation id="8974095189086268230">Chrome OS е възможна благодарение на допълнителен <ph name="BEGIN_LINK_CROS_OSS" />софтуер с отворен код<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Добавяте служебен потребителски профил към този браузър и предоставяте на администратора си контрол само над него.</translation> <translation id="9019929317751753759">За да направим Chromium по-безопасен, деактивирахме следното разширение, което липсва от <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да е било добавено без ваше знание.</translation> <translation id="9089354809943900324">Chromium не е актуален</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium ще се стартира отново след 1 час}other{Chromium ще се стартира отново след # часа}}</translation> @@ -250,6 +256,7 @@ <translation id="911206726377975832">Да се изтрият ли и данните от сърфирането?</translation> <translation id="9158494823179993217">Системният ви администратор е конфигурирал Chromium да отваря алтернативен браузър за достъп до <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (входящ трафик за mDNS)</translation> +<translation id="9214764063801632699">Система Chromium OS</translation> <translation id="93478295209880648">Chromium може да не функционира правилно, тъй като вече не се поддържа под Windows XP и Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> изисква да прочетете и приемете следните Общи условия, преди да използвате това устройство. Те не разширяват, не променят, нито ограничават Условията на Chromium OS.</translation> <translation id="965162752251293939">Кой използва Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb index a42f9d1..b0fc4ed 100644 --- a/chrome/app/resources/chromium_strings_bs.xtb +++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">OS Chromium nije mogao sinkronizirati podatke vašeg računa jer su pojedinosti prijave na račun zastarjele.</translation> <translation id="2560420686485554789">Chromium treba pristup pohrani zbog preuzimanja fajlova</translation> <translation id="2572494885440352020">Chromium pomagač</translation> +<translation id="2583187216237139145">Sve podatke iz Chromiuma koji se generiraju tijekom upotrebe ovog profila (primjerice izradom oznaka, povijesti, zaporki i drugih postavki) može ukloniti administrator poslovnog profila. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS treba ponovo pokrenuti kako bi se primijenilo ažuriranje.</translation> <translation id="2615699638672665509">Ovo će računalo uskoro prestati primati ažuriranja Chromiuma jer njegov hardver više nije podržan.</translation> <translation id="2648074677641340862">Tokom instaliranja se pojavila greška operativnog sistema. Ponovo preuzmite Chromium.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Dostupna je nova verzija Chromiuma, brža nego ikad.</translation> <translation id="6063093106622310249">&Otvori u Chromiumu</translation> <translation id="6072279588547424923">Ekstenzija <ph name="EXTENSION_NAME" /> je dodana u Chromium</translation> +<translation id="608006075545470555">Dodavanje poslovnog profila u ovaj preglednik</translation> <translation id="608189560609172163">Chromium nije uspio sinhronizirati vaše podatke zbog greške prilikom prijave.</translation> <translation id="6096348254544841612">Prilagodite i kontrolirajte Chromium. Dostupno je ažuriranje.</translation> <translation id="6120345080069858279">Chromium će sačuvati ovu lozinku na vašem Google računu. Nećete je morati zapamtiti.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium je novi preglednik koji pokreće web stranice i aplikacije brzinom svjetlosti. On je brz, stabilan i jednostavan za upotrebu. Krećite se internetom u sigurnijem okruženju, zaštićeni od zlonamjernih softvera i krađe identiteta zahvaljujući elementima koji su ugrađeni u Chromium.</translation> <translation id="6434250628340475518">Sistem Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium će se ponovo pokrenuti za 1 sekundu}one{Chromium će se ponovo pokrenuti za # sekundu}few{Chromium će se ponovo pokrenuti za # sekunde}other{Chromium će se ponovo pokrenuti za # sekundi}}</translation> +<translation id="6464340581899189425">Ako imate više Google računa, možete ih dodati na uređaj <ph name="DEVICE_TYPE" />. Vaši će računi biti dostupni u pregledniku Chromium i u Trgovini Play te na uslugama kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Također kontrolira koja stranica se prikazuje kada pokrenete Chromium.</translation> <translation id="6510925080656968729">Deinstaliraj Chromium</translation> <translation id="6570579332384693436">Zbog ispravke pravopisnih grešaka, Chromium šalje Googleu tekst koji napišete u polja.</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Da primate buduća ažuriranja za Chromium, trebat će vam OS X 10.11 ili novija verzija. Ovaj računar koristi OS X 10.10.</translation> <translation id="7867198900892795913">Chromium nije ažuriran na najnoviju verziju tako da propuštate prednosti novih funkcija i ispravke sigurnosnih propusta.</translation> <translation id="7898472181347242998">Da vidite je li vaš uređaj ažuriran, idite u <ph name="LINK_BEGIN" />Postavke Chromium OS-a<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">OS Chromium nije se ispravno zatvorio.</translation> <translation id="7937630085815544518">Bili ste prijavljeni na Chrome kao <ph name="USER_EMAIL_ADDRESS" />. Koristite isti račun da se ponovo prijavite.</translation> <translation id="7975919845073681630">Ovo je sekundarno instaliranje Chromiuma i stoga on ne može biti vaš zadani preglednik.</translation> <translation id="7979877361127045932">Sakrij u meniju Chromiuma</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Ponovo pokreni Chromium u roku od jednog dana}one{Ponovo pokreni Chromium u roku od # dana}few{Ponovo pokreni Chromium u roku od # dana}other{Ponovo pokreni Chromium u roku od # dana}}</translation> <translation id="8453117565092476964">Arhiva alata za instaliranje je oštećena ili nevažeća. Ponovo preuzmite Chromium.</translation> <translation id="8493179195440786826">Chromium nije ažuriran</translation> +<translation id="8550334526674375523">Ovaj poslovni profil potpuno je odvojen od vašeg osobnog profila.</translation> <translation id="8558383651099478961">Tvoj roditelj je isključio "Odobrenja za web lokacije, aplikacije i ekstenzije" za Chromium. Dodavanje ove stavke (<ph name="EXTENSION_TYPE_PARAMETER" />) nije dozvoljeno.</translation> <translation id="8568283329061645092">Chromium može provjeravati vaše lozinke kada se prijavljujete putem Google računa</translation> <translation id="8586442755830160949">Autorska prava <ph name="YEAR" /> Autori Chromiuma. Sva prava zadržana.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium pokušava prikazati lozinke. Upišite Windows lozinku da ovo omogućite.</translation> <translation id="8941642502866065432">Nije moguće ažurirati Chromium</translation> <translation id="8974095189086268230">Chromium OS omogućava dodatni <ph name="BEGIN_LINK_CROS_OSS" />softver otvorenog koda<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj preglednik i administratoru dodjeljujete kontrolu samo nad poslovnim profilom.</translation> <translation id="9019929317751753759">Kako bi Chromium bio sigurniji, onemogućili smo sljedeću ekstenziju koja nije navedena na stranici <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i koja je dodana bez vašeg znanja.</translation> <translation id="9089354809943900324">Chromium nije ažuriran</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium će se ponovo pokrenuti za jedan sat}one{Chromium će se ponovo pokrenuti za # sat}few{Chromium će se ponovo pokrenuti za # sata}other{Chromium će se ponovo pokrenuti za # sati}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Također izbrisati podatke pregledanja?</translation> <translation id="9158494823179993217">Vaš administrator sistema je konfigurirao Chromium da otvori alternativni preglednik za pristup URL-u<ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">OS Chromium</translation> <translation id="93478295209880648">Chromium možda neće ispravno raditi jer više nije podržan na sistemima Windows XP ili Windows Vista</translation> <translation id="95514773681268843">Domena <ph name="DOMAIN" /> zahtijeva da prije korištenja uređaja pročitate i prihvatite sljedeće Uslove korištenja usluge. Ovi uslovi ne predstavljaju dodatak, izmjenu ili ograničenje uslova za Chromium OS.</translation> <translation id="965162752251293939">Ko koristi Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb index 4630261..4eb82b22 100644 --- a/chrome/app/resources/chromium_strings_ca.xtb +++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium OS no ha pogut sincronitzar les vostres dades perquè la informació d'inici de sessió del vostre compte no està actualitzada.</translation> <translation id="2560420686485554789">Chromium necessita accedir a l'emmagatzematge per baixar fitxers</translation> <translation id="2572494885440352020">Aplicació d'ajuda de Chromium</translation> +<translation id="2583187216237139145">L'administrador del perfil de treball pot suprimir qualsevol dada de Chromium que es generi durant l'ús d'aquest perfil (com ara les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració que s'hagin creat). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Cal reiniciar Chromium OS per aplicar l'actualització.</translation> <translation id="2615699638672665509">Aquest ordinador aviat deixarà de rebre actualitzacions de Chromium perquè el seu maquinari ja no s'admet.</translation> <translation id="2648074677641340862">S'ha produït un error en el sistema operatiu durant la instal·lació. Torneu a baixar Chromium.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Hi ha disponible una versió nova de Chromium, i és més ràpida que mai.</translation> <translation id="6063093106622310249">&Obre a Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> s'ha afegit a Chromium</translation> +<translation id="608006075545470555">Afegeix un perfil de treball a aquest navegador</translation> <translation id="608189560609172163">Chromium no ha pogut sincronitzar les dades a causa d'un error amb l'inici de sessió.</translation> <translation id="6096348254544841612">Personalitza i controla Chromium. Hi ha una actualització disponible.</translation> <translation id="6120345080069858279">Chromium desarà aquesta contrasenya al Compte de Google. No caldrà que la recordis.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium és un navegador web que executa les pàgines web i les aplicacions a gran velocitat. És ràpid, estable i fàcil d'utilitzar. Navegueu per Internet amb més seguretat amb protecció inserida a Chromium contra el programari maliciós i contra la pesca de credencials.</translation> <translation id="6434250628340475518">Sistema Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium es reiniciarà d'aquí a 1 segon}other{Chromium es reiniciarà d'aquí a # segons}}</translation> +<translation id="6464340581899189425">Si tens diversos Comptes de Google, pots afegir-los al teu <ph name="DEVICE_TYPE" />. Estaran disponibles al navegador Chromium i a Play Store, i també en serveis com ara Gmail, Drive i YouTube. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="6475912303565314141">També controla la pàgina que es mostra quan inicieu Chromium.</translation> <translation id="6510925080656968729">Desinstal·la Chromium</translation> <translation id="6570579332384693436">Per corregir els errors d'ortografia, Chromium envia a Google el que escrius als camps de text</translation> @@ -219,6 +222,7 @@ <translation id="7857220146454061152">Per obtenir actualitzacions de Chromium en un futur, necessitaràs OS X 10.11 o una versió posterior. Aquest ordinador utilitza OS X 10.10.</translation> <translation id="7867198900892795913">Chromium no s'ha pogut actualitzar a la darrera versió, així que no pots gaudir de les noves funcions ni de les correccions de seguretat.</translation> <translation id="7898472181347242998">Per veure si el dispositiu està actualitzat, ves a la <ph name="LINK_BEGIN" />configuració de Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS no s'ha tancat correctament.</translation> <translation id="7937630085815544518">Teníeu la sessió iniciada a Chromium com a <ph name="USER_EMAIL_ADDRESS" />. Utilitzeu el mateix compte per tornar a iniciar-hi la sessió.</translation> <translation id="7975919845073681630">Aquesta és una instal·lació secundària de Chromium i no pot definir-se com a navegador predeterminat.</translation> <translation id="7979877361127045932">Amaga al menú de Chromium</translation> @@ -233,6 +237,7 @@ <translation id="8417404458978023919">{0,plural, =1{Reinicia Chromium en 1 dia}other{Reinicia Chromium en # dies}}</translation> <translation id="8453117565092476964">L'arxiu d'instal·lació està malmès o no és vàlid. Torneu a baixar Chromium.</translation> <translation id="8493179195440786826">Chromium no està actualitzat</translation> +<translation id="8550334526674375523">Aquest perfil de treball és completament independent del teu perfil personal.</translation> <translation id="8558383651099478961">Els teus pares han desactivat Permisos per a llocs web, aplicacions i extensions en relació amb Chromium. No es permet afegir aquesta <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Chromium pot comprovar les teves contrasenyes quan inicies la sessió amb el Compte de Google</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Els autors de Chromium. Tots els drets reservats.</translation> @@ -249,6 +254,7 @@ <translation id="8907580949721785412">Chromium està provant de mostrar contrasenyes. Escriviu la vostra contrasenya de Windows per permetre-ho.</translation> <translation id="8941642502866065432">Chromium no es pot actualitzar</translation> <translation id="8974095189086268230">Chromium OS és possible gràcies a <ph name="BEGIN_LINK_CROS_OSS" />programari addicional de codi obert<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Estàs afegint un perfil de treball a aquest navegador i donant control al teu administrador únicament sobre el perfil de treball.</translation> <translation id="9019929317751753759">Per tal que Chromium sigui més segur, hem desactivat algunes de les extensions que no figuren a <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i que és possible que s'hagin afegit sense que ho sapigueu.</translation> <translation id="9089354809943900324">Chromium no està actualitzat</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium es reiniciarà d'aquí a 1 hora}other{Chromium es reiniciarà d'aquí a # hores}}</translation> @@ -256,6 +262,7 @@ <translation id="911206726377975832">També voleu suprimir les dades de navegació?</translation> <translation id="9158494823179993217">L'administrador del sistema ha configurat Chromium perquè obri un navegador alternatiu per accedir a <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Sistema Chromium OS</translation> <translation id="93478295209880648">Pot ser que Chromium no funcioni correctament perquè ja no és compatible amb Windows XP ni Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> exigeix que llegiu i accepteu els Termes i condicions següents abans no utilitzeu el dispositiu. Aquestes condicions no amplien, modifiquen ni restringeixen les condicions de Chromium OS.</translation> <translation id="965162752251293939">Qui està utilitzant Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index 8b75431..3892454 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium OS kunne ikke synkronisere dine data, fordi loginoplysningerne til din konto er forældede.</translation> <translation id="2560420686485554789">Chromium skal have lageradgang for at downloade filer</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Alle Chromium-data, der genereres ved brug af denne profil (f.eks. oprettelse af bogmærker, historik, adgangskoder og andre indstillinger) kan fjernes af arbejdsprofilens administrator. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS skal genstartes, før opdateringen kan anvendes.</translation> <translation id="2615699638672665509">Denne computer vil snart stoppe med at modtage Chromium-opdateringer, fordi dens hardware ikke understøttes længere.</translation> <translation id="2648074677641340862">Der opstod en fejl i operativsystemet under installationen. Download Chromium igen.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Der findes en ny version af Chromium, som er hurtigere end nogensinde før.</translation> <translation id="6063093106622310249">Åbn i Chr&omium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> er føjet til Chromium</translation> +<translation id="608006075545470555">Føj arbejdsprofilen til denne browser</translation> <translation id="608189560609172163">Chromium kunne ikke synkronisere dine data på grund af en loginfejl.</translation> <translation id="6096348254544841612">Tilpas og administrer Chromium. Der er en tilgængelig opdatering.</translation> <translation id="6120345080069858279">Chromium gemmer denne adgangskode på din Google-konto. Du behøver ikke at huske den.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium er en webbrowser, der kører websider og apps med lynets hast. Den er hurtig, stabil og brugervenlig. Beskyttelse mod malware og phishing er indbygget i Chromium, så du kan søge mere sikkert på internettet.</translation> <translation id="6434250628340475518">Chromium OS-system</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium genstarter om 1 sekund}one{Chromium genstarter om # sekund}other{Chromium genstarter om # sekunder}}</translation> +<translation id="6464340581899189425">Hvis du har flere Google-konti, kan du føje dem til din <ph name="DEVICE_TYPE" />. Dine konti vil være tilgængelige i Chromium-browseren og Play Butik samt tjenester som f.eks. Gmail, Drev og YouTube.<ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Den styrer også, hvilken side der vises, når du åbner Chromium.</translation> <translation id="6510925080656968729">Afinstaller Chromium</translation> <translation id="6570579332384693436">Chromium sender den tekst, du skriver i tekstfelter, til Google for at rette stavefejl</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Hvis du vil have Chromium-opdateringer i fremtiden, skal du have OS X 10.11 eller nyere. Denne computer kører OS X 10.10.</translation> <translation id="7867198900892795913">Chromium kunne ikke opdatere til den nyeste version, så du går glip af nye funktioner og sikkerhedsrettelser.</translation> <translation id="7898472181347242998">Du kan se, om en enhed er opdateret, ved at gå til <ph name="LINK_BEGIN" />indstillingerne for Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS blev ikke lukket korrekt ned.</translation> <translation id="7937630085815544518">Du loggede ind på Chromium som <ph name="USER_EMAIL_ADDRESS" />. Brug den samme konto til at logge ind igen.</translation> <translation id="7975919845073681630">Dette er en sekundær installation af Chromium, og den kan ikke gøres til din standardbrowser.</translation> <translation id="7979877361127045932">Skjul i Chromium-menuen</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Genstart Chromium inden for en dag}one{Genstart Chromium inden for # dag}other{Genstart Chromium inden for # dag}}</translation> <translation id="8453117565092476964">Installationsarkivet er beskadiget eller ugyldigt. Download Chromium igen.</translation> <translation id="8493179195440786826">Chromium er forældet</translation> +<translation id="8550334526674375523">Denne arbejdsprofil er totalt adskilt fra din personlige profile.</translation> <translation id="8558383651099478961">Din forælder har deaktiveret "Tilladelser til websites, apps og udvidelser" for Chromium. Det er ikke tilladt at tilføje denne <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Chromium kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Forfatterne bag Chromium. Alle rettigheder forbeholdes.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium forsøger at vise adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation> <translation id="8941642502866065432">Chromium kunne ikke opdateres</translation> <translation id="8974095189086268230">Chromium OS er realiseret af yderligere <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Du er ved at føje en arbejdsprofil til denne browser, og du giver kun din administrator kontrol over arbejdsprofilen.</translation> <translation id="9019929317751753759">For at gøre Chromium mere sikker har vi deaktiveret følgende udvidelser, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation> <translation id="9089354809943900324">Chromium er forældet</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium genstarter om en time}one{Chromium genstarter om # time}other{Chromium genstarter om # timer}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Slet også dine browserdata?</translation> <translation id="9158494823179993217">Din systemadministrator har konfigureret Chromium til at åbne en anden browser for at få adgang til <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS-system</translation> <translation id="93478295209880648">Chromium fungerer muligvis ikke korrekt på grund af manglende understøttelse i Windows XP og Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> kræver, at du læser og accepterer følgende servicevilkår, inden du bruger denne enhed. Disse vilkår udvider, ændrer eller begrænser på ingen måde vilkårene for Chromium OS.</translation> <translation id="965162752251293939">Hvem bruger Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index 4d9e539a2..6d48c4d 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Το Chromium OS δεν μπόρεσε να συγχρονίσει τα δεδομένα σας, επειδή τα στοιχεία σύνδεσης στο λογαριασμό σας δεν είναι ενημερωμένα.</translation> <translation id="2560420686485554789">Το Chromium χρειάζεται πρόσβαση στον αποθηκευτικό χώρο για τη λήψη αρχείων</translation> <translation id="2572494885440352020">Πρόγραμμα βοήθειας Chromium</translation> +<translation id="2583187216237139145">Τυχόν δεδομένα Chromium που δημιουργούνται κατά τη χρήση αυτού του προφίλ (όπως η δημιουργία σελιδοδεικτών, ιστορικού, κωδικών πρόσβασης και άλλων ρυθμίσεων) μπορούν να καταργηθούν από τον διαχειριστή του προφίλ εργασίας. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Για να εφαρμοστεί η ενημέρωση, πρέπει να γίνει επανεκκίνηση του Chromium OS.</translation> <translation id="2615699638672665509">Αυτός ο υπολογιστής θα σταματήσει σύντομα να λαμβάνει ενημερώσεις για το Chromium, επειδή το υλικό του δεν υποστηρίζεται πλέον.</translation> <translation id="2648074677641340862">Παρουσιάστηκε σφάλμα στο λειτουργικό σύστημα κατά την εγκατάσταση. Κατεβάστε το Chromium ξανά.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Υπάρχει μια νέα έκδοση του Chromium και είναι ταχύτερη από ποτέ.</translation> <translation id="6063093106622310249">&Άνοιγμα στο Chromium</translation> <translation id="6072279588547424923">Η επέκταση <ph name="EXTENSION_NAME" /> έχει προστεθεί στο Chromium</translation> +<translation id="608006075545470555">Προσθήκη προφίλ εργασίας σε αυτό το πρόγραμμα περιήγησης</translation> <translation id="608189560609172163">Το Chromium δεν κατάφερε να συγχρονίσει τα δεδομένα σας λόγω σφάλματος κατά τη σύνδεση.</translation> <translation id="6096348254544841612">Προσαρμόστε και ελέγξτε το Chromium. Υπάρχει διαθέσιμη ενημέρωση.</translation> <translation id="6120345080069858279">Το Chromium θα αποθηκεύσει αυτόν τον κωδικό πρόσβασης στον Λογαριασμό σας Google. Δεν χρειάζεται να τον απομνημονεύσετε.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Το Chromium είναι ένα πρόγραμμα περιήγησης ιστού που εκτελεί εφαρμογές και ιστοσελίδες με απίστευτη ταχύτητα. Είναι γρήγορο, σταθερό και εύχρηστο. Περιηγηθείτε στον ιστό με μεγαλύτερη ασφάλεια με την ενσωματωμένη προστασία από κακόβουλα προγράμματα και ηλεκτρονικό "ψάρεμα" (phishing).</translation> <translation id="6434250628340475518">Σύστημα Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Θα γίνει επανεκκίνηση του Chromium σε 1 δευτερόλεπτο}other{Θα γίνει επανεκκίνηση του Chromium σε # δευτερόλεπτα}}</translation> +<translation id="6464340581899189425">Εάν έχετε πολλούς Λογαριασμούς Google, μπορείτε να τους προσθέσετε στη συσκευή <ph name="DEVICE_TYPE" />. Οι λογαριασμοί σας θα είναι διαθέσιμοι στο πρόγραμμα περιήγησης Chromium και το Play Store, καθώς και σε υπηρεσίες όπως το Gmail, το Drive και το YouTube.<ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Επίσης, ελέγχει τη σελίδα που εμφανίζεται κατά την εκκίνηση του Chromium.</translation> <translation id="6510925080656968729">Απεγκατάσταση Chromium</translation> <translation id="6570579332384693436">Για τη διόρθωση ορθογραφικών λαθών, το Chromium στέλνει το κείμενο που πληκτρολογείτε σε πεδία κειμένου στο Google</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Για τη λήψη των μελλοντικών ενημερώσεων του Chromium, θα χρειαστείτε το OS X 10.11 ή νεότερη έκδοση. Αυτός ο υπολογιστής χρησιμοποιεί το OS X 10.10.</translation> <translation id="7867198900892795913">Δεν ήταν δυνατή η ενημέρωση του Chromium στην τελευταία έκδοση και έτσι δεν θα έχετε πρόσβαση στις νέες λειτουργίες και στις επιδιορθώσεις ασφαλείας.</translation> <translation id="7898472181347242998">Για να διαπιστώσετε εάν η συσκευή σας είναι ενημερωμένη, μεταβείτε στις <ph name="LINK_BEGIN" />Ρυθμίσεις του Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Ο τερματισμός λειτουργίας του Chromium OS δεν ολοκληρώθηκε σωστά.</translation> <translation id="7937630085815544518">Συνδεθήκατε στο Chromium ως <ph name="USER_EMAIL_ADDRESS" />. Χρησιμοποιήστε τον ίδιο λογαριασμό για να συνδεθείτε ξανά.</translation> <translation id="7975919845073681630">Αυτή είναι μια δευτερεύουσα εγκατάσταση του Chromium και δεν μπορεί να γίνει το προεπιλεγμένο πρόγραμμα περιήγησης.</translation> <translation id="7979877361127045932">Απόκρυψη από το μενού του Chromium</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Επανεκκίνηση του Chromium σε μία ημέρα}other{Επανεκκίνηση του Chromium σε # ημέρες}}</translation> <translation id="8453117565092476964">Το αρχείο του προγράμματος εγκατάστασης είναι κατεστραμμένο ή μη έγκυρο. Κατεβάστε το Chromium ξανά.</translation> <translation id="8493179195440786826">Το Chromium δεν είναι ενημερωμένο</translation> +<translation id="8550334526674375523">Αυτό το προφίλ εργασίας είναι εντελώς ξεχωριστό από το προσωπικό προφίλ σας.</translation> <translation id="8558383651099478961">Ο γονέας σου απενεργοποίησε την επιλογή "Άδειες για ιστοτόπους, εφαρμογές και επεκτάσεις" για το Chromium. Η προσθήκη του στοιχείου <ph name="EXTENSION_TYPE_PARAMETER" /> δεν επιτρέπεται.</translation> <translation id="8568283329061645092">Το Chromium μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν συνδέεστε με τον Λογαριασμό σας Google.</translation> <translation id="8586442755830160949">Πνευματικά δικαιώματα <ph name="YEAR" /> Οι συντάκτες του Chromium. Με επιφύλαξη παντός δικαιώματος.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Το Chromium προσπαθεί να εμφανίσει τους κωδικούς πρόσβασης. Πληκτρολογήστε τον κωδικό πρόσβασής σας Windows για να το επιτρέψετε αυτό.</translation> <translation id="8941642502866065432">Δεν είναι δυνατή η ενημέρωση του Chromium</translation> <translation id="8974095189086268230">Το Chromium OS υλοποιήθηκε με τη βοήθεια επιπλέον <ph name="BEGIN_LINK_CROS_OSS" />λογισμικού ανοιχτού κώδικα<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Προσθέτετε ένα προφίλ εργασίας σε αυτό το πρόγραμμα περιήγησης και παραχωρείτε τον έλεγχο στον διαχειριστή σας μόνο για το προφίλ εργασίας.</translation> <translation id="9019929317751753759">Για να κάνουμε το Chromium πιο ασφαλές, απενεργοποιήσαμε τις ακόλουθες επεκτάσεις που δεν αναφέρονται στο <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> και ενδέχεται να έχουν προστεθεί εν αγνοία σας.</translation> <translation id="9089354809943900324">Το Chromium δεν είναι ενημερωμένο</translation> <translation id="9093206154853821181">{0,plural, =1{Η επανεκκίνηση του Chromium θα γίνει σε μία ώρα}other{Η επανεκκίνηση του Chromium θα γίνει σε # ώρες}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Να γίνει διαγραφή και των δεδομένων περιήγησης;</translation> <translation id="9158494823179993217">Ο διαχειριστής συστήματος έχει διαμορφώσει το Chromium έτσι ώστε να ανοίγει άλλο πρόγραμμα περιήγησης για την πρόσβαση στη διεύθυνση <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Σύστημα Chromium OS</translation> <translation id="93478295209880648">Το Chromium μπορεί να μην λειτουργεί σωστά, επειδή δεν υποστηρίζεται πια σε Windows XP και Windows Vista</translation> <translation id="95514773681268843">Το <ph name="DOMAIN" /> απαιτεί να διαβάσετε και να αποδεχτείτε τους ακόλουθους Όρους Παροχής Υπηρεσιών πριν από τη χρήση αυτής της συσκευής. Οι συγκεκριμένοι όροι δεν επεκτείνουν, τροποποιούν ή περιορίζουν τους όρους του Chromium OS.</translation> <translation id="965162752251293939">Ποιος χρησιμοποιεί το Chromium;</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index 7aa1b99..057147c8 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS could not sync your data because your account sign-in details are out of date.</translation> <translation id="2560420686485554789">Chromium needs storage access to download files</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Any Chromium data that is generated during the use of this profile (such as the creation of bookmarks, history, passwords and other settings) can be removed by the work profile administrator. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS needs to be restarted to apply the update.</translation> <translation id="2615699638672665509">This computer will soon stop receiving Chromium updates because its hardware is no longer supported.</translation> <translation id="2648074677641340862">An operating system error occurred during installation. Please download Chromium again.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">There's a new version of Google Chrome available and it's faster than ever.</translation> <translation id="6063093106622310249">&Open in Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> has been added to Chromium</translation> +<translation id="608006075545470555">Add work profile to this browser</translation> <translation id="608189560609172163">Chromium could not sync your data due to an error signing in.</translation> <translation id="6096348254544841612">Customise and control Chromium. Update is available.</translation> <translation id="6120345080069858279">Chromium will save this password in your Google Account. You won’t have to remember it.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium is a web browser that runs webpages and applications with lightning speed. It's fast, stable, and easy to use. Browse the web more safely with malware and phishing protection built into Chromium.</translation> <translation id="6434250628340475518">Chromium OS System</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium will restart in 1 second}other{Chromium will restart in # seconds}}</translation> +<translation id="6464340581899189425">If you have multiple Google Accounts, you can add them to your <ph name="DEVICE_TYPE" />. Your accounts will be available in the Chromium browser and Play Store, as well as services like Gmail, Drive and YouTube.<ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation> <translation id="6475912303565314141">It also controls what page is shown when you start Chromium.</translation> <translation id="6510925080656968729">Uninstall Chromium</translation> <translation id="6570579332384693436">To fix spelling errors, Chromium sends the text that you type in text fields to Google</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">To get future Chromium updates, you'll need OS X 10.11 or later. This computer is using OS X 10.10.</translation> <translation id="7867198900892795913">Chromium couldn't update to the latest version, so you're missing out on new features and security fixes.</translation> <translation id="7898472181347242998">To see if your device is up to date, go to <ph name="LINK_BEGIN" />Chromium OS Settings<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS didn't shut down correctly.</translation> <translation id="7937630085815544518">You were signed in to Chromium as <ph name="USER_EMAIL_ADDRESS" />. Please use the same account to sign in again.</translation> <translation id="7975919845073681630">This is a secondary installation of Chromium, and cannot be made your default browser.</translation> <translation id="7979877361127045932">Hide in Chromium menu</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Relaunch Chromium within a day}other{Relaunch Chromium within # days}}</translation> <translation id="8453117565092476964">The installer archive is corrupted or invalid. Please download Chromium again.</translation> <translation id="8493179195440786826">Chromium is Out of Date</translation> +<translation id="8550334526674375523">This work profile is completely separate from your personal profile.</translation> <translation id="8558383651099478961">Your parent has turned off 'Permissions for sites, apps and extensions' for Chromium. Adding this <ph name="EXTENSION_TYPE_PARAMETER" /> is not allowed.</translation> <translation id="8568283329061645092">Chromium can check your passwords when you sign in with your Google Account</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium is trying to show passwords. Type your Windows password to allow this.</translation> <translation id="8941642502866065432">Can't update Chromium</translation> <translation id="8974095189086268230">Chromium OS is made possible by additional <ph name="BEGIN_LINK_CROS_OSS" />open source software<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">You are adding a work profile to this browser and giving your administrator control over just the work profile.</translation> <translation id="9019929317751753759">To make Chromium safer, we disabled the following extension that isn't listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> and may have been added without your knowledge.</translation> <translation id="9089354809943900324">Chromium is out of date</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium will relaunch in an hour}other{Chromium will relaunch in # hours}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Also delete your browsing data?</translation> <translation id="9158494823179993217">Your system administrator has configured Chromium to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS system</translation> <translation id="93478295209880648">Chromium may not function correctly because it is no longer supported on Windows XP or Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> requires that you read and accept the following Terms of Service before using this device. These terms do not expand, modify or limit the Chromium OS Terms.</translation> <translation id="965162752251293939">Who's using Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb index f949abe..7e56651 100644 --- a/chrome/app/resources/chromium_strings_et.xtb +++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium OS ei saanud andmeid sünkroonida, sest teie konto sisselogimisandmed on aegunud.</translation> <translation id="2560420686485554789">Chromium vajab failide allalaadimiseks juurdepääsu salvestusruumile</translation> <translation id="2572494885440352020">Chromiumi abiline</translation> +<translation id="2583187216237139145">Kõik Chromiumi andmed, mis luuakse selle profiili kasutamise ajal (nt järjehoidjad, ajalugu, paroolid ja muud seaded), saab tööprofiili administraator eemaldada. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS tuleb värskenduse rakendamiseks taaskäivitada.</translation> <translation id="2615699638672665509">See arvuti ei saa peagi enam Chromiumi värskendusi, kuna selle riistvara ei toetata enam.</translation> <translation id="2648074677641340862">Installimisel ilmnes operatsioonisüsteemi viga. Laadige Chromium uuesti alla.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Saadaval on Chromiumi uus versioon ja see on kiirem kui kunagi varem.</translation> <translation id="6063093106622310249">&Ava Chromiumis</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> on Chromiumi lisatud</translation> +<translation id="608006075545470555">Tööprofiili lisamine sellesse brauserisse</translation> <translation id="608189560609172163">Chromium ei saanud sisselogimisvea tõttu teie andmeid sünkroonida.</translation> <translation id="6096348254544841612">Kohandage ja juhtige Chromiumi. Saadaval on värskendus.</translation> <translation id="6120345080069858279">Chromium salvestab selle parooli teie Google'i kontole. Te ei pea seda meeles pidama.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium on veebibrauser, mis avab veebilehti ja rakendusi välgukiirusel. See on kiire, stabiilne ja hõlpsasti kasutatav. Sirvige veebi turvalisemalt tänu Chromiumi sisseehitatud pahavara- ja andmepüügikaitsele.</translation> <translation id="6434250628340475518">Chromium OS-i süsteem</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium taaskäivitub 1 sekundi pärast}other{Chromium taaskäivitub # sekundi pärast}}</translation> +<translation id="6464340581899189425">Kui teil on mitu Google'i kontot, saate need lisada oma seadmesse <ph name="DEVICE_TYPE" />. Teie kontod on saadaval Chromiumi brauseris, Play poes ning teenustes, nagu Gmail, Drive ja YouTube. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Lisaks juhib see seda, mis leht kuvatakse Chromiumi käivitamisel.</translation> <translation id="6510925080656968729">Desinstalli Chromium</translation> <translation id="6570579332384693436">Õigekirjavigade parandamiseks saadab Chromium teie tekstiväljadel sisestatud teksti Google'ile</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Chromiumi tulevaste värskenduste saamiseks on teil vaja operatsioonisüsteemi OS X 10.11 või uuemat versiooni. See arvuti kasutab operatsioonisüsteemi OS X 10.10.</translation> <translation id="7867198900892795913">Chromiumi ei saanud uusimale versioonile värskendada, mistõttu jääte ilma uutest funktsioonidest ja turvaparandustest.</translation> <translation id="7898472181347242998">Kui soovite teada saada, kas teie seade on ajakohane, avage <ph name="LINK_BEGIN" />Chromium OS-i seaded<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS ei sulgunud õigesti.</translation> <translation id="7937630085815544518">Olite Chromiumisse sisse logitud kasutajana <ph name="USER_EMAIL_ADDRESS" />. Kasutage uuesti sisselogimiseks sama kontot.</translation> <translation id="7975919845073681630">See on Chromiumi sekundaarne install ja seda ei saa määrata vaikebrauseriks.</translation> <translation id="7979877361127045932">Chromiumi menüüs peitmine</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Käivitage Chromium uuesti päeva jooksul}other{Käivitage Chromium uuesti # päeva jooksul}}</translation> <translation id="8453117565092476964">Installeri arhiiv on rikutud või kehtetu. Laadige Chromium uuesti alla.</translation> <translation id="8493179195440786826">Chromium on aegunud</translation> +<translation id="8550334526674375523">See tööprofiil on teie isiklikust profiilist täielikult eraldi.</translation> <translation id="8558383651099478961">Sinu vanem lülitas valiku „Saitide, rakenduste ja laienduste load” Chromiumi puhul välja. Laienduse <ph name="EXTENSION_TYPE_PARAMETER" /> lubamine on keelatud.</translation> <translation id="8568283329061645092">Chromium saab teie paroole kontrollida siis, kui logite sisse oma Google'i kontoga</translation> <translation id="8586442755830160949">Autoriõigus <ph name="YEAR" /> The Chromium Authors. Kõik õigused on kaitstud.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium proovib kuvada paroole. Selle lubamiseks sisestage Windowsi parool.</translation> <translation id="8941642502866065432">Chromiumi ei saa värskendada</translation> <translation id="8974095189086268230">Chromium OS-i aluseks on täiendav <ph name="BEGIN_LINK_CROS_OSS" />avatud lähtekoodiga tarkvara<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Lisate sellesse brauserisse tööprofiili ja annate administraatorile kontrolli vaid oma tööprofiili üle.</translation> <translation id="9019929317751753759">Chromiumi turvalisemaks muutmiseks keelasime järgmise laienduse, mida ei leidu veebipoes <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja mis võidi lisada teie teadmata.</translation> <translation id="9089354809943900324">Chromium on aegunud</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium käivitatakse uuesti tunni aja pärast}other{Chromium käivitatakse uuesti # tunni pärast}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Kas kustutada ka teie sirvimisandmed?</translation> <translation id="9158494823179993217">Teie süsteemiadministraator on konfigureerinud Chromiumi avama alternatiivset brauserit, et saada juurdepääs lehele <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS-i süsteem</translation> <translation id="93478295209880648">Chromium ei pruugi õigesti töötada, kuna seda ei toetata enam Windows XP-s ega Windows Vistas</translation> <translation id="95514773681268843">Domeen <ph name="DOMAIN" /> nõuab, et loete enne selle seadme kasutamist läbi järgmised teenusetingimused ja nõustute nendega. Need tingimused ei laienda, muuda ega piira Chromium OS-i tingimusi.</translation> <translation id="965162752251293939">Kes kasutab Chromiumi?</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index 02f58cb..5deb3543 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium-käyttöjärjestelmä ei voi synkronoida tietoja, sillä tilin kirjautumistiedot ovat vanhentuneet.</translation> <translation id="2560420686485554789">Chromium tarvitsee tallennustilan käyttöoikeuden tiedostojen lataamiseen.</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Työprofiilin järjestelmänvalvoja voi poistaa tämän profiilin käytön aikana luotua Chromium-dataa (esim. kirjanmerkit, historia, salasanat ja muut asetukset). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium-käyttöjärjestelmä täytyy käynnistää uudelleen, jotta päivitys voidaan ottaa käyttöön.</translation> <translation id="2615699638672665509">Tämän tietokoneen Chromium-päivitykset päättyvät pian, sillä sen laitteistoa ei enää tueta.</translation> <translation id="2648074677641340862">Asennuksessa ilmeni käyttöjärjestelmävirhe. Lataa Chromium uudelleen.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Chromiumista on saatavilla uusi versio, joka on entistäkin nopeampi.</translation> <translation id="6063093106622310249">&Avaa Chromiumissa</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> on lisätty Chromiumiin</translation> +<translation id="608006075545470555">Lisää työprofiili tähän selaimeen</translation> <translation id="608189560609172163">Chromium ei voinut synkronoida tietoja kirjautumisvirheen vuoksi.</translation> <translation id="6096348254544841612">Muokkaa ja hallinnoi Chromiumia. Päivitys on saatavilla.</translation> <translation id="6120345080069858279">Chromium tallentaa tämän salasanan Google-tilillesi. Sinun ei tarvitse muistaa sitä.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium on selain, jolla verkkosivut ja sovellukset toimivat salamannopeasti. Se on nopea, vakaa ja helppokäyttöinen. Chromiumin sisäänrakennettu haittaohjelma- ja tietojenkalastelusuojaus tekevät verkkoselauksesta turvallisempaa.</translation> <translation id="6434250628340475518">Chromium-käyttöjärjestelmä</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium käynnistyy uudelleen 1 sekunnin kuluttua}other{Chromium käynnistyy uudelleen # sekunnin kuluttua}}</translation> +<translation id="6464340581899189425">Jos sinulla on useita Google-tilejä, voit lisätä ne laitteellesi (<ph name="DEVICE_TYPE" />). Tilisi ovat käytettävissä Chromium-selaimella ja Play Kaupassa sekä Gmailin, Driven ja YouTuben kaltaisissa palveluissa.<ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Määrittää myös Chromiumin aloitussivun.</translation> <translation id="6510925080656968729">Poista Chromium</translation> <translation id="6570579332384693436">Chromium lähettää kenttiin kirjoittamasi tekstin Googlelle oikeinkirjoitusvirheiden korjaamiseksi.</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Jotta saat tulevia Chromiumin päivityksiä, sinulla on oltava OS X 10.11 tai uudempi. Tietokoneen käyttöjärjestelmä on OS X 10.10.</translation> <translation id="7867198900892795913">Chromiumia ei voitu päivittää uusimpaan versioon, joten sinulta puuttuu joitakin uusia ominaisuuksia ja tietoturvakorjauksia.</translation> <translation id="7898472181347242998">Tarkista <ph name="LINK_BEGIN" />Chromium-käyttöjärjestelmän asetuksista<ph name="LINK_END" />, onko laitteesi ajan tasalla</translation> +<translation id="7907774600618164274">Chromium-käyttöjärjestelmä ei sulkeutunut oikein.</translation> <translation id="7937630085815544518">Chromiumiin kirjautunut käyttäjä: <ph name="USER_EMAIL_ADDRESS" />. Kirjaudu uudelleen sisään samalla tilillä.</translation> <translation id="7975919845073681630">Tämä on Chromiumin toissijainen asennus, eikä sitä voi asettaa oletusselaimeksi.</translation> <translation id="7979877361127045932">Piilota Chromium-valikossa</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Käynnistä Chromium uudelleen vuorokauden kuluessa}other{Käynnistä Chromium uudelleen # vuorokauden kuluessa}}</translation> <translation id="8453117565092476964">Asennusarkisto on virheellinen. Lataa Chromium uudelleen.</translation> <translation id="8493179195440786826">Chromium on vanhentunut</translation> +<translation id="8550334526674375523">Tämä työprofiili on täysin erillinen henkilökohtaisesta profiilistasi.</translation> <translation id="8558383651099478961">Vanhempasi ovat laittaneet Chromiumin sivustojen, sovellusten ja laajennusten käyttöluvat pois päältä. Lisäämistä (<ph name="EXTENSION_TYPE_PARAMETER" />) ei sallita.</translation> <translation id="8568283329061645092">Chromium voi tarkistaa salasanasi, kun kirjaudut sisään Google-tililläsi</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Kaikki oikeudet pidätetään.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium yrittää näyttää salasanat. Salli tämä kirjoittamalla Windows-salasanasi.</translation> <translation id="8941642502866065432">Chromiumin päivitys epäonnistui</translation> <translation id="8974095189086268230">Chromium-käyttöjärjestelmän ovat tehneet mahdolliseksi muut <ph name="BEGIN_LINK_CROS_OSS" />avoimen lähdekoodin ohjelmistot<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Olet lisäämässä työprofiilia tähän selaimeen ja antamassa järjestelmänvalvojalle oikeuden hallita pelkkää työprofiilia.</translation> <translation id="9019929317751753759">Paransimme Chromiumin turvallisuutta poistamalla käytöstä sovelluksia, joita <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ei tarjoa ja jotka on voitu lisätä ilman lupaasi.</translation> <translation id="9089354809943900324">Chromium on vanhentunut</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium käynnistetään uudelleen tunnin kuluttua}other{Chromium käynnistetään uudelleen # tunnin kuluttua}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Poistetaanko myös selailutiedot?</translation> <translation id="9158494823179993217">Järjestelmänvalvojasi on määrittänyt Chromiumin avaamaan toisen selaimen, jolla <ph name="TARGET_URL_HOSTNAME" /> avataan.</translation> <translation id="9190841055450128916">Chromium (saapuva mDNS)</translation> +<translation id="9214764063801632699">Chromium-käyttöjärjestelmä</translation> <translation id="93478295209880648">Chromium ei välttämättä toimi oikein, koska se ei enää tue Windows XP:tä tai Windows Vistaa.</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> edellyttää, että luet ja hyväksyt seuraavat käyttöehdot ennen tämän laitteen käyttöä. Nämä ehdot eivät laajenna, muokkaa tai rajoita Chromium-käyttöliittymän ehtoja.</translation> <translation id="965162752251293939">Kuka käyttää Chromiumia?</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb index 965f0cfd..a1a1444 100644 --- a/chrome/app/resources/chromium_strings_fil.xtb +++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Hindi ma-sync ng Chromium OS ang iyong data dahil hindi napapanahon ang mga detalye sa pag-sign in sa iyong account.</translation> <translation id="2560420686485554789">Kailangan ng Chromium ang access sa storage upang maka-download ng mga file</translation> <translation id="2572494885440352020">Helper ng Chromium</translation> +<translation id="2583187216237139145">Puwedeng alisin ng administrator ng profile sa trabaho ang anumang data ng Chromium na nabuo sa panahon ng paggamit ng profile na ito (gaya ng paggawa ng mga bookmark, history, mga password, at iba pang setting). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Kailangang ma-restart ang Chromium OS upang mailapat ang update.</translation> <translation id="2615699638672665509">Malapit nang hindi makatanggap ng mga update sa Chromium ang computer na ito dahil hindi na sinusuportahan ang hardware nito.</translation> <translation id="2648074677641340862">May naganap na error sa operating system sa panahon ng pag-install. Mangyaring i-download muli ang Chromium.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">May available na bagong bersyon ng Chromium, at mas mabilis ito kaysa sa dati.</translation> <translation id="6063093106622310249">&Buksan sa Chromium</translation> <translation id="6072279588547424923">Naidagdag na ang <ph name="EXTENSION_NAME" /> sa Chromium</translation> +<translation id="608006075545470555">Magdagdag ng Profile sa Trabaho sa browser na ito</translation> <translation id="608189560609172163">Hindi mai-sync ng Chromium ang iyong data dahil sa isang error sa pagsa-sign in.</translation> <translation id="6096348254544841612">I-customize at kontrolin ang Chromium. May available na update.</translation> <translation id="6120345080069858279">Ise-save ng Chromium ang password na ito sa iyong Google Account. Hindi mo na ito kailangang tandaan.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Ang Chromium ay isang web browser na nagpapatakbo ng mga webpage at application sa bilis ng kidlat. Ito ay mabilis, maaasahan, at madaling gamitin. Mas maingat na mag-browse sa web gamit ang proteksyon ng Chromium laban sa malware at phishing.</translation> <translation id="6434250628340475518">Chromium OS System</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Magre-restart ang Chromium pagkalipas ng 1 segundo}one{Magre-restart ang Chromium pagkalipas ng # segundo}other{Magre-restart ang Chromium pagkalipas ng # na segundo}}</translation> +<translation id="6464340581899189425">Kung marami kang Google Account, puwede mong idagdag ang mga ito sa iyong <ph name="DEVICE_TYPE" />. Magiging available ang iyong mga account sa Chromium browser at Play Store, kasama ang mga serbisyo tulad ng Gmail, Drive, at YouTube.<ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Kinokontrol din nito kung anong pahina ang ipinapakita kapag sinimulan mo ang Chromium.</translation> <translation id="6510925080656968729">I-uninstall ang Chromium</translation> <translation id="6570579332384693436">Para maayos ang mga error sa pagbabaybay, ipinapadala ng Chromium sa Google ang text na na-type mo sa mga text field</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Para makatanggap ng mga update sa Chromium sa hinaharap, kakailanganin mo ng OS X 10.11 o mas bago. Gumagamit ang computer na ito ng OS X 10.10.</translation> <translation id="7867198900892795913">Hindi ma-update ang Chromium sa pinakabagong bersyon, kaya may napapalampas kang mga bagong feature at pag-aayos sa seguridad.</translation> <translation id="7898472181347242998">Para makita kung up to date ang iyong device, pumunta sa <ph name="LINK_BEGIN" />Mga Setting ng Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Hindi nag-shut down nang tama ang Chromium OS.</translation> <translation id="7937630085815544518">Naka-sign in ka sa Chromium bilang <ph name="USER_EMAIL_ADDRESS" />. Pakigamit ang parehong account upang mag-sign in muli.</translation> <translation id="7975919845073681630">Pangalawang pag-install ito ng Chromium at hindi ito maaaring gawing iyong default na browser.</translation> <translation id="7979877361127045932">Itago sa menu ng Chromium</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Muling ilunsad ang Chromium sa loob ng isang araw}one{Muling ilunsad ang Chromium sa loob ng # araw}other{Muling ilunsad ang Chromium sa loob ng # na araw}}</translation> <translation id="8453117565092476964">Sira o di-wasto ang archive ng installer. Mangyaring i-download muli ang Chromium.</translation> <translation id="8493179195440786826">Luma na ang Chromium</translation> +<translation id="8550334526674375523">Ang profile sa trabaho na ito ay ganap na hiwalay sa iyong personal na profile.</translation> <translation id="8558383651099478961">Na-off ng iyong magulang ang "Mga pahintulot para sa mga site, app, at extension" para sa Chromium. Hindi pinapayagang idagdag ang <ph name="EXTENSION_TYPE_PARAMETER" /> na ito.</translation> <translation id="8568283329061645092">Masusuri ng Chromium ang iyong mga password kapag nag-sign in ka sa Google Account mo</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Ang Mga May-akda ng Chromium. Nakalaan ang lahat ng karapatan.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Sinusubukan ng Chromium na ipakita ang mga password. I-type ang password sa Windows upang payagan ito.</translation> <translation id="8941642502866065432">Hindi ma-update ang Chromium</translation> <translation id="8974095189086268230">Nagiging posible ang Chromium OS sa pamamagitan ng karagdagang <ph name="BEGIN_LINK_CROS_OSS" />open source na software<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Nagdaragdag ka ng profile sa trabaho sa browser na ito at binibigyan mo ang iyong administrator ng kontrol sa profile sa trabaho lang.</translation> <translation id="9019929317751753759">Upang mas gawing ligtas ang Chromium, na-disable namin ang sumusunod na extension na hindi nakalista sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na maaaring naidagdag nang hindi mo nalalalaman.</translation> <translation id="9089354809943900324">Luma na ang Chromium</translation> <translation id="9093206154853821181">{0,plural, =1{Muling ilulunsad ang Chromium sa loob ng isang oras}one{Muling ilulunsad ang Chromium sa loob ng # oras}other{Muling ilulunsad ang Chromium sa loob ng # na oras}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Tatanggalin din ang iyong data sa pag-browse?</translation> <translation id="9158494823179993217">Na-configure ng iyong system administrator ang Chromium na magbukas ng alternatibong browser para i-access ang <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS system</translation> <translation id="93478295209880648">Maaaring hindi gumana nang maayos ang Chromium dahil hindi na ito sinusuportahan sa Windows XP o Windows Vista</translation> <translation id="95514773681268843">Kinakailangan ng <ph name="DOMAIN" /> na basahin mo at tanggapin ang sumusunod na Mga Tuntunin ng Serbisyo bago gamitin ang device na ito. Hindi pinapalawak, binabago o nililimitahan ng mga tuntuning ito ang Mga Tuntunin ng Chromium OS.</translation> <translation id="965162752251293939">Sino ang gumagamit ng Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb index c53a771..36417cf 100644 --- a/chrome/app/resources/chromium_strings_hi.xtb +++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">क्रोमियम OS आपका डेटा सिंक नहीं कर सका क्योंकि आपका खाता साइन इन विवरण की समय सीमा पूरी हो चुकी है.</translation> <translation id="2560420686485554789">फ़ाइलें डाउनलोड करने के लिए क्रोमियम को मेमोरी एक्सेस की ज़रूरत होगी</translation> <translation id="2572494885440352020">क्रोमियम सहायक</translation> +<translation id="2583187216237139145">इस प्रोफ़ाइल का इस्तेमाल करने के दौरान Chromium में जनरेट किए गए किसी भी तरह के डेटा (जैसे, बुकमार्क, इतिहास, पासवर्ड, और दूसरी सेटिंग) को वर्क प्रोफ़ाइल का एडमिन हटा सकता है. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">अपडेट को लागू करने के लिए क्रोमियम OS को रीस्टार्ट करने की ज़रूरत होती है.</translation> <translation id="2615699638672665509">यह कंप्यूटर जल्दी ही क्रोमियम अपडेट पाना बंद कर देगा क्योंकि अब इसका हार्डवेयर समर्थित नहीं है.</translation> <translation id="2648074677641340862">इंस्टॉलेशन के दौरान ऑपरेटिंग सिस्टम गड़बड़ी हुई. कृपया क्रोमियम फिर से डाउनलोड करें.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">क्रोमियम का एक नया वर्शन उपलब्ध है और यह पहले से ज़्यादा तेज़ है.</translation> <translation id="6063093106622310249">&क्रोमियम में खोलें</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> को क्रोमियम में जोड़ा गया</translation> +<translation id="608006075545470555">इस ब्राउज़र में वर्क प्रोफ़ाइल जोड़ें</translation> <translation id="608189560609172163">प्रवेश करने में किसी गड़बड़ी के कारण क्रोमियम आपका डेटा समन्वयित नहीं कर सका.</translation> <translation id="6096348254544841612">क्रोमियम को पसंद के मुताबिक बनाएं और नियंत्रित करें. अपडेट उपलब्ध है.</translation> <translation id="6120345080069858279">क्रोमियम इस पासवर्ड को आपके Google खाते में सेव कर लेगा. आपको इसे याद रखने की ज़रूरत नहीं है.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">क्रोमियम वेब ब्राउज़र है जो बहुत तेज़ी से वेबपेज और ऐप्लिकेशन चलाता है. यह तेज़, स्थिर, और उपयोग में आसान है. क्रोमियम में अंतर्निहित मैलवेयर और फ़ीशिंग सुरक्षा के साथ ज़्यादा आसानी से वेब ब्राउज़ करें.</translation> <translation id="6434250628340475518">क्रोमियम OS सिस्टम</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{क्रोमियम 1 सेकंड में रीस्टार्ट होगा}one{क्रोमियम # सेकंड में रीस्टार्ट होगा}other{क्रोमियम # सेकंड में रीस्टार्ट होगा}}</translation> +<translation id="6464340581899189425">अगर आपके पास एक से ज़्यादा Google खाते हैं, तो आप उन्हें अपने <ph name="DEVICE_TYPE" /> में जोड़ सकते हैं. आपके खाते, Chromium ब्राउज़र और 'Play स्टोर' के साथ-साथ Gmail, Drive, और YouTube जैसी अन्य सेवाओं पर भी उपलब्ध रहेंगे.<ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation> <translation id="6475912303565314141">इससे यह भी नियंत्रित होता है कि जब आप क्रोमियम प्रारंभ करते हैं तब कौन सा पृष्ठ दिखाया जाए.</translation> <translation id="6510925080656968729">क्रोमियम को अनइंस्टाल करें</translation> <translation id="6570579332384693436">स्पेलिंग की गड़बड़ियां ठीक करने के लिए, क्रोमियम लेख फ़ील्ड में आपके लिखे गए लेख को Google को भेजती है</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">आगे भी क्रोमियम के अपडेट पाते रहने के लिए, आपके कंप्यूटर में OS X 10.11 या इसके बाद का वर्शन होना चाहिए. इस कंप्यूटर में OS X 10.10 का इस्तेमाल किया जा रहा है.</translation> <translation id="7867198900892795913">क्रोमियम सबसे नए वर्शन में अपडेट नहीं कर सका, इसलिए आपको नई सुविधाएं और सुरक्षा सुधार नहीं मिल रहे हैं.</translation> <translation id="7898472181347242998">यह देखने के लिए कि आपका डिवाइस अपडेट है या नहीं <ph name="LINK_BEGIN" />क्रोमियम OS सेटिंग<ph name="LINK_END" /> पर जाएं</translation> +<translation id="7907774600618164274">Chromium OS ठीक से शट डाउन नहीं हुआ.</translation> <translation id="7937630085815544518">आपने क्रोमियम में <ph name="USER_EMAIL_ADDRESS" /> के रूप में साइन इन किया था. फिर से साइन इन करने के लिए कृपया उसी खाते का इस्तेमाल करें.</translation> <translation id="7975919845073681630">यह क्रोमियम का द्वितीयक इंस्टॉलेशन है और इसे आपका डिफ़ॉल्ट ब्राउज़र नहीं बनाया जा सकता.</translation> <translation id="7979877361127045932">क्रोमियम मेन्यू में छिपाएं</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{एक दिन के अंदर क्रोमियम को फिर से लॉन्च करें}one{# दिनों के अंदर क्रोमियम को फिर से लॉन्च करें}other{# दिनों के अंदर क्रोमियम को फिर से लॉन्च करें}}</translation> <translation id="8453117565092476964">इंस्टॉलर संग्रह खराब या अमान्य है. कृपया क्रोमियम फिर से डाउनलोड करें.</translation> <translation id="8493179195440786826">क्रोमियम पुराना हो गया है</translation> +<translation id="8550334526674375523">यह वर्क प्रोफ़ाइल आपकी निजी प्रोफ़ाइल से पूरी तरह अलग है.</translation> <translation id="8558383651099478961">आपके अभिभावक ने क्रोमियम के लिए, "साइट, ऐप्लिकेशन, और एक्सटेंशन के लिए अनुमतियां" को बंद कर दिया है. इस <ph name="EXTENSION_TYPE_PARAMETER" /> को जोड़ने की अनुमति नहीं है.</translation> <translation id="8568283329061645092">आप जब अपने Google खाते से साइन इन करते हैं, तब क्रोमियम आपके पासवर्ड की जांच कर सकता है</translation> <translation id="8586442755830160949">कॉपीराइट <ph name="YEAR" /> The Chromium Authors. सर्वाधिकार सुरक्षित.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium पासवर्ड दिखाने का प्रयास कर रहा है. इसे अनुमति देने के लिए अपना Windows पासवर्ड लिखें.</translation> <translation id="8941642502866065432">क्रोमियम को अपडेट नहीं किया जा सकता</translation> <translation id="8974095189086268230">क्रोमियम OS अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />खुला स्रोत सॉफ़्टवेयर<ph name="END_LINK_CROS_OSS" /> द्वारा संभव बनाया गया है.</translation> +<translation id="8986207147630327271">आप इस ब्राउज़र में एक वर्क प्रोफ़ाइल जोड़ रहे हैं और अपने एडमिन को सिर्फ़ उस प्रोफ़ाइल को कंट्रोल करने का अधिकार दे रहे हैं.</translation> <translation id="9019929317751753759">क्रोमियम को ज़्यादा सुरक्षित बनाने के लिए, हमने निम्न एक्सटेंशन को अक्षम कर दिया है जो <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं है और आपकी जानकारी के बिना जोड़ा गया हो सकता है.</translation> <translation id="9089354809943900324">क्रोमियम पुराना हो गया है</translation> <translation id="9093206154853821181">{0,plural, =1{क्रोमियम एक घंटे के अंदर फिर से लॉन्च होगा}one{क्रोमियम # घंटे के अंदर फिर से लॉन्च होगा}other{क्रोमियम # घंटे के अंदर फिर से लॉन्च होगा}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">अपने ब्राउज़िंग डेटा भी मिटाएं?</translation> <translation id="9158494823179993217">आपके सिस्टम एडमिन ने 'क्रोमियम' को इस तरह कॉन्फ़िगर किया है कि वह <ph name="TARGET_URL_HOSTNAME" /> को ऐक्सेस करने के लिए कोई दूसरा ब्राउज़र खोले.</translation> <translation id="9190841055450128916">क्रोमियम (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS सिस्टम</translation> <translation id="93478295209880648">हो सकता है क्रोमियम सही तरीके से काम ना करें क्योंकि अब वह Windows XP या Windows Vista पर काम नहीं करता है</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> चाहता है कि इस डिवाइस का उपयोग करने से पहले आप इन सेवा की शर्तों को पढ़ लें और उन्हें स्वीकार करें. ये शर्तें क्रोमियम OS शर्तों का विस्तार, उनमें बदलाव या उन्हें सीमित नहीं करतीं.</translation> <translation id="965162752251293939">क्रोमियम को कौन इस्तेमाल कर रहा है?</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb index 8e24dcd..5ba7db1 100644 --- a/chrome/app/resources/chromium_strings_hr.xtb +++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">OS Chromium nije mogao sinkronizirati podatke vašeg računa jer su pojedinosti prijave na račun zastarjele.</translation> <translation id="2560420686485554789">Chromium treba pristup pohrani radi preuzimanja datoteka</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Sve podatke iz Chromiuma koji se generiraju tijekom upotrebe ovog profila (primjerice izradom oznaka, povijesti, zaporki i drugih postavki) može ukloniti administrator poslovnog profila. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Potrebno je ponovo pokrenuti Chromium OS kako bi se ažuriranje primijenilo.</translation> <translation id="2615699638672665509">Ovo će računalo uskoro prestati primati ažuriranja Chromiuma jer njegov hardver više nije podržan.</translation> <translation id="2648074677641340862">Došlo je do pogreške operativnog sustava tijekom instalacije. Ponovo preuzmite Chromium.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Dostupna je nova verzija preglednika Chromium, brža no ikad.</translation> <translation id="6063093106622310249">&Otvori u Chromiumu</translation> <translation id="6072279588547424923">Proširenje <ph name="EXTENSION_NAME" /> dodano je u Chromium</translation> +<translation id="608006075545470555">Dodavanje poslovnog profila u ovaj preglednik</translation> <translation id="608189560609172163">Chromium nije mogao sinkronizirati vaše podatke zbog pogreške prilikom prijave.</translation> <translation id="6096348254544841612">Prilagodite i kontrolirajte Chromium. Dostupno je ažuriranje.</translation> <translation id="6120345080069858279">Chromium će spremiti tu zaporku na vaš Google račun. Ne morate je pamtiti.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium je web-preglednik koji munjevitom brzinom prikazuje web-stranice i aplikacije. Brz je, stabilan i jednostavan za upotrebu. Pregledavajte web sigurnije jer je zaštita od zlonamjernog softvera i krađe identiteta ugrađena u Chromium.</translation> <translation id="6434250628340475518">OS Chromium</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium će se ponovo pokrenuti za 1 sekundu}one{Chromium će se ponovo pokrenuti za # sekundu}few{Chromium će se ponovo pokrenuti za # sekunde}other{Chromium će se ponovo pokrenuti za # sekundi}}</translation> +<translation id="6464340581899189425">Ako imate više Google računa, možete ih dodati na uređaj <ph name="DEVICE_TYPE" />. Vaši će računi biti dostupni u pregledniku Chromium i u Trgovini Play te na uslugama kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Upravlja i time koja se stranica prikazuje prilikom pokretanja Chromiuma.</translation> <translation id="6510925080656968729">Deinstaliranje Chromiuma</translation> <translation id="6570579332384693436">Chromium Googleu šalje tekst koji utipkate u tekstualna polja kako bi ispravio pravopisne pogreške</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Da biste primali buduća Chromiumova ažuriranja, trebat će vam OS X 10.11 ili novija verzija. Na ovom se računalu upotrebljava OS X 10.10.</translation> <translation id="7867198900892795913">Chromium se nije mogao ažurirati na najnoviju verziju, tako da nemate nove značajke i sigurnosne popravke.</translation> <translation id="7898472181347242998">Ažurnost uređaja možete provjeriti u <ph name="LINK_BEGIN" />postavkama OS-a Chromium<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">OS Chromium nije se ispravno zatvorio.</translation> <translation id="7937630085815544518">Bili ste prijavljeni na Chromium kao <ph name="USER_EMAIL_ADDRESS" />. Prijavite se ponovo istim računom.</translation> <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromiuma, pa on ne može biti vaš zadani preglednik.</translation> <translation id="7979877361127045932">Sakrij u izborniku Chromiuma</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Ponovo pokrenite Chromium u roku od jednog dana}one{Ponovo pokrenite Chromium u roku od # dana}few{Ponovo pokrenite Chromium u roku od # dana}other{Ponovo pokrenite Chromium u roku od # dana}}</translation> <translation id="8453117565092476964">Arhiva programa za instalaciju oštećena je ili nevažeća. Ponovo preuzmite Chromium.</translation> <translation id="8493179195440786826">Chromium je zastario</translation> +<translation id="8550334526674375523">Ovaj poslovni profil potpuno je odvojen od vašeg osobnog profila.</translation> <translation id="8558383651099478961">Tvoj je roditelj isključio "Dopuštenja za web-lokacije, aplikacije i proširenja" za Chromium. Nije dopušteno dodati <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Chromium može provjeriti vaše zaporke kad se prijavite Google računom</translation> <translation id="8586442755830160949">Autorska prava <ph name="YEAR" />. Autori Chromiuma. Sva prava pridržana.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium pokušava prikazati zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation> <translation id="8941642502866065432">Nije moguće ažurirati Chromium</translation> <translation id="8974095189086268230">OS Chromium omogućuje dodatni <ph name="BEGIN_LINK_CROS_OSS" />softver utemeljen na otvorenom kôdu<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj preglednik i administratoru dodjeljujete kontrolu samo nad poslovnim profilom.</translation> <translation id="9019929317751753759">Kako bismo Chromium učinili sigurnijim, onemogućili smo sljedeće proširenje koje nije navedeno na stranici <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i možda je dodano bez vašeg znanja.</translation> <translation id="9089354809943900324">Chromium je zastario</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium će se ponovo pokrenuti za sat vremena}one{Chromium će se ponovo pokrenuti za # h}few{Chromium će se ponovo pokrenuti za # h}other{Chromium će se ponovo pokrenuti za # h}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Izbrisati i podatke o pregledavanju?</translation> <translation id="9158494823179993217">Vaš administrator sustava konfigurirao je Chromium tako da otvara zamjenski preglednik radi pristupa URL-u<ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">OS Chromium</translation> <translation id="93478295209880648">Chromium možda neće ispravno raditi jer više nije podržan na sustavima Windows XP i Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> zahtijeva da pročitate i prihvatite sljedeće Uvjete pružanja usluge prije upotrebe ovog uređaja. Ti uvjeti ne predstavljaju proširenje, izmjenu ili ograničenje Uvjeta OS-a Chromium.</translation> <translation id="965162752251293939">Tko upotrebljava Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index 6b452f09..8275199b 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">A Chromium OS nem tudta szinkronizálni az adatokat, mert a fiók bejelentkezési adatai elavultak.</translation> <translation id="2560420686485554789">A Chromiumnak tárhelyhozzáférésre van szüksége a fájlok letöltéséhez</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">A profil használata során generált összes Chromium-adatot (pl. könyvjelzőket, előzményeket, jelszavakat és egyéb beállításokat) eltávolíthatja a munkaprofil rendszergazdája. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">A frissítés alkalmazásához újra kell indítani a Chromium OS-t.</translation> <translation id="2615699638672665509">Mivel a hardver támogatása megszűnik, ez a számítógép hamarosan nem kap további Chromium-frissítéseket.</translation> <translation id="2648074677641340862">Az operációs rendszer hibát jelzett a telepítés során. Kérjük, töltse le újra a Chromiumot.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Elérhető a Chromium új verziója, amely minden korábbinál sokkal gyorsabb.</translation> <translation id="6063093106622310249">Megnyitás Chromiumban</translation> <translation id="6072279588547424923">A(z) <ph name="EXTENSION_NAME" /> hozzá lett adva a Chromiumhoz</translation> +<translation id="608006075545470555">Munkaprofil hozzáadása a böngészőhöz</translation> <translation id="608189560609172163">A Chromium egy bejelentkezési hiba miatt nem tudta szinkronizálni az adatokat.</translation> <translation id="6096348254544841612">A Chromium személyre szabása és vezérlése. Van rendelkezésre álló frissítés.</translation> <translation id="6120345080069858279">A Chromium ezt a jelszót Google-fiókjába menti. Nem kell megjegyeznie.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">A Chromium olyan böngésző, amely villámgyorsan futtatja a weboldalakat és az alkalmazásokat. Gyors, stabil és könnyen használható. A beépített, adathalászat és kártékony programok elleni védelemmel biztonságosabban böngészhet az interneten.</translation> <translation id="6434250628340475518">Chromium OS rendszer</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{A Chromium 1 másodpercen belül újraindul}other{A Chromium # másodpercen belül újraindul}}</translation> +<translation id="6464340581899189425">Ha több Google-fiókja is van, hozzáadhatja őket <ph name="DEVICE_TYPE" /> eszközéhez. Fiókjait használhatja majd a Chromium böngészőben és a Play Áruházban, valamint olyan szolgáltatásokban, mint például a Gmail, a Drive és a YouTube. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation> <translation id="6475912303565314141">Továbbá azt is szabályozza, hogy melyik oldal jelenik meg a Chromium indításakor.</translation> <translation id="6510925080656968729">Chromium eltávolítása</translation> <translation id="6570579332384693436">A nyelvtani hibák javítása érdekében a Chromium elküldi a szövegmezőkbe gépelt szöveget a Google-nak</translation> @@ -217,6 +220,7 @@ <translation id="7857220146454061152">Ha a jövőben Chromium-frissítéseket szeretne kapni, akkor az OS X 10.11-es vagy újabb verziójára lesz szüksége. Ezen a számítógépen az OS X 10.10 fut.</translation> <translation id="7867198900892795913">Nem sikerült a Chromium frissítése a legújabb verzióra, így Ön lemarad az új funkciókról és biztonsági javításokról.</translation> <translation id="7898472181347242998">Ha szeretné megtekinteni, hogy eszköze naprakész-e, lépjen a <ph name="LINK_BEGIN" />Chromium OS beállításaihoz<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">A Chromium OS nem megfelelően állt le.</translation> <translation id="7937630085815544518"><ph name="USER_EMAIL_ADDRESS" /> néven volt bejelentkezve a Chromiumba. Kérjük, ugyanazzal a fiókkal jelentkezzen be újra.</translation> <translation id="7975919845073681630">Ez a Chromium második telepítése, amelyet nem állíthat be az alapértelmezett böngészővé.</translation> <translation id="7979877361127045932">Elrejtés a Chromium-menüben</translation> @@ -231,6 +235,7 @@ <translation id="8417404458978023919">{0,plural, =1{A Chromiumot 1 napon belül újra kell indítani}other{A Chromiumot # napon belül újra kell indítani}}</translation> <translation id="8453117565092476964">A telepítő tömörített állománya megsérült vagy érvénytelen. Kérjük, töltse le újra a Chromium böngészőt.</translation> <translation id="8493179195440786826">A Chromium elavult</translation> +<translation id="8550334526674375523">Ez a munkaprofil teljesen el van választva a személyes profiljától.</translation> <translation id="8558383651099478961">Szülőd kikapcsolta a Chromium „Engedélyek webhelyek, alkalmazások és bővítmények számára” beállítását. A(z) <ph name="EXTENSION_TYPE_PARAMETER" /> nem telepíthető.</translation> <translation id="8568283329061645092">A Chromium ellenőrizni tudja a mentett jelszavakat, ha Ön bejelentkezik Google-fiókjával</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> – A Chromium szerzői. Minden jog fenntartva.</translation> @@ -247,6 +252,7 @@ <translation id="8907580949721785412">A Chromium megkísérli megjeleníteni a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation> <translation id="8941642502866065432">Nem sikerült a Chromium frissítése</translation> <translation id="8974095189086268230">A Chromium OS létrejöttéhez további <ph name="BEGIN_LINK_CROS_OSS" />nyílt forráskódú szoftverek<ph name="END_LINK_CROS_OSS" /> is hozzájárultak.</translation> +<translation id="8986207147630327271">Munkaprofilt ad hozzá ehhez a böngészőhöz, és csak a munkaprofil felett adja át az irányítást a rendszergazdának.</translation> <translation id="9019929317751753759">A Chromium biztonságosabbá tétele érdekében kikapcsoltuk a következő bővítményt, amely nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származik, és előfordulhat, hogy az Ön tudta nélkül lett telepítve.</translation> <translation id="9089354809943900324">A Chromium elavult</translation> <translation id="9093206154853821181">{0,plural, =1{A Chromium 1 órán belül újraindul}other{A Chromium # órán belül újraindul}}</translation> @@ -254,6 +260,7 @@ <translation id="911206726377975832">Törli a böngészési adatait is?</translation> <translation id="9158494823179993217">Rendszergazdája úgy állította be a Chromiumot, hogy másik böngészőt nyisson meg a(z) <ph name="TARGET_URL_HOSTNAME" /> eléréséhez.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS rendszer</translation> <translation id="93478295209880648">Előfordulhat, hogy a Chromium nem működik majd megfelelően, mert a továbbiakban már nem támogatja a következő rendszereket: Windows XP és Windows Vista</translation> <translation id="95514773681268843">A(z) <ph name="DOMAIN" /> megköveteli, hogy olvassa, majd fogadja el a következő Általános Szerződési Feltételeket, mielőtt használná ezt az eszközt. Ezek a feltételek nem bővítik, módosítják vagy korlátozzák a Chromium OS feltételeit.</translation> <translation id="965162752251293939">Ki használja a Chromiumot?</translation>
diff --git a/chrome/app/resources/chromium_strings_ka.xtb b/chrome/app/resources/chromium_strings_ka.xtb index 2ffe63a..16f034b 100644 --- a/chrome/app/resources/chromium_strings_ka.xtb +++ b/chrome/app/resources/chromium_strings_ka.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS-მა ვერ დაასინქრონა თქვენი მონაცემები, რადგან თქვენი ანგარიშის შესვლის დეტალები მოძველდა.</translation> <translation id="2560420686485554789">ფაილების ჩამოსატვირთად Chromium საჭიროებს მეხსიერებაზე წვდომას</translation> <translation id="2572494885440352020">Chromium-ის დამხმარე</translation> +<translation id="2583187216237139145">ამ პროფილის გამოყენებისას შექმნილი Chromium მონაცემების (მაგ., შექმნილი სანიშნეების, ისტორიის, პაროლებისა და სხვა პარამეტრების) ამოშლა შეუძლია სამსახურის პროფილის ადმინისტრატორს. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">განახლების მისასადაგებლად, Chromium OS უნდა გადაიტვირთოს.</translation> <translation id="2615699638672665509">ეს კომპიუტერი მალე შეწყვეტს Chromium-ის განახლებების მიღებას, რადგან მისი აპარატურა აღარ არის მხარდაჭერილი.</translation> <translation id="2648074677641340862">ინსტალაციის დროს ოპერაციული სისტემის შეცდომა მოხდა. ხელახლა ჩამოტვირთეთ Chromium.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">ხელმისაწვდომია Chromium-ის ახალი ვერსია, რომელიც უფრო სწრაფია.</translation> <translation id="6063093106622310249">Chromium-ში &გახსნა</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> დაემატა Chromium-ს</translation> +<translation id="608006075545470555">დაამატეთ სამსახურის პროფილი ამ ბრაუზერს</translation> <translation id="608189560609172163">შესვლასთან დაკავშირებული არსებული შეცდომის გამო, Chromium მა ვერ შეძლო თქვენი მონაცებების სინქრონიზაცია.</translation> <translation id="6096348254544841612">მოირგეთ და გააკონტროლეთ Chromium. ხელმისაწვდომია განახლება.</translation> <translation id="6120345080069858279">Chromium შეინახავს ამ პაროლს თქვენს Google ანგარიშში. მისი დამახსოვრება აუცილებელი არ არის.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium არის ვებ ბრაუზერი, რომელიც ვებგვერდებს და აპლიკაციებს ელვისებური სისწრაფით ხსნის. ის არის სწრაფი, სტაბილური და გამოსაყენებლად მარტივი. დაათვალიერეთ ვები უფრო უსაფრთხოდ Chromium-ში ჩაშენებული საზიანო პროგრამული უზრუნველყოფისა და თაღლითობისგან დაცვის საშუალებით.</translation> <translation id="6434250628340475518">Chromium OS სისტემა</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium გადაიტვირთება 1 წამში}other{Chromium გადაიტვირთება # წამში}}</translation> +<translation id="6464340581899189425">თუ რამდენიმე Google ანგარიში გაქვთ, შეგიძლიათ დაამატოთ ისინი თქვენს <ph name="DEVICE_TYPE" />-ს. თქვენი ანგარიშები ხელმისაწვდომი იქნება როგორც Chromium ბრაუზერსა და Play Store-ში, ისე ისეთ სერვისებში, როგორიცაა Gmail, Drive და YouTube. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation> <translation id="6475912303565314141">იგი ასევე აკონტროლებს, თუ რომელი გვერდი გამოჩნდება Chromium-ის გაშვებისას.</translation> <translation id="6510925080656968729">Chromium-ის დეინსტალაცია</translation> <translation id="6570579332384693436">მართლწერის შეცდომების გასასწორებლად, Chromium თქვენ მიერ ტექსტის ველში აკრეფილ ტექსტებს Google-ს უგზავნის</translation> @@ -221,6 +224,7 @@ <translation id="7857220146454061152">Chromium-ის მომავალი განახლებების მისაღებად დაგჭირდებათ OS X 10.11 ან უფრო ახალი ვერსია. ეს კომპიუტერი იყენებს OS X 10.10-ს.</translation> <translation id="7867198900892795913">Chromium ვერ განახლდა უახლეს ვერსიაზე, რომელსაც დამატებულ აქვს ახალი ფუნქციები და უსაფრთხოების სისტემის შესწორებები.</translation> <translation id="7898472181347242998">თქვენი მოწყობილობის განახლების სტატუსის სანახავად გადადით <ph name="LINK_BEGIN" />Chromium OS-ის პარამეტრებზე<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS სათანადოდ არ გაითიშა.</translation> <translation id="7937630085815544518">თქვენ შესული ხართ Chromium-ში როგორც <ph name="USER_EMAIL_ADDRESS" />. გთხოვთ გამოიყენოთ იგივე ანგარიში ხელახლა შესვლისას.</translation> <translation id="7975919845073681630">ეს Chromium-ის მეორადი ინსტალაცია არის და ნაგულისხმევ ბრაუზერად ის ვერ დაყენდება.</translation> <translation id="7979877361127045932">Chromium-ის მენიუში დამალვა</translation> @@ -235,6 +239,7 @@ <translation id="8417404458978023919">{0,plural, =1{ხელახლა გაუშვით Chromium დღის განმავლობაში}other{ხელახლა გაუშვით Chromium # დღის განმავლობაში}}</translation> <translation id="8453117565092476964">ინსტალაციის პროგრამის არქივი დაზიანებულია ან არასწორია. ხელახლა ჩამოტვირთეთ Chromium.</translation> <translation id="8493179195440786826">Chromium მოძველდა</translation> +<translation id="8550334526674375523">სამსახურის ეს პროფილი თქვენი პირადი პროფილისგან სრულიად დამოუკიდებლად ფუნქციონირებს.</translation> <translation id="8558383651099478961">თქვენმა მშობელმა გამორთო „ნებართვები საიტებისთვის, აპებისა და გაფართოებებისთვის“ Chromium-ისთვის. ეს <ph name="EXTENSION_TYPE_PARAMETER" /> ვერ დაემატება.</translation> <translation id="8568283329061645092">პაროლების Chromium-ის მეშვეობით შესამოწმებლად შედით სისტემაში თქვენი Google ანგარიშით</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. ყველა უფლება დაცულია.</translation> @@ -251,6 +256,7 @@ <translation id="8907580949721785412">Chromium ცდილობს პაროლების ჩვენებას. ჩაწერეთ თქვენი Windows-ის პაროლი ამის დასაშვებად.</translation> <translation id="8941642502866065432">Chromium-ის განახლება ვერ მოხერხდა</translation> <translation id="8974095189086268230">Chromium OS-ს უზრუნველყოფს დამატებითი <ph name="BEGIN_LINK_CROS_OSS" />ღია წყაროს პროგრამული უზრუნველყოფა<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">თქვენ აპირებთ, ამ ბრაუზერს სამსახურის პროფილი დაამატოთ, რითაც თქვენს ადმინისტრატორს კონტროლს მხოლოდ სამსახურის პროფილზე მიანიჭებთ.</translation> <translation id="9019929317751753759">Chromium-ის უსაფრთხოების გასაძლიერებლად, ჩვენ გავთიშეთ შემდეგი გაფართოება, რომელიც არ არის ხელმისაწვდომი <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />-ში და, შესაძლოა, თქვენი თანხმობის გარეშე დაემატა.</translation> <translation id="9089354809943900324">Chromium მოძველდა</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium ხელახლა გაეშვება 1 საათში}other{Chromium ხელახლა გაეშვება # საათში}}</translation> @@ -258,6 +264,7 @@ <translation id="911206726377975832">ასევე წაშალოთ თქვენი დათვალიერების მონაცემები?</translation> <translation id="9158494823179993217">თქვენი სისტემის ადმინისტრატორმა მოახდინა Chromium-ის კონფიგურაცია იმგვარად, რომ <ph name="TARGET_URL_HOSTNAME" />-ზე წვდომისთვის საჭიროა ალტერნატიული ბრაუზერის გახსნა.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS სისტემა</translation> <translation id="93478295209880648">Chromium-მა შეიძლება არასწორად იმუშაოს, რადგან ის აღარ არის მხარდაჭერილი Windows XP-სა და Windows Vista-ზე</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> მოითხოვს, რომ დაეთანხმოთ შემდეგ წესებს და პირობებს ამ მოწყობილობის გამოყენებამდე. ეს წესები არ წარმოადგენს Chromium OS-ის პირობების დამატებას, არ ცვლის და არ ზღუდავს მათ.</translation> <translation id="965162752251293939">ვინ იყენებს Chromium-ს?</translation>
diff --git a/chrome/app/resources/chromium_strings_lo.xtb b/chrome/app/resources/chromium_strings_lo.xtb index 5e2837c..d39d87ce 100644 --- a/chrome/app/resources/chromium_strings_lo.xtb +++ b/chrome/app/resources/chromium_strings_lo.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້ ເພາະວ່າລາຍລະອຽດການລົງຊື່ເຂົ້າບັນຊີຂອງທ່ານຫຼ້າສະໄໝແລ້ວ.</translation> <translation id="2560420686485554789">Chromium ຕ້ອງການເຂົ້າເຖິງບ່ອນເກັບຂໍ້ມູນເພື່ອດາວໂຫຼດໄຟລ໌</translation> <translation id="2572494885440352020">ຜູ້ຊ່ວຍ Chromium</translation> +<translation id="2583187216237139145">ຜູ້ເບິ່ງແຍງລະບົບໂປຣໄຟລ໌ບ່ອນເຮັດວຽກສາມາດລຶບຂໍ້ມູນ Chromium ໃດໆກໍຕາມທີ່ສ້າງຂຶ້ນໃນລະຫວ່າງການນຳໃຊ້ໂປຣໄຟລ໌ນີ້ (ເຊັ່ນ: ການສ້າງບຸກມາກ, ປະຫວັດ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆ) ອອກໄດ້. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">ຈຳເປັນຕ້ອງປິດແລ້ວເປີດ Chromium OS ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ.</translation> <translation id="2615699638672665509">ຄອມພິວເຕີນີ້ຈະຢຸດຮັບການອັບເດດ Chromium ໃນບໍ່ດົນນີ້ ເພາະວ່າຮາດແວຂອງມັນບໍ່ຮອງຮັບອີກ.</translation> <translation id="2648074677641340862">ເກີດຄວາມຜິດພາດດ້ານລະບົບປະຕິບັດການໃນລະຫວ່າງການຕິດຕັ້ງ. ກະລຸນາດາວໂຫຼດ Chromium ອີກ.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">ມີ Chromium ລຸ້ນໃໝ່ຢູ່, ແລະມັນປອດໄພກ່ວາຜ່ານມາ.</translation> <translation id="6063093106622310249">&ເປີດໃນ Chromium</translation> <translation id="6072279588547424923">ເພີ່ມ <ph name="EXTENSION_NAME" /> ໃສ່ Chromium ແລ້ວ</translation> +<translation id="608006075545470555">ເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກໃສ່ໂປຣແກຣມທ່ອງເວັບນີ້</translation> <translation id="608189560609172163">Chromium ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້ ເນື່ອງຈາກການລົງຊື່ເຂົ້າໃຊ້ຜິດພາດ.</translation> <translation id="6096348254544841612">ປັບແຕ່ງ ແລະ ຄວບຄຸມ Chromium. ມີການອັບເດດແລ້ວ</translation> <translation id="6120345080069858279">Chromium ຈະບັນທຶກລະຫັດຜ່ານນີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານ. ທ່ານຈະບໍ່ຈຳເປັນຕ້ອງຈື່ມັນ.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium ແມ່ນບຣາວເຊີເວັບທີ່ແລ່ນໜ້າເວັບ ແລະແອັບພລິເຄຊັນດ້ວຍຄວາມໄວແບບສາຍຟ້າແມັບ. ມັນໄວ, ໝັ້ນຄົງ, ແລະໃຊ້ງ່າຍ. ທ່ອງເວັບໄດ້ປອດໄພກ່ວາດ້ວຍການປົກປ້ອງມາລແວ ແລະພິຊຊິງທີ່ສ້າງຢູ່ໃນຕົວ Chromium.</translation> <translation id="6434250628340475518">ລະບົບປະຕິບັດການຂອງ Chromium</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium ຈະປິດແລ້ວເປີດໃໝ່ໃນ 1 ວິນາທີ}other{Chromium ຈະປິດແລ້ວເປີດໃໝ່ໃນ # ວິນາທີ}}</translation> +<translation id="6464340581899189425">ຖ້າທ່ານມີບັນຊີ Google ຫຼາຍບັນຊີ, ທ່ານສາມາດເພີ່ມພວກມັນໃສ່ <ph name="DEVICE_TYPE" /> ຂອງທ່ານໄດ້. ບັນຊີຂອງທ່ານຈະມີໃຫ້ນຳໃຊ້ໃນໂປຣແກຣມທ່ອງເວັບ Chromium ແລະ Play Store, ເຊັ່ນດຽວກັບການບໍລິການຕ່າງໆ ເຊັ່ນ: Gmail, Drive ແລະ YouTube.<ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation> <translation id="6475912303565314141">ມັນຍັງຄວບຄຸມວ່າຈະໃຫ້ສະແດງໜ້າໃດຂຶ້ນ ເມື່ອທ່ານເລີ່ມຕົ້ນເປີດ Chromium.</translation> <translation id="6510925080656968729">ຖອນຕິດຕັ້ງ Chromium</translation> <translation id="6570579332384693436">ເພື່ອແກ້ໄຂການສະກົດຄຳຜິດ, Chromium ສົ່ງຂໍ້ຄວາມທີ່ທ່ານພິມໃນຊ່ອງຂໍ້ຄວາມໃຫ້ Google</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">ເພື່ອຮັບການອັບເດດ Chromium ໃນອະນາຄົດ, ທ່ານຈະຈຳເປັນຕ້ອງມີ OS X 10.11 ຫຼື ໃໝ່ກວ່າ. ຄອມພິວເຕີນີ້ກຳລັງໃຊ້ OS X 10.10.</translation> <translation id="7867198900892795913">Chromium ບໍ່ສາມາດອັບເດດເປັນເວີຊັນຫຼ້າສຸດໄດ້, ສະນັ້ນທ່ານກຳລັງພາດຄຸນສົມບັດ ແລະ ການແກ້ໄຂດ້ານຄວາມປອດໄພໃໝ່ໆຢູ່.</translation> <translation id="7898472181347242998">ເພື່ອເບິ່ງວ່າອຸປະກອນຂອງທ່ານໃໝ່ຫຼ້າສຸດຫຼືບໍ່, ກະລຸນາໄປທີ່ <ph name="LINK_BEGIN" />ການຕັ້ງຄ່າ Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS ປິດຢ່າງບໍ່ຖືກຕ້ອງ.</translation> <translation id="7937630085815544518">ທ່ານໄດ້ລົງຊື່ເຂົ້າໃຊ້ Chromium ເປັນ <ph name="USER_EMAIL_ADDRESS" />. ກະລຸນາໃຊ້ບັນຊີດຽວກັນ ເພື່ອລົງຊື່ເຂົ້າໃຊ້ອີກ.</translation> <translation id="7975919845073681630">ນີ້ແມ່ນການຕິດຕັ້ງສຳຮອງຂອງ Chromium ແລະ ບໍ່ສາມາດຖືກຕັ້ງເປັນໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນໄດ້.</translation> <translation id="7979877361127045932">ເຊື່ອງຢູ່ໃນເມນູ Chromium</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{ເປີດໃຊ້ Chromium ຄືນໃໝ່ພາຍໃນໜຶ່ງມື້}other{ເປີດໃຊ້ Chromium ຄືນໃໝ່ພາຍໃນ # ມື້}}</translation> <translation id="8453117565092476964">ຄັງຕົວຕິດຕັ້ງຖືກເສຍຫາຍ ຫຼືໃຊ້ບໍ່ໄດ້. ກະລຸນາດາວໂຫຼດ Chromium ອີກ.</translation> <translation id="8493179195440786826">Chromium ຫຼ້າສະໄໝແລ້ວ</translation> +<translation id="8550334526674375523">ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກນີ້ແຍກກັນຢ່າງສິ້ນເຊີງຈາກໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານ.</translation> <translation id="8558383651099478961">ພໍ່ແມ່ຂອງທ່ານໄດ້ປິດ "ການອະນຸຍາດສຳລັບເວັບໄຊ, ແອັບ ແລະ ສ່ວນຂະຫຍາຍ" ສຳລັບ Chromium ແລ້ວ. ການເພີ່ມ <ph name="EXTENSION_TYPE_PARAMETER" /> ນີ້ບໍ່ໄດ້ຮັບອະນຸຍາດ.</translation> <translation id="8568283329061645092">Chromium ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້</translation> <translation id="8586442755830160949">ລິຂະສິດ <ph name="YEAR" /> ຜູ້ຂຽນ Chromium. ສະຫງວນລິຂະສິດ.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium ກໍາລັງພະຍາຍາມສະແດງລະຫັດຜ່ານ. ພິມລະຫັດຜ່ານ Windows ຂອງທ່ານ ເພື່ອອະນຸຍາດອັນນີ້.</translation> <translation id="8941642502866065432">ບໍ່ສາມາດອັບເດດ Chromium ໄດ້</translation> <translation id="8974095189086268230">Chromium OS ເຮັດໃຫ້ເປັນໄປໄດ້ໂດຍຊອບແວ <ph name="BEGIN_LINK_CROS_OSS" />open source<ph name="END_LINK_CROS_OSS" /> ເພີ່ມເຕີມ.</translation> +<translation id="8986207147630327271">ທ່ານກຳລັງເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກໃສ່ໂປຣແກຣມທ່ອງເວັບນີ້ ແລະ ໃຫ້ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານຄວບຄຸມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກດັ່ງກ່າວເທົ່ານັ້ນ.</translation> <translation id="9019929317751753759">ເພື່ອເຮັດໃຫ້ Chromium ປອດໄພຂຶ້ນ, ພວກເຮົາປິດໃຊ້ງານບາງສ່ວນການຕໍ່ເຂົ້າຫາ ທີ່ບໍ່ໄດ້ເຮັດເປັນລາຍການໄວ້ຢູ່ໃນ <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ແລະອາດຈະຖືກເອົາເພີ່ມເຂົ້າໂດຍທີ່ທ່ານບໍ່ຮູ້ຈັກ.</translation> <translation id="9089354809943900324">Chromium ຫຼ້າສະໄໝແລ້ວ</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium ຈະເປີດຄືນໃໝ່ໃນໜຶ່ງຊົ່ວໂມງ}other{Chromium ຈະເປີດຄືນໃໝ່ໃນ # ຊົ່ວໂມງ}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">ລຶບຂໍ້ມູນການທ່ອງເນັດຂອງທ່ານນໍາບໍ?</translation> <translation id="9158494823179993217">ຜູ້ເບິ່ງແຍງລະບົບໄດ້ກຳນົດຄ່າ Chromium ໃຫ້ເປີດໂປຣແກຣມທ່ອງເວັບສຳຮອງເພື່ອເຂົ້າເຖິງ <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">ລະບົບປະຕິບັດການຂອງ Chromium</translation> <translation id="93478295209880648">Chromium ອາດຈະບໍ່ເຮັດວຽກຢ່າງຖືກຕ້ອງ ເພາະວ່າມັນບໍ່ຖືກຮອງຮັບໃນ Windows XP ຫຼື Windows Vista ອີກຕໍ່ໄປ</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> ຮຽກຮ້ອງໃຫ້ທ່ານອ່ານ ແລະຍອມຮັບເງື່ອນໄຂການໃຫ້ບໍລິການຕໍ່ໄປນີ້ກ່ອນທີ່ຈະໃຊ້ອຸປະກອນນີ້. ເງື່ອນໄຂເຫຼົ່ານີ້ບໍ່ຂະຫຍາຍ, ດັດແປງ ຫຼືຈໍາກັດເງື່ອນໄຂກຳນົດຂອງ Chromium OS.</translation> <translation id="965162752251293939">ໃຜກຳລັງໃຊ້ Chromium)</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb index 2d22623..673a574 100644 --- a/chrome/app/resources/chromium_strings_lv.xtb +++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium OS nevarēja sinhronizēt jūsu datus, jo jūsu konta pierakstīšanās informācija ir novecojusi.</translation> <translation id="2560420686485554789">Pārlūkam Chromium ir nepieciešama piekļuve krātuvei, lai varētu lejupielādēt failus.</translation> <translation id="2572494885440352020">Chromium palīgs</translation> +<translation id="2583187216237139145">Darba profila administrators var noņemt šī profila lietošanas laikā ģenerētos Chromium datus (piemēram, grāmatzīmes, vēsturi, paroles un citus iestatījumus). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Lai lietotu atjauninājumu, operētājsistēma Chromium ir jārestartē.</translation> <translation id="2615699638672665509">Šis dators drīz vairs nesaņems Chromium atjauninājumus, jo tā aparatūra vairs netiek atbalstīta.</translation> <translation id="2648074677641340862">Instalācijas laikā radās operētājsistēmas kļūda. Lejupielādējiet Chromium vēlreiz.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Ir pieejama jauna Chromium versija, un tā ir ātrāka nekā jebkad agrāk.</translation> <translation id="6063093106622310249">&Atvērt pārlūkā Chromium</translation> <translation id="6072279588547424923">Paplašinājums <ph name="EXTENSION_NAME" /> ir pievienots pārlūkam Chromium</translation> +<translation id="608006075545470555">Darba profila pievienošana šai pārlūkprogrammai</translation> <translation id="608189560609172163">Chromium nevarēja sinhronizēt jūsu datus pierakstīšanās kļūdas dēļ.</translation> <translation id="6096348254544841612">Pielāgojiet un pārvaldiet pārlūku Chromium. Ir pieejams atjauninājums.</translation> <translation id="6120345080069858279">Pārlūks Chromium saglabās šo paroli jūsu Google kontā. To nav nepieciešams iegaumēt.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium ir tīmekļa pārlūks, kas darbina tīmekļa lapas un lietojumprogrammas zibenīgā ātrumā. Tas ir ātrs, stabils un ērti lietojams. Pārlūkojiet tīmekli vēl drošāk ar aizsardzību pret ļaunprātīgu programmatūru un pikšķerēšanu, kas iebūvēta pārlūkā Chromium.</translation> <translation id="6434250628340475518">Chromium OS sistēma</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Pārlūks Chromium tiks restartēts pēc 1 sekundes.}zero{Pārlūks Chromium tiks restartēts pēc # sekundēm.}one{Pārlūks Chromium tiks restartēts pēc # sekundes.}other{Pārlūks Chromium tiks restartēts pēc # sekundēm.}}</translation> +<translation id="6464340581899189425">Ja jums ir vairāki Google konti, varat tos pievienot, lai <ph name="DEVICE_TYPE" /> atcerētos tos visus. Jūsu konti būs pieejami pārlūkprogrammā Chromium un Play veikalā, kā arī tādos pakalpojumos kā Gmail, Disks un YouTube. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Tas nosaka arī to, kāda lapa tiks rādīta, kad atvērsiet pārlūku Chromium.</translation> <translation id="6510925080656968729">Atinstalēt Chromium</translation> <translation id="6570579332384693436">Lai izlabotu pareizrakstības kļūdas, Chromium nosūta teksta laukos ievadīto tekstu Google serveriem.</translation> @@ -218,6 +221,7 @@ <translation id="7857220146454061152">Lai varētu saņemt nākamos Chromium atjauninājumus, nepieciešama OS X 10.11 vai jaunāka versija. Šajā datorā tiek izmantota OS X 10.10 versija.</translation> <translation id="7867198900892795913">Nevarēja atjaunināt uz jaunāko Chromium versiju, tādēļ jūs nevarēsiet piekļūt jaunākajām funkcijām un drošības labojumiem.</translation> <translation id="7898472181347242998">Lai pārbaudītu, vai ierīce ir atjaunināta, pārejiet uz sadaļu <ph name="LINK_BEGIN" />Chromium OS iestatījumi<ph name="LINK_END" />.</translation> +<translation id="7907774600618164274">Chromium OS netika pareizi izslēgta.</translation> <translation id="7937630085815544518">Operētājsistēmā Chromium iepriekš pierakstījāties kā lietotājs <ph name="USER_EMAIL_ADDRESS" />. Lai pierakstītos vēlreiz, lūdzu, izmantojiet to pašu kontu.</translation> <translation id="7975919845073681630">Šī ir Chromium papildu instalācija, un to nevar izmantot kā noklusējuma pārlūku.</translation> <translation id="7979877361127045932">Paslēpt Chromium izvēlnē</translation> @@ -232,6 +236,7 @@ <translation id="8417404458978023919">{0,plural, =1{Restartējiet pārlūku Chromium vienas dienas laikā}zero{Restartējiet pārlūku Chromium # dienu laikā}one{Restartējiet pārlūku Chromium # dienas laikā}other{Restartējiet pārlūku Chromium # dienu laikā}}</translation> <translation id="8453117565092476964">Instalēšanas programmas arhīvs ir bojāts vai nav derīgs. Lejupielādējiet Chromium vēlreiz.</translation> <translation id="8493179195440786826">Chromium versija ir novecojusi</translation> +<translation id="8550334526674375523">Šis darba profils ir pilnīgi nesaistīts ar jūsu personīgo profilu.</translation> <translation id="8558383651099478961">Viens no jūsu vecākiem ir izslēdzis “Atļaujas vietnēm, lietotnēm un paplašinājumiem” pārlūkam Chromium. Nav atļauts pievienot šo: <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Pārlūkprogrammā Chromium var pārbaudīt jūsu paroles, ja esat pierakstījies savā Google kontā.</translation> <translation id="8586442755830160949">Autortiesības <ph name="YEAR" /> Chromium autori. Visas tiesības paturētas.</translation> @@ -248,6 +253,7 @@ <translation id="8907580949721785412">Chromium mēģina rādīt paroles. Lai to atļautu, ierakstiet savu Windows paroli.</translation> <translation id="8941642502866065432">Nevar atjaunināt Chromium</translation> <translation id="8974095189086268230">Chrome OS ir kļuvusi iespējama, pateicoties papildu <ph name="BEGIN_LINK_CROS_OSS" />atklātā pirmkoda programmatūrai<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Jūs pievienosiet šai pārlūkprogrammai darba profilu un piešķirsiet administratoram kontroli tikai pār darba profilu.</translation> <translation id="9019929317751753759">Lai uzlabotu Chromium drošību, mēs atspējojām tālāk norādīto paplašinājumu, kas nav norādīts vietnē <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> un, iespējams, tika pievienots, jums nezinot.</translation> <translation id="9089354809943900324">Chromium versija ir novecojusi.</translation> <translation id="9093206154853821181">{0,plural, =1{Pārlūks Chromium pēc stundas tiks restartēts}zero{Pārlūks Chromium pēc # stundām tiks restartēts}one{Pārlūks Chromium pēc # stundas tiks restartēts}other{Pārlūks Chromium pēc # stundām tiks restartēts}}</translation> @@ -255,6 +261,7 @@ <translation id="911206726377975832">Vai dzēst arī pārlūkošanas datus?</translation> <translation id="9158494823179993217">Sistēmas administrators ir konfigurējis Chromium, lai vietne <ph name="TARGET_URL_HOSTNAME" /> tiktu atvērta papildu pārlūkā.</translation> <translation id="9190841055450128916">Chromium (mDNS ienākošie savienojumi)</translation> +<translation id="9214764063801632699">Chromium OS sistēma</translation> <translation id="93478295209880648">Iespējams, Chromium nedarbosies pareizi, jo tas vairs netiek atbalstīts operētājsistēmās Windows XP un Windows Vista.</translation> <translation id="95514773681268843">Pirms šīs ierīces lietošanas jums ir jāizlasa un jāapstiprina tālāk sniegtie domēna <ph name="DOMAIN" /> pakalpojumu sniegšanas noteikumi. Šie noteikumi nepaplašina, nepārveido vai neierobežo operētājsistēmas Chromium OS noteikumus.</translation> <translation id="965162752251293939">Kas izmanto pārlūku Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb index d5e9af4..9e5da86 100644 --- a/chrome/app/resources/chromium_strings_mk.xtb +++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS не може да ги синхронизира вашите податоци бидејќи вашите информации за пријавување на сметката се застарени.</translation> <translation id="2560420686485554789">На Chromium му треба пристап до меморијата за да презема датотеки</translation> <translation id="2572494885440352020">Помошник на Chromium</translation> +<translation id="2583187216237139145">Податоците на Chromium што се генерирани при користењето на овој профил (како на пример, создавање обележувачи, историја, лозинки и други поставки) може да се отстранат од страна на администраторот на работниот профил. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Оперативниот систем Chromium треба да се рестартира за да се примени ажурирањето.</translation> <translation id="2615699638672665509">Компјутеров наскоро ќе престане да добива ажурирања за Chromium затоа што неговиот хардвер веќе не е поддржан.</translation> <translation id="2648074677641340862">Настана грешка на оперативен систем при инсталација. Преземете го Chromium повторно.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Достапна е нова верзија на Chromium и побрза е од кога било.</translation> <translation id="6063093106622310249">&Отвори во Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> беше додадена на Chromium</translation> +<translation id="608006075545470555">Додајте работен профил во овој прелистувач</translation> <translation id="608189560609172163">Chromium не може да ги синхронизира вашите податоци поради грешка во пријавувањето.</translation> <translation id="6096348254544841612">Приспособете го и контролирајте го Chromium. Достапно е ажурирање.</translation> <translation id="6120345080069858279">Chromium ќе ја зачува лозинкава во вашата сметка на Google. Не мора да ја запомните.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium е веб-прелистувач што активира веб-страници и апликации со неверојатна брзина. Тој е брз, стабилен и лесно се користи. Побезбедно прелистувајте на веб со вградената заштита на Chromium од кражба на идентитет и злонамерен софтвер.</translation> <translation id="6434250628340475518">Систем Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium ќе се рестартира за 1 секунда}one{Chromium ќе се рестартира за # секунда}other{Chromium ќе се рестартира за # секунди}}</translation> +<translation id="6464340581899189425">Ако имате повеќе сметки на Google, може да ги додадете во вашиот <ph name="DEVICE_TYPE" />. Вашите сметки ќе бидат достапни во прелистувачот Chromium и во Play Store, но и на услугите како што се Gmail, Drive и YouTube.<ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Тоа исто така контролира која страница ќе се прикаже кога го стартувате Chromium.</translation> <translation id="6510925080656968729">Деинсталирај Chromium</translation> <translation id="6570579332384693436">За поправка на печатните грешки, Chromium го испраќа текстот што го пишувате во текстуалните полиња до Google</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">За да добивате идни ажурирања на Chromium, потребен ви е OS X 10.11 или понова верзија. Компјутеров користи OS X 10.10.</translation> <translation id="7867198900892795913">Chromium не може да се ажурира на најновата верзија и поради тоа ги пропуштате новите функции и безбедносни поправки.</translation> <translation id="7898472181347242998">За да видите дали уредот ви е ажуриран, одете на <ph name="LINK_BEGIN" />Поставки за Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS не се исклучи правилно.</translation> <translation id="7937630085815544518">Бевте најавени на Chromium како <ph name="USER_EMAIL_ADDRESS" />. Користете ја истата сметка за повторно да се најавите.</translation> <translation id="7975919845073681630">Ова е второстепена инсталација на Chromium и затоа не може да биде стандарден прелистувач.</translation> <translation id="7979877361127045932">Сокриј во мени на Chromium</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Рестартирајте го Chromium во рок од еден ден}one{Рестартирајте го Chromium во рок од # ден}other{Рестартирајте го Chromium во рок од # дена}}</translation> <translation id="8453117565092476964">Архивата на инсталаторот е оштетена или невалидна. Преземете го Chromium повторно.</translation> <translation id="8493179195440786826">Chromium е застарен</translation> +<translation id="8550334526674375523">Овој работен профил е целосно одделен од вашиот личен профил.</translation> <translation id="8558383651099478961">Родителот ги исклучил „Дозволите за сајтови, апликации и екстензии“ за Chromium. Не е дозволено додавањето на оваа <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Chromium може да ги проверува вашите лозинки кога ќе се најавите со вашата сметка на Google</translation> <translation id="8586442755830160949">Авторски права <ph name="YEAR" /> на Авторите на Chromium. Сите права се задржани.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium се обидува да прикаже лозинки. Внесете ја својата лозинка за Windows за да го овозможите тоа.</translation> <translation id="8941642502866065432">Не може да се ажурира Chromium</translation> <translation id="8974095189086268230">Chromium OS е овозможен со дополнителен <ph name="BEGIN_LINK_CROS_OSS" />софтвер со отворен код<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Додавате работен профил во овој прелистувач и му давате контрола на администраторот само врз тој профил.</translation> <translation id="9019929317751753759">За Chromium да биде побезбеден, ја оневозможивме следнава екстензија што не е наведена во <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да е додадена без ваше знаење.</translation> <translation id="9089354809943900324">Chromium е застарен</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium ќе се рестартира по еден час}one{Chromium ќе се рестартира по # час}other{Chromium ќе се рестартира по # часа}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Да се избришат ли и вашите податоци од пребарувањата?</translation> <translation id="9158494823179993217">Администраторот на системот го конфигурирал Chromium да отвора друг прелистувач за пристап до <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Систем Chromium OS</translation> <translation id="93478295209880648">Chromium може да не функционира правилно затоа што веќе не е поддржан на Windows XP или Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> бара да ги прочитате и да ги прифатите следните Услови за користење пред да го користите уредот. Условите не ги прошируваат, менуваат или ограничуваат Условите на ОС Chromium.</translation> <translation id="965162752251293939">Кој користи Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_mn.xtb b/chrome/app/resources/chromium_strings_mn.xtb index 0cbab2fc..84c7183 100644 --- a/chrome/app/resources/chromium_strings_mn.xtb +++ b/chrome/app/resources/chromium_strings_mn.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Таны бүртгэлийн мэдээлэл хэтэрхий хуучирсан байгаа учраас Chromium OS-аас таны өгөгдлийг sync хийж чадсангүй.</translation> <translation id="2560420686485554789">Файл татахын тулд Chromium-д сангийн хандалт шаардлагатай</translation> <translation id="2572494885440352020">Chromium-ийн туслагч</translation> +<translation id="2583187216237139145">Энэ профайлыг ашиглах үед үүссэн Chromium-н аливаа өгөгдлийг (хавчуурга, түүх, нууц үг болон бусад тохиргоог үүсгэх зэрэг) ажлын профайлын админ хасах боломжтой. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Шинэчлэлтийг хэрэгжүүлэхийн тулд Chromium үйлдлийн системийг дахин эхлүүлнэ үү.</translation> <translation id="2615699638672665509">Энэ техник хангамжийг цаашид дэмжиж ажиллахгүй учраас энэ компьютероос цаашид Chromium-ын шинэчлэлтүүдийг хүлээн авахаа зогсоох болно.</translation> <translation id="2648074677641340862">Суулгалтын явцад үйлдлийн системийн алдаа гарлаа. Chromium-ыг дахин татаж авна уу.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Chromium-ийн шинэ хувилбар боломжтой байна. Хэзээ хэзээнээс ч хурдан.</translation> <translation id="6063093106622310249">&Chromium-д нээх</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" />-г Chromium-д нэмсэн</translation> +<translation id="608006075545470555">Энэ хөтчид ажлын профайл нэмэх</translation> <translation id="608189560609172163">Chromium нь нэвтрэх хэсэгт гарсан алдаатай холбоотойгоор таны өгөгдлийн тохиргоог хийж чадсангүй.</translation> <translation id="6096348254544841612">Chromium-г тохируулж, хянана уу. Шинэчлэх боломжтой.</translation> <translation id="6120345080069858279">Chromium энэ нууц үгийг таны Google Бүртгэлд хадгалах тул та үүнийг санах шаардлагагүй.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium бол веб хуудсууд болон аппликейшнуудыг цахилгааны хурдаар ажиллуулдаг веб хөтөч юм. Энэ нь хурдан, найдвартай мөн хэрэглэхэд хялбар. Chromium-д бий болгосон хорт вирус болон фишингийн хамгаалалтыг ашиглан вебээр илүү аюулгүй хайлт хийгээрэй.</translation> <translation id="6434250628340475518">Chromium OS Систем</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium 1 секундийн дараа дахин эхэлнэ}other{Chromium # секундийн дараа дахин эхэлнэ}}</translation> +<translation id="6464340581899189425">Хэрэв танд олон Google Бүртгэл байгаа бол тэдгээрийг <ph name="DEVICE_TYPE" />-д нэмэх боломжтой. Таны бүртгэлүүд Chromium хөтөч, Play Store түүнчлэн Gmail, Драйв болон YouTube зэрэг үйлчилгээнүүдэд боломжтой болно.<ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Энэ нь мөн таныг Chromium-ыг эхлүүлж байх үед гарч ирсэн хуудсыг хянадаг.</translation> <translation id="6510925080656968729">Chromium-ийг устгах</translation> <translation id="6570579332384693436">Зөв бичгийн алдааг засахын тулд Chromium таны текстийн талбарт бичсэн текстийг Google-д илгээдэг</translation> @@ -218,6 +221,7 @@ <translation id="7857220146454061152">Google Chromium-н цаашдын шинэчлэлтийг авахын тулд танд OS X 10.11 буюу түүнээс хойших хувилбар хэрэгтэй болно. Энэ компьютер OS X 10.10 хувилбарыг ашиглаж байна.</translation> <translation id="7867198900892795913">Chromium-г хамгийн сүүлийн хувилбарт шинэчлээгүй тул та шинэ онцлог болон аюулгүй байдлын засвар авах боломжгүй байна.</translation> <translation id="7898472181347242998">Таны төхөөрөмж шинэчлэгдсэн эсэхийг харахын тулд <ph name="LINK_BEGIN" />Chromium үйлдлийн системийн тохиргоо<ph name="LINK_END" /> руу очно уу</translation> +<translation id="7907774600618164274">Chromium үйлдлийн системийг зөв унтраагаагүй байна.</translation> <translation id="7937630085815544518">Та Chromium-д <ph name="USER_EMAIL_ADDRESS" />-аар нэвтэрсэн байна. Нэвтрэхийн тулд ижил данс хэрэглэнэ үү.</translation> <translation id="7975919845073681630">Энэ нь Chromium-н хоёр дахь суулгалт тул таны өгөгдмөл хөтчөөр сонгох боломжгүй.</translation> <translation id="7979877361127045932">Chromium цэсэнд нуух</translation> @@ -232,6 +236,7 @@ <translation id="8417404458978023919">{0,plural, =1{Chromium-г 1 хоногийн дотор дахин ажиллуулна уу}other{Chromium-г # хоногийн дотор дахин ажиллуулна уу}}</translation> <translation id="8453117565092476964">Суулгагчийн архив устгагдсан эсвэл хүчингүй болсон байна. Chromium-ыг дахин татаж авна уу.</translation> <translation id="8493179195440786826">Chromium нь хуучирсан байна</translation> +<translation id="8550334526674375523">Энэ ажлын профайл нь таны хувийн профайлаас бүрэн тусдаа байна.</translation> <translation id="8558383651099478961">Таны эцэг эх Chromium-н "Сайтууд, аппууд болон өргөтгөлүүдийн зөвшөөрөл"-ийг унтраасан байна. Энэ <ph name="EXTENSION_TYPE_PARAMETER" />-г нэмэхийг зөвшөөрдөггүй.</translation> <translation id="8568283329061645092">Chromium нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгсийг шалгах боломжтой</translation> <translation id="8586442755830160949">Chromium-ийн зохиогчийн эрх <ph name="YEAR" />. Бүх эрхийг хуулиар хамгаалсан.</translation> @@ -248,6 +253,7 @@ <translation id="8907580949721785412">Chromium нь нууц үгийг харуулахыг оролдож байна. Үүнийг зөвшөөрөхөөр бол Windows нууц үгээ бичнэ үү.</translation> <translation id="8941642502866065432">Chromium-г шинэчилж чадсангүй</translation> <translation id="8974095189086268230">Chromium OS-ыг нэмэлт <ph name="BEGIN_LINK_CROS_OSS" /> нээлттэй эхийн программ хангамжаар <ph name="END_LINK_CROS_OSS" /> боломжтой болгосон байна.</translation> +<translation id="8986207147630327271">Та энэ хөтчид ажлын профайл нэмж байгаа бөгөөд администратордоо зөвхөн ажлын профайлын хяналтыг өгч байна.</translation> <translation id="9019929317751753759">Chromium-г илүү аюулгүй болгохын тулд <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> жагсаалтанд байхгүй, танд мэдэгдэлгүйгээр нэмэгдсэн байж болох дараах өргөтгөлийг идэвхгүй болголоо.</translation> <translation id="9089354809943900324">Chromium хуучирсан байна</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium-г 1 цагийн дотор дахин ажиллуулна}other{Chromium-г # цагийн дотор дахин ажиллуулна}}</translation> @@ -255,6 +261,7 @@ <translation id="911206726377975832">Хайлтын мэдээллээ бас устгамаар байна уу?</translation> <translation id="9158494823179993217">Таны системийн админ Chromium-г<ph name="TARGET_URL_HOSTNAME" />-д хандахын тулд өөр хөтөч нээхээр тохируулсан байна.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium үйлдлийн систем</translation> <translation id="93478295209880648">Windows XP болон Windows Vista нь цаашид Chromium-г дэмжихгүй тул буруу ажиллаж болзошгүй</translation> <translation id="95514773681268843"><ph name="DOMAIN" />-аас танаас энэ төхөөрөмжийг ашиглахаасаа өмнө дараах үйлчилгээний нөхцлийг уншиж, хүлээн зөвшөөрсөн байхыг шаардаж байна. Эдгээр нөхцлүүд нь Google Chrome OS нөхцлүүдийг өргөтгөж, өөрчилж бас хязгаарлахгүй.</translation> <translation id="965162752251293939">Chromium-г хэн ашиглаж байна вэ?</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb index 8c7c99a8..3680c2f 100644 --- a/chrome/app/resources/chromium_strings_ms.xtb +++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">OS Chromium tidak dapat menyegerakkan data anda kerana butiran log masuk akaun anda sudah lapuk.</translation> <translation id="2560420686485554789">Chromium memerlukan akses storan untuk memuat turun fail</translation> <translation id="2572494885440352020">Pembantu Chromium</translation> +<translation id="2583187216237139145">Sebarang data Chromium yang dijana semasa penggunaan profil ini (seperti pembuatan penanda halaman, sejarah, kata laluan dan tetapan lain) boleh dialih keluar oleh pentadbir profil kerja. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS perlu dimulakan semula untuk melaksanakan kemas kini.</translation> <translation id="2615699638672665509">Komputer ini akan berhenti menerima kemas kini Chromium kerana perkakasan komputer ini tidak lagi disokong.</translation> <translation id="2648074677641340862">Ralat sistem pengendalian berlaku semasa pemasangan. Sila muat turun Chromium semula.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Terdapat versi baharu Chromium yang lebih pantas daripada biasa tersedia.</translation> <translation id="6063093106622310249">&Buka dalam Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> telah ditambahkan pada Chromium</translation> +<translation id="608006075545470555">Tambahkan Profil Kerja pada penyemak imbas ini</translation> <translation id="608189560609172163">Chromium tidak dapat menyegerakkan data anda disebabkan ralat melog masuk.</translation> <translation id="6096348254544841612">Sesuaikan dan kawal Chromium. Kemas kini tersedia.</translation> <translation id="6120345080069858279">Chromium akan menyimpan kata laluan ini dalam Akaun Google anda. Anda tidak perlu mengingati kata laluan tersebut.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium merupakan penyemak imbas yang mengendalikan laman web dan aplikasi dengan kelajuan sepantas kilat. Chromium cepat, stabil dan mudah digunakan. Semak imbas web lebih selamat dengan perlindungan perisian hasad dan pancingan data terbina dalam Chromium.</translation> <translation id="6434250628340475518">Sistem OS Chromium</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium akan dimulakan semula dalam 1 saat}other{Chromium akan dimulakan semula dalam # saat}}</translation> +<translation id="6464340581899189425">Jika anda mempunyai berbilang Akaun Google, anda boleh menambahkan akaun tersebut pada <ph name="DEVICE_TYPE" /> anda. Akaun anda akan tersedia dalam penyemak imbas Chromium dan Gedung Play, serta perkhidmatan seperti Gmail, Drive dan YouTube.<ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Sambungan turut mengawal halaman yang ditunjukkan apabila anda memulakan Chromium.</translation> <translation id="6510925080656968729">Nyahpasang Chromium</translation> <translation id="6570579332384693436">Untuk membetulkan kesilapan ejaan, Chromium menghantar teks yang anda taip dalam medan teks kepada Google</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Untuk mendapatkan kemaskinian Chromium yang akan datang, anda memerlukan OS X 10.11 atau yang lebih baharu. Komputer ini menggunakan OS X 10.10.</translation> <translation id="7867198900892795913">Chromium tidak dapat mengemas kini kepada versi terkini, maka anda terlepas ciri baharu dan penyelesaian keselamatan.</translation> <translation id="7898472181347242998">Untuk melihat sama ada peranti anda telah dikemas kini, pergi ke <ph name="LINK_BEGIN" />Tetapan OS Chromium<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">OS Chromium tidak dimatikan dengan betul.</translation> <translation id="7937630085815544518">Anda telah log masuk ke Chromium sebagai <ph name="USER_EMAIL_ADDRESS" />. Sila gunakan akaun yang sama untuk log masuk lagi.</translation> <translation id="7975919845073681630">Ini adalah pemasangan kedua Chromium dan tidak boleh dijadikan penyemak imbas lalai anda.</translation> <translation id="7979877361127045932">Sembunyikan dalam menu Chromium</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Lancarkan semula Chromium dalam masa sehari}other{Lancarkan semula Chromium dalam masa # hari}}</translation> <translation id="8453117565092476964">Arkib pemasang rosak atau tidak sah. Sila muat turun Chromium sekali lagi.</translation> <translation id="8493179195440786826">Chromium sudah usang</translation> +<translation id="8550334526674375523">Profil kerja ini terpisah sepenuhnya daripada profil peribadi anda.</translation> <translation id="8558383651099478961">Ibu/bapa anda telah mematikan "Kebenaran untuk tapak web, apl dan sambungan" untuk Chromium. Tindakan menambah <ph name="EXTENSION_TYPE_PARAMETER" /> ini tidak dibenarkan.</translation> <translation id="8568283329061645092">Chromium boleh menyemak kata laluan anda apabila anda log masuk menggunakan Akaun Google anda</translation> <translation id="8586442755830160949">Hak Cipta <ph name="YEAR" /> Pengarang Chromium. Hak cipta terpelihara.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium cuba menunjukkan kata laluan. Taip kata laluan Windows anda untuk membenarkannya.</translation> <translation id="8941642502866065432">Tidak dapat mengemas kini Chromium</translation> <translation id="8974095189086268230">Chromium OS berjaya dilaksanakan dengan adanya <ph name="BEGIN_LINK_CROS_OSS" />perisian sumber terbuka<ph name="END_LINK_CROS_OSS" /> tambahan.</translation> +<translation id="8986207147630327271">Anda menambahkan profil kerja pada penyemak imbas ini dan memberi pentadbir anda kawalan terhadap profil kerja sahaja.</translation> <translation id="9019929317751753759">Untuk menjadikan Chromium lebih selamat, kami melumpuhkan sambungan berikut yang tidak disenaraikan dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa pengetahuan anda.</translation> <translation id="9089354809943900324">Chromium sudah usang</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium akan dilancarkan semula dalam masa sejam}other{Chromium akan dilancarkan semula dalam masa # jam}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Padamkan juga data menyemak imbas anda?</translation> <translation id="9158494823179993217">Pentadbir sistem anda telah mengkonfigurasikan Chromium agar membuka penyemak imbas alternatif untuk mengakses <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Sistem OS Chromium</translation> <translation id="93478295209880648">Chromium mungkin tidak akan berfungsi dengan betul kerana tidak lagi disokong pada Windows XP atau Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> menghendaki anda membaca dan menerima Syarat Perkhidmatan berikut sebelum menggunakan peranti ini. Syarat ini tidak meluaskan, mengubah suai atau mengehadkan Syarat OS Chromium.</translation> <translation id="965162752251293939">Siapakah yang sedang menggunakan Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_my.xtb b/chrome/app/resources/chromium_strings_my.xtb index ded1d4c..7089f971 100644 --- a/chrome/app/resources/chromium_strings_my.xtb +++ b/chrome/app/resources/chromium_strings_my.xtb
@@ -43,6 +43,7 @@ <translation id="2535480412977113886">သင်၏ အကောင့် လက်မှတ်ထိုး ဝင်ရေး အသေးစိတ်များမှာ ဟောင်းသွားကြပြီ ဖြစ်၍ Chromium OS သည် သင်၏ ဒေတာကို စင့်က် လုပ်မပေးနိုင်ခဲ့ပါ။</translation> <translation id="2560420686485554789">ဖိုင်များကို ဒေါင်းလုဒ်လုပ်ရန်အတွက် Chromium သည် သိုလှောင်ခန်းကို သုံးခွင့်ရရန် လိုအပ်သည်</translation> <translation id="2572494885440352020">Chromium ကူညီပေးသူ</translation> +<translation id="2583187216237139145">ဤပရိုဖိုင်အသုံးပြုစဉ်အတွင်း ရရှိလာသော Chromium ဒေတာမှန်သမျှ (လိပ်စာများ၊ မှတ်တမ်း၊ စကားဝှက်နှင့် အခြားဆက်တင်များပြုလုပ်ခြင်း ကဲ့သို့) ကို အလုပ်ပရိုဖိုင် စီမံခန့်ခွဲသူက ဖယ်ရှားနိုင်သည်။ <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">မွမ်းမံသည့်အဆင့် ပြီးဆုံးရန်အတွက် Chromium အိုအက်စ် (OS) ကို ပြန်စရန် လိုပါမည်။</translation> <translation id="2615699638672665509">ဤကွန်ပျူတာသည် မကြာခင်တွင် Chromium မှအဆင့်မြှင့်မှုများကို လက်ခံရရှိခြင်းမှ ရပ်စဲတော့မည်ဖြစ်သည် အကြောင်းမှာ ၎င်း၏ စက်ပစ္စည်းသည် မထောက်ပံ့တော့သောကြောင့် ဖြစ်သည်။</translation> <translation id="2648074677641340862">တပ်ဆင်နေခိုက်မှာ လည်ပတ်မှု စနစ်ဆိုင်ရာ အမှား ကြုံခဲ့ရသည်။ ကျေးဇူးပြုပြီး Chromium ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation> @@ -145,6 +146,7 @@ <translation id="6055895534982063517">Chromium ဗားရှင်း အသစ် ရရှိနိုင်ရာ မကြုံစဖူး မြန်လှပါသည်။</translation> <translation id="6063093106622310249">&Chromium တွင် ဖွင့်ရန်</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> ကို Chromium သို့ ထည့်ပြီးပါပြီ</translation> +<translation id="608006075545470555">ဤဘရောင်ဇာတွင် အလုပ်ပရိုဖိုင်ထည့်ခြင်း</translation> <translation id="608189560609172163">Chromium သည် ဝင်ရောက်မှု ပြဿနာကြောင့် သင့်ဒေတာကို စင့်ခ်မလုပ်နိုင်ပါ။</translation> <translation id="6096348254544841612">Chromium ကို စိတ်ကြိုက်လုပ်ပြီး ထိန်းချုပ်ပါ။ အပ်ဒိတ် ရရှိပါပြီ။</translation> <translation id="6120345080069858279">Chromium သည် ဤစကားဝှက်ကို သင်၏ Google အကောင့်သို့ သိမ်းဆည်းသွားပါမည်။ သင်၎င်းကို မှတ်ထားစရာမလိုပါ။</translation> @@ -165,6 +167,7 @@ <translation id="6403826409255603130">Chromium သည် ဝဘ်စာမျက်နှာများနှင့် အပလီကေးရှင်းများကို မိုးကြိုးအမြန်နှုန်းဖြင့် ဖွင့်ပေးသည့် ဘရောင်ဇာဖြစ်ပါသည်။ ၎င်းသည် မြန်သည်၊ ငြိမ်သည်၊ ပြီးလျှင် အသုံးပြုရ လွယ်ကူပါသည်။ မူရင်းပါဝင်သည့် မဲလ်ဝဲ နှင့် ဖြားယောင်းခြင်း ပါဝင်သည့် Chromium ဖြင့် ဝဘ်ကို လုံခြုံစွာ အသုံးပြုပါ။</translation> <translation id="6434250628340475518">Chromium OS စနစ်</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium သည် ၁ စက္ကန့်အတွင်း ပြန်လည်စတင်ပါမည်}other{Chromium သည် # စက္ကန့်အတွင်း ပြန်လည်စတင်ပါမည်}}</translation> +<translation id="6464340581899189425">သင့်တွင် Google Account အများအပြားရှိလျှင် ၎င်းတို့ကို သင်၏ <ph name="DEVICE_TYPE" /> သို့ ထည့်နိုင်သည်။ သင့်အကောင့်များကို Chromium ဘရောင်ဇာနှင့် Play Store အပြင် Gmail၊ Drive နှင့် YouTube ကဲ့သို့ ဝန်ဆောင်မှုများတွင် အသုံးပြုနိုင်သည်။<ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="6475912303565314141">၎င်းသည် Chromium စချိန်မှာ ဘယ် စာမျက်နှာ ပြရမည်ကိုပါ ထိန်းချုပ်သည်။</translation> <translation id="6510925080656968729">Chromium ဖြုတ်ရန်</translation> <translation id="6570579332384693436">စာလုံးပေါင်း အမှားများကို ပြင်ဆင်ရန် Chromium သည် သင်စာသားအကွက်ထဲတွင် ရိုက်လိုက်သည့် စာလုံးကို Google သို့ ပို့သည်</translation> @@ -224,6 +227,7 @@ <translation id="7857220146454061152">Chromium အနာဂတ်အပ်ဒိတ်များ ရယူရန် OS X 10.11 နှင့်အထက် လိုအပ်ပါမည်။ ဤကွန်ပျူတာက OS X 10.10 အသုံးပြုနေသည်။</translation> <translation id="7867198900892795913">Chromium ကို နောက်ဆုံးဗားရှင်းသို့ အပ်ဒိတ်လုပ်၍မရသောကြောင့် ဝန်ဆောင်မှုအသစ်များနှင့် လုံခြုံရေး ပြင်ဆင်မွမ်းမံချက်များကို သင်ရရှိမည် မဟုတ်ပါ။</translation> <translation id="7898472181347242998">သင်၏စက် အပ်ဒိတ်ဖြစ်မဖြစ် ကြည့်ရန် <ph name="LINK_BEGIN" />Chromium OS ဆက်တင်များ<ph name="LINK_END" /> သို့သွားပါ</translation> +<translation id="7907774600618164274">Chromium OS ကို မှန်ကန်စွာ ပိတ်မထားပါ။</translation> <translation id="7937630085815544518">Chromium သို့ <ph name="USER_EMAIL_ADDRESS" /> အဖြစ်သင် ဝင်ရောက်ခဲ့သည်။ ကျေးဇူးပြု၍ တူညီသည့်အကောင့်ကို အသုံးပြုကာ ထပ်မံဝင်ရောက်ပါ။</translation> <translation id="7975919845073681630">ဤသည်မှာ Chromium ကို အရန်သဘော ထည့်သွင်းခြင်းဖြစ်ပြီး သင်၏မူရင်းဘရောင်ဇာအဖြစ် ၎င်းကို အသုံးပြု၍မရနိုင်ပါ။</translation> <translation id="7979877361127045932">Chromium မီနူးတွင် သိမ်းထားရန်</translation> @@ -238,6 +242,7 @@ <translation id="8417404458978023919">{0,plural, =1{Chromium ကို တစ်ရက်အတွင်း ပြန်လည်စတင်ပါ}other{Chromium ကို # ရက်အတွင်း ပြန်လည်စတင်ပါ}}</translation> <translation id="8453117565092476964">ထည့်သွင်းရာတွင် အသုံးပြုသည့် ချုံ့ထားသောဖိုင်မှတ်တမ်း ပျက်စီးနေသည် သို့မဟုတ် တရားမဝင်ပါ။ ကျေးဇူး၍ Chromium ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation> <translation id="8493179195440786826">Chromium မှာ ဟောင်းသွားပြီ</translation> +<translation id="8550334526674375523">ဤအလုပ်ပရိုဖိုင်ကို သင်၏ကိုယ်ပိုင်ပရိုဖိုင်မှ လုံးဝခွဲထုတ်ထားသည်။</translation> <translation id="8558383651099478961">Chromium အတွက် "ဝဘ်ဆိုက်၊ အက်ပ်နှင့် နောက်ဆက်တွဲ ခွင့်ပြုချက်များ" ကို သင့်မိဘက ပိတ်လိုက်သည်။ ဤ <ph name="EXTENSION_TYPE_PARAMETER" /> ထည့်ခြင်းကို ခွင့်မပြုပါ။</translation> <translation id="8568283329061645092">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chromium က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်</translation> <translation id="8586442755830160949">မူပိုင်ခွင့် <ph name="YEAR" /> The Chromium ပြုစုသူများ။ မူပိုင်ခွင့်များ အားလုံးကို ချုပ်ထိန်းထားသည်။</translation> @@ -254,6 +259,7 @@ <translation id="8907580949721785412">Chromium သည် စကားဝှက်ကို ပြပေးရန် ကြိုးစာနေသည်။ ၎င်းကို ခွင့်ပြုရန် သင်၏ Windows စကားဝှက်ကို ရိုက်ထည့်ပါ။</translation> <translation id="8941642502866065432">Chromium ကို အပ်ဒိတ်လုပ်၍ မရခြင်း</translation> <translation id="8974095189086268230">Chromium OS ကို ထပ်ဖြည့်ပေးခဲ့သည့် <ph name="BEGIN_LINK_CROS_OSS" />အခမဲ့ ရင်းမြစ် ဆော့ဝဲ<ph name="END_LINK_CROS_OSS" />များဖြင့် အားဖြည့်ပေးထားသည်။</translation> +<translation id="8986207147630327271">သင်သည် ဤဘရောင်ဇာတွင် အလုပ်ပရိုဖိုင်ကိုထည့်နေပြီး သင့်စီမံခန့်ခွဲသူကို အလုပ်ပရိုဖိုင်အတွက်သာ ထိန်းချုပ်ခွင့်ပေးနေခြင်း ဖြစ်ပါသည်။</translation> <translation id="9019929317751753759">Chromium ပိုပြီး လုံခြုံမှုရှိစေရန်၊ <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> တွင် စာရင်းဝင်ထားခြင်း မရှိသည့်အပြင် သင့်အား အသိမပေးဘဲ ထည့်ထားပုံရသည့် အောက်ပါ တိုးချဲ့လိုင်းအား ပိတ်ထားခဲ့၏။</translation> <translation id="9089354809943900324">Chromium မှာ ဟောင်းသွားပြီ</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium ကို ၁ နာရီအကြာတွင် ပြန်လည်စတင်ပါမည်}other{Chromium ကို # နာရီအကြာတွင် ပြန်လည်စတင်ပါမည်}}</translation> @@ -261,6 +267,7 @@ <translation id="911206726377975832">သင့်အသုံးပြုမှု ဒေတာအားလဲ ဖျက်မည်လား?</translation> <translation id="9158494823179993217">စနစ်စီမံခန့်ခွဲသူသည် <ph name="TARGET_URL_HOSTNAME" /> ဖွင့်ကြည့်ရန်အတွက် အစားထိုးဘရောင်ဇာ အသုံးပြုရန် Chromium ကို စီစဉ်သတ်မှတ်ထားသည်။</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Chromium OS စနစ်</translation> <translation id="93478295209880648">Windows XP သို့မဟုတ် Windows Vista တွင် မပံ့ပိုးတော့သောကြောင့် Chromium လုပ်ဆောင်မှု မှန်ကန်ချင်မှ မှန်ကန်မည်</translation> <translation id="95514773681268843"><ph name="DOMAIN" />က သင့်အနေနှင့် ဒီကိရိယာကို မသုံးမီ အောက်ပါ ဝန်ဆောင်မှု စည်းကမ်းချက်များကို ဖတ်ရှုပြီး လက်ခံမှာကို တောင်းဆိုပါသည်။ ဒီစည်းကမ်းချက်များမှာ Chromium OS စည်းကမ်းချက်များကို တိုးချဲ့ခြင်း၊ မွမ်းမံခြင်း သို့မဟုတ် ကန့်သတ်ခြင်း မရှိနိုင်ပါ။</translation> <translation id="965162752251293939">Chromium ကို မည်သူသုံးနေသလဲ။</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb index b5685d5..b1199de 100644 --- a/chrome/app/resources/chromium_strings_no.xtb +++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Chromium kunne ikke synkronisere dataene fordi påloggingsopplysningene dine er foreldede.</translation> <translation id="2560420686485554789">Chromium må ha lagringstilgang for å laste ned filer</translation> <translation id="2572494885440352020">Chromium-hjelper</translation> +<translation id="2583187216237139145">Alle Chromium-data som genereres mens denne profilen brukes (f.eks. oppretting av bokmerker, logg, passord og andre innstillinger), kan fjernes av administratoren for jobbprofilen. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Chromium OS må startes på nytt for at oppdateringen skal tas i bruk.</translation> <translation id="2615699638672665509">Denne datamaskinen slutter snart å motta Chromium-oppdateringer. Dette skjer fordi maskinvaren ikke støttes lenger.</translation> <translation id="2648074677641340862">Det oppsto en systemfeil under installering. Last ned Chromium på nytt.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">En nyere versjon av Chromium er tilgjengelig, og den er raskere enn noen gang.</translation> <translation id="6063093106622310249">&Åpne i Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> er lagt til i Chromium</translation> +<translation id="608006075545470555">Legg til en jobbprofil i denne nettleseren</translation> <translation id="608189560609172163">Chromium kunne ikke synkronisere dataene dine på grunn av en feil under påloggingen.</translation> <translation id="6096348254544841612">Tilpass og kontrollér Chromium. Oppdatering er tilgjengelig.</translation> <translation id="6120345080069858279">Chromium lagrer dette passordet i Google-kontoen din, så du trenger ikke å huske det.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium er en nettleser som kjører nettsider og programmer i lynets hastighet. Den er rask, stabil og enkel å bruke. Surf på nettet på en tryggere måte med Chromium, som har innebygd beskyttelse mot skadelig programvare og nettfisking.</translation> <translation id="6434250628340475518">Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium startes på nytt om 1 sekund}other{Chromium startes på nytt om # sekunder}}</translation> +<translation id="6464340581899189425">Hvis du har flere Google-kontoer, kan du legge dem til på <ph name="DEVICE_TYPE" />. Kontoene dine blir tilgjengelige i Chromium-nettleseren, Play-butikken og tjenester som Gmail, Disk og YouTube.<ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Den styrer også hvilken side som vises når du starter Chromium.</translation> <translation id="6510925080656968729">Avinstaller Chromium</translation> <translation id="6570579332384693436">For å rette opp i skrivefeil sender Chromium sender tekst du skriver i tekstfelt, til Google</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">For å få fremtidige Chromium-oppdateringer trenger du OS X 10.11 eller nyere. Denne datamaskinen bruker OS X 10.10.</translation> <translation id="7867198900892795913">Chromium kunne ikke oppdateres til den nyeste versjonen, så du går glipp av nye funksjoner og sikkerhetsforbedringer.</translation> <translation id="7898472181347242998">For å se om enheten er oppdatert, gå til <ph name="LINK_BEGIN" />Innstillinger for Chromium OS<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS ble ikke avsluttet på riktig måte.</translation> <translation id="7937630085815544518">Du ble logget på Chromium som <ph name="USER_EMAIL_ADDRESS" />. Du må logge deg på igjen med samme konto.</translation> <translation id="7975919845073681630">Dette er en sekundær installering av Chromium. Den kan ikke brukes som standardnettleser.</translation> <translation id="7979877361127045932">Skjul i Chromium-menyen</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Start Chromium på nytt innen én dag}other{Start Chromium på nytt innen # dager}}</translation> <translation id="8453117565092476964">Installasjonsarkivet er skadet eller ugyldig. Last ned Chromium på nytt.</translation> <translation id="8493179195440786826">Chromium er utdatert</translation> +<translation id="8550334526674375523">Denne jobbprofilen er helt separat fra den personlige profilen din.</translation> <translation id="8558383651099478961">Forelderen din har slått av «Tillatelser for nettsteder, apper og utvidelser» for Chromium. Du har ikke tillatelse til å legge til denne <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">Chromium kan sjekke passordene dine når du logger på med Google-kontoen din</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> – The Chromium Authors. Med enerett.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium forsøker å vise passord. Skriv inn Windows-passordet ditt for å tillate dette.</translation> <translation id="8941642502866065432">Kan ikke oppdatere Chromium</translation> <translation id="8974095189086268230">Chromium OS er gjort mulig av ytterligere <ph name="BEGIN_LINK_CROS_OSS" />åpen kilde-programvare<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Du er i ferd med å legge til en jobbprofil i denne nettleseren og gi administratoren din kontroll over kun jobbprofilen.</translation> <translation id="9019929317751753759">For å gjøre Chromium tryggere har vi slått av følgende utvidelse som ikke finnes i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, og som kan ha blitt lagt til uten at du vet det.</translation> <translation id="9089354809943900324">Chromium er utdatert</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium startes på nytt om en time}other{Chromium startes på nytt om # timer}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Vil du slette all nettleserdata også?</translation> <translation id="9158494823179993217">Systemadministratoren din har konfigurert Chromium til å åpne en annen nettleser når du går til <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-Inn)</translation> +<translation id="9214764063801632699">Chromium OS-systemet</translation> <translation id="93478295209880648">Chromium fungerer kanskje ikke riktig fordi den ikke lenger støttes på Windows XP eller Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> krever at du leser og godtar følgende vilkår før du bruker denne enheten. Disse vilkårene utvider, endrer eller begrenser ikke Chromium OS-vilkårene.</translation> <translation id="965162752251293939">Hvem bruker Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb index b436d12..b97ed84 100644 --- a/chrome/app/resources/chromium_strings_pt-PT.xtb +++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">O SO Chromium não conseguiu sincronizar os dados porque os detalhes de início de sessão da sua conta estão desatualizados.</translation> <translation id="2560420686485554789">O Chromium necessita de acesso ao armazenamento para transferir ficheiros.</translation> <translation id="2572494885440352020">Ajuda do Chromium</translation> +<translation id="2583187216237139145">Os dados do Chromium gerados durante a utilização deste perfil (como a criação de marcadores, histórico, palavras-passe e outras definições) podem ser removidos pelo administrador do perfil de trabalho. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">O SO Chromium tem de ser reiniciado para aplicar a atualização.</translation> <translation id="2615699638672665509">Este computador deixará de receber em breve atualizações do Chromium porque o seu hardware já não é suportado.</translation> <translation id="2648074677641340862">Ocorreu um erro no sistema operativo durante a instalação. Descarregue novamente o Chromium.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Está disponível uma nova versão do Chromium, mais rápida do que nunca.</translation> <translation id="6063093106622310249">&Abrir no Chromium</translation> <translation id="6072279588547424923">A extensão <ph name="EXTENSION_NAME" /> foi adicionada ao Chromium.</translation> +<translation id="608006075545470555">Adicione um perfil de trabalho a este navegador</translation> <translation id="608189560609172163">O Chromium não conseguiu sincronizar os dados devido a um erro de início de sessão.</translation> <translation id="6096348254544841612">Personalize e controle o Chromium. Está disponível uma atualização.</translation> <translation id="6120345080069858279">O Chromium vai guardar esta palavra-passe na sua Conta Google. Não tem de a memorizar.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">O Chromium é um navegador de internet que executa páginas Web e aplicações à velocidade da luz. É rápido, estável e fácil de utilizar. Navegue na Web com mais segurança, com proteção contra programas maliciosos e phishing integrada no Chromium.</translation> <translation id="6434250628340475518">Sistema Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{O Chromium será reiniciado dentro de 1 segundo}other{O Chromium será reiniciado dentro de # segundos}}</translation> +<translation id="6464340581899189425">Se tiver várias Contas Google, pode adicioná-las ao dispositivo <ph name="DEVICE_TYPE" />. As suas contas estarão disponíveis no navegador Chromium e na Play Store, bem como em serviços como o Gmail, o Drive e o YouTube.<ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" />.</translation> <translation id="6475912303565314141">Também controla a página apresentada quando inicia o Chromium.</translation> <translation id="6510925080656968729">Desinstalar o Chromium</translation> <translation id="6570579332384693436">Para corrigir erros ortográficos, o Chromium envia o texto que introduzir nos campos de texto para a Google.</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Para obter atualizações futuras do Chromium, precisa do OS X 10.11 ou posterior. Este computador está a utilizar o OS X 10.10.</translation> <translation id="7867198900892795913">Não foi possível atualizar o Chromium para a versão mais recente, pelo que não está a beneficiar das novas funcionalidades e correções de segurança.</translation> <translation id="7898472181347242998">Para ver se o seu dispositivo está atualizado, aceda às <ph name="LINK_BEGIN" />Definições do Chromium OS<ph name="LINK_END" />.</translation> +<translation id="7907774600618164274">O Chromium OS não foi corretamente encerrado.</translation> <translation id="7937630085815544518">Iniciou sessão no Chromium com a conta <ph name="USER_EMAIL_ADDRESS" />. Utilize a mesma conta para iniciar sessão novamente.</translation> <translation id="7975919845073681630">Esta é uma instalação secundária do Chromium, pelo que não pode tornar-se o navegador predefinido.</translation> <translation id="7979877361127045932">Ocultar no menu do Chromium</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Reinicie o Chromium dentro de um dia}other{Reinicie o Chromium dentro de # dias}}</translation> <translation id="8453117565092476964">O arquivo do programa de instalação está corrompido ou não é válido. Descarregue novamente o Chromium.</translation> <translation id="8493179195440786826">O Chromium Está Desatualizado</translation> +<translation id="8550334526674375523">Este perfil de trabalho está completamente separado do seu perfil pessoal.</translation> <translation id="8558383651099478961">O teu pai/mãe desativou as "Autorizações para sites, apps e extensões" para o Chromium. Não é permitido adicionar esta <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8568283329061645092">O Chromium pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Os autores do Chromium. Todos os direitos reservados.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">O Chromium está a tentar mostrar palavras-passe. Escreva a sua palavra-passe do Windows para permitir esta ação.</translation> <translation id="8941642502866065432">Não é possível atualizar o Chromium.</translation> <translation id="8974095189086268230">O lançamento do SO Chromium foi possível devido a <ph name="BEGIN_LINK_CROS_OSS" />software de código aberto<ph name="END_LINK_CROS_OSS" /> adicional.</translation> +<translation id="8986207147630327271">Está a adicionar um perfil de trabalho a este navegador e a conceder ao seu administrador controlo apenas sobre o perfil de trabalho.</translation> <translation id="9019929317751753759">Para tornar o Chromium mais seguro, desativámos a seguinte extensão, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, e é possível que tenha sido adicionada sem o seu conhecimento.</translation> <translation id="9089354809943900324">O Chromium está desatualizado</translation> <translation id="9093206154853821181">{0,plural, =1{O Chromium será reiniciado dentro de uma hora}other{O Chromium será reiniciado dentro de # horas}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Eliminar também os seus dados de navegação?</translation> <translation id="9158494823179993217">O administrador do sistema configurou o Chromium para abrir um navegador alternativo, de modo a aceder a <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Sistema Chromium OS</translation> <translation id="93478295209880648">O Chromium pode não funcionar corretamente, uma vez que já não é suportado no Windows XP ou no Windows Vista.</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> obriga-o a ler e aceitar os seguintes Termos de Utilização antes de utilizar este dispositivo. Estes termos não ampliam, modificam nem limitam os Termos do SO Chromium.</translation> <translation id="965162752251293939">Quem está a utilizar o Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index 8cc154b..c959cee 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -40,6 +40,7 @@ <translation id="2535480412977113886">Sistemul de operare Chromium nu a putut sincroniza datele, deoarece detaliile de conectare pentru contul dvs. nu sunt actualizate.</translation> <translation id="2560420686485554789">Pentru a descărca fișiere, Chromium necesită acces la stocare</translation> <translation id="2572494885440352020">Chromium Helper</translation> +<translation id="2583187216237139145">Toate datele Chromium generate în timpul folosirii acestui profil (precum marcajele create, istoricul, parolele și alte setări) pot fi eliminate de administratorul profilului de serviciu. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Pentru a se aplica actualizarea, sistemul de operare Chromium trebuie să fie repornit.</translation> <translation id="2615699638672665509">În curând, acest computer nu va mai primi actualizări Chromium, deoarece hardware-ul său nu mai este acceptat.</translation> <translation id="2648074677641340862">S-a produs o eroare de sistem de operare în timpul instalării. Descărcați din nou Chromium.</translation> @@ -141,6 +142,7 @@ <translation id="6055895534982063517">Este disponibilă o nouă versiune Chromium, iar aceasta este mai rapidă ca oricând.</translation> <translation id="6063093106622310249">&Deschide în Chromium</translation> <translation id="6072279588547424923">Extensia <ph name="EXTENSION_NAME" /> a fost adăugată la Chromium</translation> +<translation id="608006075545470555">Adaugă un profil de serviciu în acest browser</translation> <translation id="608189560609172163">Chromium nu a putut sincroniza datele din cauza unei erori la conectare.</translation> <translation id="6096348254544841612">Personalizează și controlează Chromium. Este disponibilă o actualizare.</translation> <translation id="6120345080069858279">Chromium va salva parola în Contul tău Google. Nu va trebui să o reții.</translation> @@ -161,6 +163,7 @@ <translation id="6403826409255603130">Chromium este un browser web care rulează pagini web și aplicații cu viteza fulgerului. Este rapid, stabil și ușor de utilizat. Navigați pe web în condiții de mai multă siguranță, beneficiind de o protecție sporită, încorporată în Chromium, împotriva programelor malware și a tentativelor de phishing.</translation> <translation id="6434250628340475518">Sistemul de operare Chromium</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium va reporni într-o secundă}few{Chromium va reporni în # secunde}other{Chromium va reporni în # de secunde}}</translation> +<translation id="6464340581899189425">Dacă ai mai multe Conturi Google, le poți adăuga pe <ph name="DEVICE_TYPE" />. Conturile vor fi disponibile în browserul Chromium și în Magazinul Play și în servicii cum ar fi Gmail, Drive și YouTube.<ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Stabilește și ce pagină se afișează când porniți Chromium.</translation> <translation id="6510925080656968729">Dezinstalați Chromium</translation> <translation id="6570579332384693436">Pentru a corecta erorile de scriere, Chromium trimite la Google textul pe care îl introduci în câmpurile de text</translation> @@ -220,6 +223,7 @@ <translation id="7857220146454061152">Pentru a primi actualizările Chromium viitoare, vei avea nevoie de OS X 10.11 sau o versiune ulterioară. Acest computer folosește OS X 10.10.</translation> <translation id="7867198900892795913">Chromium nu s-a putut actualiza la cea mai recentă versiune. Astfel, pierzi noi funcții și remedieri de securitate.</translation> <translation id="7898472181347242998">Pentru a verifica dacă dispozitivul este actualizat, accesează <ph name="LINK_BEGIN" />Setările sistemului de operare Chromium<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Sistemul de operare Chromium nu s-a închis corect.</translation> <translation id="7937630085815544518">Ați fost conectat(ă) la Chromium ca <ph name="USER_EMAIL_ADDRESS" />. Utilizați același cont pentru a vă conecta din nou.</translation> <translation id="7975919845073681630">Aceasta este o instalare secundară a browserului Chromium și nu poate fi setat ca browser prestabilit.</translation> <translation id="7979877361127045932">Ascunde în meniul Chromium</translation> @@ -234,6 +238,7 @@ <translation id="8417404458978023919">{0,plural, =1{Relansează Chromium în cel mult o zi}few{Relansează Chromium în cel mult # zile}other{Relansează Chromium în cel mult # de zile}}</translation> <translation id="8453117565092476964">Arhiva programului de instalare este deteriorată sau nevalidă. Descărcați din nou Chromium.</translation> <translation id="8493179195440786826">Chromium nu este actualizat</translation> +<translation id="8550334526674375523">Acest profil de serviciu este complet separat de profilul tău personal.</translation> <translation id="8558383651099478961">Părintele tău a dezactivat opțiunea „Permisiuni pentru site-uri, aplicații și extensii” în Chromium. Adăugarea acestei <ph name="EXTENSION_TYPE_PARAMETER" /> nu este permisă.</translation> <translation id="8568283329061645092">Chromium poate să îți verifice parolele atunci când te conectezi folosind Contul Google</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Toate drepturile rezervate.</translation> @@ -250,6 +255,7 @@ <translation id="8907580949721785412">Chromium încearcă să afișeze parolele. Pentru a permite acest lucru, introduceți parola pentru Windows.</translation> <translation id="8941642502866065432">Chromium nu se poate actualiza</translation> <translation id="8974095189086268230">La realizarea sistemului de operare Chromium au contribuit și alte programe <ph name="BEGIN_LINK_CROS_OSS" />software open source<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Adaugi un profil de serviciu în acest browser și îi acorzi administratorului permisiunea de a gestiona numai profilul de serviciu.</translation> <translation id="9019929317751753759">Pentru mai multă siguranță în Chromium, am dezactivat următoarea extensie care nu este inclusă în <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> și care este posibil să fi fost adăugată fără știrea ta.</translation> <translation id="9089354809943900324">Chromium nu este actualizat</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium se va relansa într-o oră}few{Chromium se va relansa în # ore}other{Chromium se va relansa în # de ore}}</translation> @@ -257,6 +263,7 @@ <translation id="911206726377975832">Ștergi și datele de navigare?</translation> <translation id="9158494823179993217">Administratorul de sistem a configurat Chromium să deschidă un browser secundar pentru a accesa <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Sistemul de operare Chromium</translation> <translation id="93478295209880648">Este posibil ca Chromium să nu funcționeze corespunzător, deoarece nu mai este acceptat pe Windows XP sau Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> necesită să citiți și să acceptați Termenii și condițiile următoare înainte de a utiliza acest dispozitiv. Acești termeni nu extind, nu modifică și nu limitează Termenii pentru sistemul de operare Chromium.</translation> <translation id="965162752251293939">Cine folosește Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb index eb12b8cc..cf6bcc0d 100644 --- a/chrome/app/resources/chromium_strings_sr-Latn.xtb +++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium OS ne može da sinhronizuje podatke zato što su podaci za prijavljivanje na nalog zastareli.</translation> <translation id="2560420686485554789">Chromium traži pristup memorijskom prostoru da bi preuzimao datoteke</translation> <translation id="2572494885440352020">Chromium pomagač</translation> +<translation id="2583187216237139145">Administrator poslovnog profila može da ukloni sve podatke Chromium-a koji se generišu tokom korišćenja ovog profila (poput pravljenja obeleživača, istorije, lozinki i drugih podešavanja). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Treba da restartujete Chromium OS da biste primenili ažuriranje.</translation> <translation id="2615699638672665509">Ovaj računar će uskoro prestati da prima ažuriranja za Chromium jer njegov hardver više nije podržan.</translation> <translation id="2648074677641340862">Tokom instalacije je došlo do greške u operativnom sistemu. Preuzmite Chromium ponovo.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Dostupna je nova verzija Chromium-a, brža nego ikada pre.</translation> <translation id="6063093106622310249">&Otvori u Chromium-u</translation> <translation id="6072279588547424923">Dodatak <ph name="EXTENSION_NAME" /> je dodat u Chromium</translation> +<translation id="608006075545470555">Dodajte poslovni profil u ovaj pregledač</translation> <translation id="608189560609172163">Chromium ne može da sinhronizuje podatke zbog greške pri prijavljivanju.</translation> <translation id="6096348254544841612">Prilagodite i kontrolišite Chromium. Dostupno je ažuriranje.</translation> <translation id="6120345080069858279">Chromium će sačuvati ovu lozinku na Google nalogu. Nećete morati da je pamtite.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium je veb pregledač koji pokreće veb-stranice i aplikacije munjevitom brzinom. Brz je, stabilan i jednostavan za korišćenje. Pregledajte Veb bezbednije sa zaštitom od malvera i „pecanja“ koja je ugrađena u Chromium.</translation> <translation id="6434250628340475518">Sistem Chromium OS</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium će se restartovati za 1 sekundu}one{Chromium će se restartovati za # sekundu}few{Chromium će se restartovati za # sekunde}other{Chromium će se restartovati za # sekundi}}</translation> +<translation id="6464340581899189425">Ako imate više Google naloga, možete da ih dodate na <ph name="DEVICE_TYPE" />. Nalozi će biti dostupni u pregledaču Chromium i Play prodavnici i u uslugama, kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Kontroliše i stranicu koja se prikazuje kada pokrenete Chromium.</translation> <translation id="6510925080656968729">Deinstaliraj Chromium</translation> <translation id="6570579332384693436">Da bi ispravio pravopisne greške, Chromium šalje Google-ovim serverima tekst koji unosite u polja za tekst.</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Da biste dobijali buduća Chromium ažuriranja, treba vam OS X 10.11 ili novija verzija. Ovaj računar koristi OS X 10.10.</translation> <translation id="7867198900892795913">Chromium nije uspeo da se ažurira na najnoviju verziju, pa propuštate nove funkcije i bezbednosne ispravke.</translation> <translation id="7898472181347242998">Da biste proverili da li je uređaj ažuriran, idite u <ph name="LINK_BEGIN" />Podešavanja Chromium OS-a<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium OS se nije ispravno zatvorio.</translation> <translation id="7937630085815544518">Bili ste prijavljeni na Chromium kao <ph name="USER_EMAIL_ADDRESS" />. Koristite isti nalog da biste se ponovo prijavili.</translation> <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromium-a pa ne možete da ga podesite kao podrazumevani pregledač.</translation> <translation id="7979877361127045932">Sakrij u Chromium meniju</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Ponovo pokrenite Chromium za jedan dan}one{Ponovo pokrenite Chromium za # dan}few{Ponovo pokrenite Chromium za # dana}other{Ponovo pokrenite Chromium za # dana}}</translation> <translation id="8453117565092476964">Arhiva programa za instalaciju je oštećena ili nevažeća. Preuzmite Chromium ponovo.</translation> <translation id="8493179195440786826">Chromium je zastareo</translation> +<translation id="8550334526674375523">Ovaj poslovni profil je potpuno odvojen od ličnog profila.</translation> <translation id="8558383651099478961">Roditelj je isključio Dozvole za sajtove, aplikacije i dodatke za Chromium. Dodavanje ove stavke (<ph name="EXTENSION_TYPE_PARAMETER" />) nije dozvoljeno.</translation> <translation id="8568283329061645092">Chromium može da vam proverava lozinke kada se prijavite pomoću Google naloga</translation> <translation id="8586442755830160949">Autorska prava <ph name="YEAR" />. Autori Chromium-a. Sva prava zadržana.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium pokušava da prikaže lozinke. Unesite lozinku za Windows da biste to omogućili.</translation> <translation id="8941642502866065432">Ne možete da ažurirate Chromium</translation> <translation id="8974095189086268230">Chromium OS omogućava dodatni <ph name="BEGIN_LINK_CROS_OSS" />softver otvorenog koda<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj pregledač i dajete administratoru kontrolu samo nad ovim poslovnim profilom.</translation> <translation id="9019929317751753759">Da bismo učinili Chromium bezbednijim, onemogućili smo sledeći dodatak koji <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ne navodi i koji je možda dodat bez vašeg znanja.</translation> <translation id="9089354809943900324">Chromium je zastareo</translation> <translation id="9093206154853821181">{0,plural, =1{Ponovo ćemo pokrenuti Chromium za jedan sat}one{Ponovo ćemo pokrenuti Chromium za # sat}few{Ponovo ćemo pokrenuti Chromium za # sata}other{Ponovo ćemo pokrenuti Chromium za # sati}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Želite li da izbrišete i podatke pregledanja?</translation> <translation id="9158494823179993217">Administrator sistema je konfigurisao Chromium da otvara alternativni pregledač za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Sistem Chromium OS</translation> <translation id="93478295209880648">Chromium možda neće ispravno funkcionisati zato što više nije podržan na Windows XP-u ili Windows Vista-i</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> zahteva da pročitate i prihvatite sledeće Uslove korišćenja usluge pre nego što počnete da koristite ovaj uređaj. Ovi uslovi ne predstavljaju proširenje, izmenu ili ograničenje Uslova za Chromium OS.</translation> <translation id="965162752251293939">Ko koristi Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb index b61b8e9..a9861708 100644 --- a/chrome/app/resources/chromium_strings_sr.xtb +++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Chromium ОС не може да синхронизује податке зато што су подаци за пријављивање на налог застарели.</translation> <translation id="2560420686485554789">Chromium тражи приступ меморијском простору да би преузимао датотеке</translation> <translation id="2572494885440352020">Chromium помагач</translation> +<translation id="2583187216237139145">Администратор пословног профила може да уклони све податке Chromium-а који се генеришу током коришћења овог профила (попут прављења обележивача, историје, лозинки и других подешавања). <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Треба да рестартујете Chromium ОС да бисте применили ажурирање.</translation> <translation id="2615699638672665509">Овај рачунар ће ускоро престати да прима ажурирања за Chromium јер његов хардвер више није подржан.</translation> <translation id="2648074677641340862">Током инсталације је дошло до грешке у оперативном систему. Преузмите Chromium поново.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Доступна је нова верзија Chromium-а, бржа него икада пре.</translation> <translation id="6063093106622310249">&Отвори у Chromium-у</translation> <translation id="6072279588547424923">Додатак <ph name="EXTENSION_NAME" /> је додат у Chromium</translation> +<translation id="608006075545470555">Додајте пословни профил у овај прегледач</translation> <translation id="608189560609172163">Chromium не може да синхронизује податке због грешке при пријављивању.</translation> <translation id="6096348254544841612">Прилагодите и контролишите Chromium. Доступно је ажурирање.</translation> <translation id="6120345080069858279">Chromium ће сачувати ову лозинку на Google налогу. Нећете морати да је памтите.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium је веб прегледач који покреће веб-странице и апликације муњевитом брзином. Брз је, стабилан и једноставан за коришћење. Прегледајте Веб безбедније са заштитом од малвера и „пецања“ која је уграђена у Chromium.</translation> <translation id="6434250628340475518">Систем Chromium ОС</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium ће се рестартовати за 1 секунду}one{Chromium ће се рестартовати за # секунду}few{Chromium ће се рестартовати за # секунде}other{Chromium ће се рестартовати за # секунди}}</translation> +<translation id="6464340581899189425">Ако имате више Google налога, можете да их додате на <ph name="DEVICE_TYPE" />. Налози ће бити доступни у прегледачу Chromium и Play продавници и у услугама, као што су Gmail, Диск и YouTube.<ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Контролише и страницу која се приказује када покренете Chromium.</translation> <translation id="6510925080656968729">Деинсталирај Chromium</translation> <translation id="6570579332384693436">Да би исправио правописне грешке, Chromium шаље Google-овим серверима текст који уносите у поља за текст.</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Да бисте добијали будућа Chromium ажурирања, треба вам ОС X 10.11 или новија верзија. Овај рачунар користи ОС X 10.10.</translation> <translation id="7867198900892795913">Chromium није успео да се ажурира на најновију верзију, па пропуштате нове функције и безбедносне исправке.</translation> <translation id="7898472181347242998">Да бисте проверили да ли је уређај ажуриран, идите у <ph name="LINK_BEGIN" />Подешавања Chromium ОС-а<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Chromium ОС се није исправно затворио.</translation> <translation id="7937630085815544518">Били сте пријављени на Chromium као <ph name="USER_EMAIL_ADDRESS" />. Користите исти налог да бисте се поново пријавили.</translation> <translation id="7975919845073681630">Ово је секундарна инсталација Chromium-а па не можете да га подесите као подразумевани прегледач.</translation> <translation id="7979877361127045932">Сакриј у Chromium менију</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Поново покрените Chromium за један дан}one{Поново покрените Chromium за # дан}few{Поново покрените Chromium за # дана}other{Поново покрените Chromium за # дана}}</translation> <translation id="8453117565092476964">Архива програма за инсталацију је оштећена или неважећа. Преузмите Chromium поново.</translation> <translation id="8493179195440786826">Chromium је застарео</translation> +<translation id="8550334526674375523">Овај пословни профил је потпуно одвојен од личног профила.</translation> <translation id="8558383651099478961">Родитељ је искључио Дозволе за сајтове, апликације и додатке за Chromium. Додавање ове ставке (<ph name="EXTENSION_TYPE_PARAMETER" />) није дозвољено.</translation> <translation id="8568283329061645092">Chromium може да вам проверава лозинке када се пријавите помоћу Google налога</translation> <translation id="8586442755830160949">Ауторска права <ph name="YEAR" />. Аутори Chromium-а. Сва права задржана.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium покушава да прикаже лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation> <translation id="8941642502866065432">Не можете да ажурирате Chromium</translation> <translation id="8974095189086268230">Chromium ОС омогућава додатни <ph name="BEGIN_LINK_CROS_OSS" />софтвер отвореног кода<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Додајете пословни профил у овај прегледач и дајете администратору контролу само над овим пословним профилом.</translation> <translation id="9019929317751753759">Да бисмо учинили Chromium безбеднијим, онемогућили смо следећи додатак који <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не наводи и који је можда додат без вашег знања.</translation> <translation id="9089354809943900324">Chromium је застарео</translation> <translation id="9093206154853821181">{0,plural, =1{Поново ћемо покренути Chromium за један сат}one{Поново ћемо покренути Chromium за # сат}few{Поново ћемо покренути Chromium за # сата}other{Поново ћемо покренути Chromium за # сати}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Желите ли да избришете и податке прегледања?</translation> <translation id="9158494823179993217">Администратор система је конфигурисао Chromium да отвара алтернативни прегледач за приступ URL-у <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Систем Chromium ОС</translation> <translation id="93478295209880648">Chromium можда неће исправно функционисати зато што више није подржан на Windows XP-у или Windows Vista-и</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> захтева да прочитате и прихватите следеће Услове коришћења услуге пре него што почнете да користите овај уређај. Ови услови не представљају проширење, измену или ограничење Услова за Chromium ОС.</translation> <translation id="965162752251293939">Ко користи Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index a89d58c..dcc8e5fe 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -42,6 +42,7 @@ <translation id="2535480412977113886">Mfumo wa Uendeshaji wa Chromium haukuweza kusawazisha data yako kwa sababu maelezo yako ya kuingia katika akaunti yanahitaji kusasishwa.</translation> <translation id="2560420686485554789">Chromium inahitaji ruhusa ya kufikia hifadhi ili ipakue faili</translation> <translation id="2572494885440352020">Kisaidizi cha Chromium</translation> +<translation id="2583187216237139145">Data yoyote ya Chromium inayozalishwa unapotumia wasifu huu (kama vile alamisho ulizoweka, historia, manenosiri na mipangilio mingine) inaweza kuondolewa na msimamizi wa wasifu huu wa kazini. <ph name="LEARN_MORE" /></translation> <translation id="2587578672395088481">Mfumo wa Uendeshaji wa Chromium unahitaji kuzimwa na kuwashwa ili kutumia sasisho.</translation> <translation id="2615699638672665509">Hivi karibuni kompyuta hii itaacha kupokea sasisho za Chromium kwa sababu maunzi yake hayatumiki tena.</translation> <translation id="2648074677641340862">Hitilafu ya mfumo wa uendeshaji imetokea wakati wa usakinishaji. Tafadhali pakua Chromium tena.</translation> @@ -143,6 +144,7 @@ <translation id="6055895534982063517">Kuna toleo jipya la Chromium linalopatikana, na ni la kasi kuliko la awali.</translation> <translation id="6063093106622310249">Fungua katika Chromium</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> imeongezwa kwenye Chromium</translation> +<translation id="608006075545470555">Ongeza Wasifu wa Kazini kwenye kivinjari hiki</translation> <translation id="608189560609172163">Chromium haikuweza kusawazisha data yako kutokana na hitalafu ya kuingia katika akaunti.</translation> <translation id="6096348254544841612">Weka mapendeleo na udhibiti Chromium. Sasisho linapatikana.</translation> <translation id="6120345080069858279">Chromium itahifadhi nenosiri hili kwenye Akaunti yako ya Google. Hutahitaji kulikumbuka.</translation> @@ -163,6 +165,7 @@ <translation id="6403826409255603130">Chromium ni kivinjari cha wavuti kinachoendesha kurasa za wavuti na programu kwa kasi ya umeme. Ni ya haraka, imara, na rahisi kutumia. Vinjari wavuti kwa usalama zaidi dhidi ya hadaa na programu hasidi ukiwa na ulinzi uliojengwa ndani ya Chromium.</translation> <translation id="6434250628340475518">Mfumo wa Uendeshaji wa Chromium</translation> <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium itazimika na kuwaka tena baada ya sekunde 1}other{Chromium itazimika na kuwaka tena baada ya sekunde #}}</translation> +<translation id="6464340581899189425">Ikiwa una Akaunti nyingi za Google, unaweza kuziongeza kwenye <ph name="DEVICE_TYPE" /> yako. Akaunti zako zitapatikana katika kivinjari cha Chromium na Duka la Google Play na pia katika huduma kama vile Gmail, Hifadhi na YouTube.<ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation> <translation id="6475912303565314141">Pia inadhibiti ukurasa unaoonyeshwa unapoanzisha Chromium.</translation> <translation id="6510925080656968729">Ondoa Chromium</translation> <translation id="6570579332384693436">Ili kurekebisha makosa ya tahajia, Chromium hutuma maandishi unayoandika kwenye sehemu za maandishi kwa Google</translation> @@ -222,6 +225,7 @@ <translation id="7857220146454061152">Ili uweze kupokea taarifa za Chromium wakati ujao, utahitaji toleo la OS X 10.11 au toleo jipya zaidi. Kompyuta hii inatumia OS X 10.10.</translation> <translation id="7867198900892795913">Chromium imeshindwa kusasisha toleo jipya, kwa hivyo hutapata masasisho ya usalama na vipengele vipya.</translation> <translation id="7898472181347242998">Ili uone ikiwa kifaa chako kimesasishwa, nenda kwenye <ph name="LINK_BEGIN" />Mipanglio ya Mfumo wa Uendeshaji wa Chromium<ph name="LINK_END" /></translation> +<translation id="7907774600618164274">Mfumo wa Uendeshaji wa Chromium haukuzima kwa njia sahihi.</translation> <translation id="7937630085815544518">Uliingia kwenye Chromium kama <ph name="USER_EMAIL_ADDRESS" />. Tafadhali tumia akaunti hiyo hiyo kuingia tena.</translation> <translation id="7975919845073681630">Huu ni usakinishaji wa pili wa Chromium, na haiwezi kufanywa kuwa kivinjari chako chaguomsingi.</translation> <translation id="7979877361127045932">Ficha katika menyu ya Chromium</translation> @@ -236,6 +240,7 @@ <translation id="8417404458978023919">{0,plural, =1{Fungua Chromium upya ndani ya siku moja}other{Fungua Chromium upya ndani ya siku #}}</translation> <translation id="8453117565092476964">Kumbukumbu ya kisakinishi imeharibika au ni batili. Tafadhali pakua Chromium tena.</translation> <translation id="8493179195440786826">Chromium Imepitwa na Wakati</translation> +<translation id="8550334526674375523">Wasifu huu wa kazini ni tofauti kabisa na wasifu wako wa binafsi.</translation> <translation id="8558383651099478961">Mzazi wako amezima "Ruhusa za tovuti, programu na viendelezi" kwenye Chromium. Huruhusiwi kuweka <ph name="EXTENSION_TYPE_PARAMETER" /> hii.</translation> <translation id="8568283329061645092">Chromium inaweza kukagua manenosiri unapoingia ukitumia Akaunti yako ya Google</translation> <translation id="8586442755830160949">Hakimiliki <ph name="YEAR" /> Wasanidi wa Chromium. Haki zote zimehifadhiwa.</translation> @@ -252,6 +257,7 @@ <translation id="8907580949721785412">Chromium inajaribu kuonyesha manenosiri. Chapa nenosiri lako la Windows ili uruhusu hili.</translation> <translation id="8941642502866065432">Imeshindwa kusasisha Chromium</translation> <translation id="8974095189086268230">Chromium OS imewezeshwa na programu za ziada za <ph name="BEGIN_LINK_CROS_OSS" />programu huria<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="8986207147630327271">Unaongeza wasifu wa kazini kwenye kivinjari hiki na unampa msimamizi wako uwezo wa kudhibiti wasifu huo wa kazini pekee.</translation> <translation id="9019929317751753759">Ili kufanya Chromium salama zaidi, tumezima kiendelezi kinachofuata ambacho hakijaorodheshwa katika <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na huenda kimeongezwa bila ridhaa yako.</translation> <translation id="9089354809943900324">Chromium imepitwa na wakati</translation> <translation id="9093206154853821181">{0,plural, =1{Chromium itafunguka upya ndani ya saa moja}other{Chromium itafunguka upya ndani ya saa #}}</translation> @@ -259,6 +265,7 @@ <translation id="911206726377975832">Futa historia yako ya kuvinjari pia?</translation> <translation id="9158494823179993217">Msimamizi wa mfumo unaotumia ameweka mipangilio ya Chromium ifungue kivinjari mbadala ili ufikie<ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> +<translation id="9214764063801632699">Mfumo wa Uendeshaji wa Chromium</translation> <translation id="93478295209880648">Huenda Chromium isifanye kazi vizuri kwa sababu haitumiki tena kwenye Windows XP au Windows Vista</translation> <translation id="95514773681268843"><ph name="DOMAIN" /> huhitaji usome na ukubali Sheria na Masharti yafuatayo kabla ya kutumia kifaa hiki. Masharti haya hayapanui, kurekebisha au kupunguza Masharti ya Chromium OS.</translation> <translation id="965162752251293939">Ni nani anayetumia Chromium?</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index d0edc49..b62ccb2 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Geen netwerke nie</translation> <translation id="1056898198331236512">Waarskuwing</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Voer jou nuwe PIN in. 'n PIN moet minstens een karakter lank wees en kan letters, syfers en ander karakters bevat.}other{Voer jou nuwe PIN in. 'n PIN moet minstens # karakters lank wees en kan letters, syfers en ander karakters bevat.}}</translation> <translation id="1059944192885972544">Het <ph name="NUM" /> oortjies vir "<ph name="SEARCH_TEXT" />" gekry</translation> <translation id="1060292118287751956">Bepaal die frekwensie waarteen die skerm opdateer</translation> <translation id="1061904396131502319">Dis amper tyd vir 'n blaaskans</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Tik 'n letter in</translation> <translation id="168991973552362966">Voeg 'n nabygeleë drukker by</translation> <translation id="1689945336726856614">Kopieer &URL</translation> +<translation id="1690248886740053041">Kan nie aan 'n mobiele netwerk koppel nie. Kontak asseblief jou diensverskaffer vir tegniese steun.</translation> <translation id="1692115862433274081">Gebruik 'n ander rekening</translation> <translation id="1692118695553449118">Sinkronisering is aan</translation> <translation id="1692210323591458290">Donkerpers</translation> +<translation id="169279809881363536">Geen profiele is ontdek nie. Skandeer QR-kode met toestelkamera of voer die aktiveringkode in wat jou diensverskaffer verskaf het.</translation> <translation id="1697150536837697295">Kuns</translation> <translation id="1697686431566694143">Wysig lêer</translation> <translation id="1698122934742150150">Net huidige incognitosessie</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Verwyder van lys af</translation> <translation id="2770690685823456775">Voer jou wagwoorde na 'n ander vouer uit</translation> <translation id="2770929488047004208">Monitorresolusie</translation> +<translation id="2770954829020464827">Besonderhede word versteek terwyl jy jou skerm deel</translation> <translation id="2771268254788431918">Mobiele data is geaktiveer</translation> <translation id="2771816809568414714">Kaas</translation> <translation id="2772936498786524345">Skelm</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Beskikbare USB-toestelle sal hier verskyn.</translation> <translation id="3202131003361292969">Pad</translation> <translation id="3202173864863109533">Hierdie oortjie se klank word gedemp.</translation> +<translation id="3202218848974251205">Die Privaatheidsandput</translation> <translation id="3208321278970793882">Program</translation> <translation id="3208584281581115441">Kontroleer nou</translation> <translation id="3208703785962634733">Onbevestigde</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Staaf met jou identiteitsverskaffer om jou rekening te aktiveer om toegang tot die Google Play Winkel te kry.</translation> <translation id="3462311546193741693">Meld jou by die meeste werwe af. Jy sal by jou Google-rekening aangemeld bly sodat jou gesinkroniseerde data uitgevee kan word.</translation> <translation id="3462413494201477527">Kanselleer rekeningopstelling?</translation> +<translation id="3464145797867108663">Voeg werkprofiel by</translation> <translation id="346431825526753">Dit is 'n rekening vir kinders wat deur <ph name="CUSTODIAN_EMAIL" /> bestuur word.</translation> <translation id="3468298837301810372">Etiket</translation> <translation id="3468999815377931311">Android-foon</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Nuwe kenmerke aanbied wanneer hulle beskikbaar is</translation> <translation id="3602290021589620013">Voorskou</translation> <translation id="3603622770190368340">Kry netwerksertifikaat</translation> +<translation id="3604193429970465812">Sekondêre rekeninge</translation> <translation id="3604713164406837697">Verander muurpapier</translation> <translation id="3605780360466892872">Toegeknoop</translation> <translation id="3608576286259426129">Gebruikerprentvoorskou</translation> @@ -2606,6 +2613,7 @@ Wil jy <ph name="CONTROL_PANEL_APPLET_NAME" /> graag begin?</translation> <translation id="394183848452296464">Kan nie kortpad skep nie</translation> +<translation id="3943494825379372497">Stel programme en bladsye terug?</translation> <translation id="3943582379552582368">Terug</translation> <translation id="3943857333388298514">Plak</translation> <translation id="3948116654032448504">Deursoek <ph name="SEARCH_ENGINE" /> vir prent</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">Hierdie uitbreidings hoef nie inligting op hierdie werf te sien en te verander nie.</translation> <translation id="4046123991198612571">Volgende snit</translation> <translation id="4047726037116394521">Gaan tuisblad toe</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontak is nie beskikbaar nie. Om Nabydeling met hulle te gebruik, moet jy die e-posadres wat met hul Google-rekening geassosieer word, by jou kontakte voeg.}other{# kontakte is nie beskikbaar nie. Om Nabydeling met hulle te gebruik, moet jy die e-posadresse wat met hul Google-rekeninge geassosieer word, by jou kontakte voeg.}}</translation> <translation id="4050225813016893843">Stawingmetode</translation> <translation id="4052120076834320548">Klein</translation> <translation id="4056908315660577142">Jy het die tydlimiet bereik wat jou ouer vir die Chrome-program <ph name="APP_NAME" /> gestel het. Jy kan dit môre <ph name="TIME_LIMIT" /> lank gebruik.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Poorte</translation> <translation id="4647090755847581616">Maak oortjie toe</translation> <translation id="4647283074445570750">Stap <ph name="CURRENT_STEP" /> van <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Begin program wanneer jy by jou tablet aanmeld}computer{Begin program wanneer jy by jou rekenaar aanmeld}other{Begin program wanneer jy by jou toestel aanmeld}}</translation> <translation id="4647697156028544508">Voer asseblief die PIN vir "<ph name="DEVICE_NAME" />" in:</translation> <translation id="4648491805942548247">Onvoldoende toestemmings</translation> <translation id="4648499713050786492">Ontsluit asseblief jou profiel voordat jy 'n persoon byvoeg.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Lyk soos <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Verstek)</translation> <translation id="4864369630010738180">Meld tans aan …</translation> <translation id="4864805589453749318">Kies die ouer wat toestemming gee om 'n skoolrekening by te voeg.</translation> +<translation id="4866265760644917470">Profiel is suksesvol bygevoeg.</translation> <translation id="486635084936119914">Maak sekere lêertipes outomaties oop nadat dit afgelaai is</translation> <translation id="48704129375571883">Voeg bykomende kenmerke by</translation> <translation id="4870758487381879312">Voer wagwoord wat deur admin goedgekeur is in om opstellinginligting te kry</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Die gekompromitteerde wagwoord is suksesvol verander. Jy het nog # gekompromitteerde wagwoord. Chrome beveel aan dat jy hierdie wagwoord nou nagaan.}other{Die gekompromitteerde wagwoord is suksesvol verander. Jy het nog # gekompromitteerde wagwoorde. Chrome beveel aan dat jy hierdie wagwoorde nou nagaan.}}</translation> <translation id="5207949376430453814">Lig tekskaret uit</translation> <translation id="5209320130288484488">Geen toestelle gevind nie</translation> +<translation id="5209572028385096813">Hierdie gebruiker word deur Family Link bestuur</translation> <translation id="5210365745912300556">Maak oortjie toe</translation> <translation id="5213481667492808996">Jou "<ph name="NAME" />"-datadiens is gereed om te gebruik</translation> <translation id="5213891612754844763">Wys instaanbedienerinstellings</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Taal</translation> <translation id="5302932258331363306">Wys plaasvervangers</translation> <translation id="5304276686222516262">Kan nie kontaklys aflaai nie. Gaan asseblief jou netwerkverbinding na of <a href="#" id="tryAgainLink">probeer weer</a>.</translation> +<translation id="5305145881844743843">Hierdie rekening word bestuur deur <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Niks geïnstalleer nie</translation> <translation id="5307030433605830021">Bron word nie gesteun nie</translation> <translation id="5308380583665731573">Koppel</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Berg</translation> <translation id="5319359161174645648">Google beveel Chrome aan</translation> <translation id="5320112320661303273">Dit lyk of jy Assistent reeds op 'n ander toestel opgestel het. Benut jou Assistent selfs meer deur die volgende instelling aan te skakel.</translation> +<translation id="5320135788267874712">Nuwe toestelnaam</translation> <translation id="532247166573571973">Die bediener is dalk onbereikbaar. Probeer later weer.</translation> <translation id="5324300749339591280">Programmelys</translation> <translation id="5324780743567488672">Tydsone is outomaties gestel deur jou ligging te gebruik</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Gebruik sagter boodskappe (aanbeveel)</translation> <translation id="574104302965107104">Skermweerspieëling</translation> <translation id="574209121243317957">Toonhoogte</translation> +<translation id="5742505912938664543">As jy 'n sekondêre rekening hier byvoeg, kan jy deur die web blaai, programme aflaai, en jou Gmail en ander Google-dienste wat daardie rekening gebruik, nagaan.</translation> <translation id="5746169159649715125">Stoor as PDF</translation> <translation id="5747552184818312860">Verval</translation> <translation id="5747785204778348146">Ontwikkelaar – onstabiel</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Spasie</translation> <translation id="6130692320435119637">Voeg Wi-Fi by</translation> <translation id="6136114942382973861">Maak aflaaibalk toe</translation> +<translation id="6136287496450963112">Jou sekuriteitsleutel word nie met 'n PIN beskerm nie. As jy vingerafdrukke wil bestuur, moet jy eers 'n PIN skep.</translation> <translation id="6137767437444130246">Gebruikersertifikaat</translation> <translation id="6138680304137685902">X9.62 ECDSA-handtekening met SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />; geen netwerk nie</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Help om Chrome-bedryfstelselkenmerke en -werkverrigting beter te maak</translation> <translation id="6331818708794917058">Werwe kan vra om aan MIDI-toestelle te koppel</translation> <translation id="6333064448949140209">Lêer sal vir ontfouting na Google gestuur word</translation> +<translation id="6334444530352320327">Jou programme en OS-instellings sal sinkroniseer op Chromebooks waar jy met hierdie rekening aangemeld is.<ph name="LINK_BEGIN" />Sinkroniseer instellings<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Alle werwe kan enige advertensies vir jou wys</translation> <translation id="6339668969738228384">Skep 'n nuwe profiel vir <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Kon nie aan die bediener koppel nie. Gaan asseblief jou netwerkverbinding na en probeer weer. As die probleem voortduur, herbegin jou Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Nuus</translation> <translation id="6709357832553498500">Koppel met <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Vorige</translation> +<translation id="6713233729292711163">Voeg werkprofiel by</translation> <translation id="6715803357256707211">Kon nie jou Linux-program installeer nie. Klik op kennisgewing vir besonderhede.</translation> <translation id="671619610707606484">Dit sal <ph name="TOTAL_USAGE" /> se data uitvee wat deur werwe geberg is</translation> <translation id="671928215901716392">Sluit skerm</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Vee geskiedenis en outovoltooide items in die adresbalk uit. Jou Google-rekening kan dalk ander vorme van blaaigeskiedenis hê by <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Ontwikkelaarmodus</translation> <translation id="7121728544325372695">Slimaandagstrepe</translation> +<translation id="7122353087820324370">Programme en bedryfstelselinstellings word nie met sekondêre rekeninge gesinkroniseer nie.</translation> <translation id="7123030151043029868">Mag outomaties veelvuldige lêers aflaai</translation> <translation id="7123360114020465152">Nie meer gesteun nie</translation> <translation id="7125148293026877011">Vee Crostini uit</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Maak aflaaivouer oop</translation> <translation id="7506093026325926984">Hierdie wagwoord sal op hierdie toestel gestoor word</translation> <translation id="7506130076368211615">Stel nuwe netwerk op</translation> +<translation id="7506242536428928412">Stel 'n nuwe PIN om jou nuwe sekuriteitsleutel te gebruik</translation> <translation id="7506541170099744506">Jou <ph name="DEVICE_TYPE" /> is suksesvol ingeskryf vir ondernemingbestuur.</translation> <translation id="7507207699631365376">Lees hierdie verskaffer se <ph name="BEGIN_LINK" />privaatheidsbeleid<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Statusreageerder se sertifikaat</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Kan nie hierdie sekuriteitsleutel terugstel nie. Fout <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini-opgradering</translation> <translation id="7696063401938172191">Op jou "<ph name="PHONE_NAME" />":</translation> +<translation id="7697166915480294040">Besonderhede word versteek terwyl jy jou skerm deel</translation> <translation id="7697598343108519171">Gebruik kamera om QR-kode te skandeer</translation> <translation id="7699968112832915395">Kan nie rekening byvoeg nie</translation> <translation id="7701040980221191251">Geen</translation> @@ -6208,6 +6227,8 @@ <translation id="8184472985242519288">Eenvormig</translation> <translation id="8186609076106987817">Die bediener kon nie die lêer vind nie.</translation> <translation id="8188389033983459049">Gaan jou toestelinstellings na en skakel dit aan om voort te gaan</translation> +<translation id="8189306097519446565">Skoolrekeninge</translation> +<translation id="8189750580333936930">Privaatheidsandput</translation> <translation id="8190193592390505034">Koppel tans aan <ph name="PROVIDER_NAME" /> …</translation> <translation id="8191230140820435481">Bestuur jou programme, uitbreidings en temas</translation> <translation id="8195027750202970175">Grootte op skyf</translation> @@ -6899,6 +6920,7 @@ <translation id="8986362086234534611">Vergeet</translation> <translation id="8986494364107987395">Stuur gebruikstatistiek en omvalverslae outomaties na Google</translation> <translation id="8987927404178983737">Maand</translation> +<translation id="8989823300731803443">Gaan voort waar jy opgehou het.</translation> <translation id="8990209962746788689">Kan nie QR-kode skep nie</translation> <translation id="8991520179165052608">Werf kan jou mikrofoon gebruik</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 item}other{# items}}</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 093a1367..765ff3a 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">ምንም አውታረ መረቦች የሉም</translation> <translation id="1056898198331236512">ማስጠንቀቂያ</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{አዲሱን የእርስዎ ፒን ያስገቡ። ፒን ቢያንስ የአንድ ቁምፊ ርዝመት ሊኖረው ይገባል እና ፊደላትን፣ ቁጥሮችን እና ሌሎች ቁምፊዎችን ይይዛል።}one{አዲሱን የእርስዎ ፒን ያስገቡ። ፒን ቢያንስ የ# ቁምፊዎች ርዝመት ሊኖረው ይገባል እና ፊደላትን፣ ቁጥሮችን እና ሌሎች ቁምፊዎችን ይይዛል።}other{አዲሱን የእርስዎ ፒን ያስገቡ። ፒን ቢያንስ የ# ቁምፊዎች ርዝመት ሊኖረው ይገባል እና ፊደላትን፣ ቁጥሮችን እና ሌሎች ቁምፊዎችን ይይዛል።}}</translation> <translation id="1059944192885972544"><ph name="NUM" /> ትሮች ለ«<ph name="SEARCH_TEXT" />» ተገኝቷል።</translation> <translation id="1060292118287751956">ማያ ገጹ የሚዘመንበት ተደጋጋሚነትን ይወስናል</translation> <translation id="1061904396131502319">የእረፍት ጊዜ ሊደርስ ነው</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">አንድ ፊደል ይተይቡ</translation> <translation id="168991973552362966">በአቅራቢያ ያለ አታሚን ያክሉ</translation> <translation id="1689945336726856614">&ዩአርኤል ቅዳ</translation> +<translation id="1690248886740053041">ከሞባይል አውታረ መረብ ጋር መገናኘት አልተቻለም። ለቴክኒካዊ ድጋፍ እባክዎ አገልግሎት አቅራቢዎን ያነጋግሩ።</translation> <translation id="1692115862433274081">ሌላ መለያ ተጠቀም</translation> <translation id="1692118695553449118">አመሳስል በርቷል</translation> <translation id="1692210323591458290">ጠቆር ያለ ወይን ጠጅ</translation> +<translation id="169279809881363536">ምንም መገለጫዎች አልተገኙም። አዲስ አውታረ መረብን ለማዋቀር የመሣሪያ ካሜራን በመጠቀም QR ኮድ ይቃኙ ወይም በአገልግሎት አቅራቢዎ የተሰጠዎትን የማግበሪያ ኮድ ያስገቡ።</translation> <translation id="1697150536837697295">ሥነ ጥበብ</translation> <translation id="1697686431566694143">ፋይል አርትዕ ያድርጉ</translation> <translation id="1698122934742150150">የአሁኑ ማንነት የማያሳውቅ ክፍለ-ጊዜ ብቻ</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">ከዝርዝር አስወግድ</translation> <translation id="2770690685823456775">የእርስዎን የይለፍ ቃላት ወደ ሌላ አቃፊ ይላኩ</translation> <translation id="2770929488047004208">የማሳያ ምስል ጥራት</translation> +<translation id="2770954829020464827">የእርስዎን ማያ ገጽ በሚያጋሩበት ጊዜ ዝርዝሮች ይደበቃሉ</translation> <translation id="2771268254788431918">የተንቀሳቃሽ ስልክ ውሂብ ገቢር ሆኗል</translation> <translation id="2771816809568414714">ቺዝ</translation> <translation id="2772936498786524345">Sneaky</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">ሊገኙ የሚችሉ የዩኤስቢ መሣሪያዎች እዚህ ላይ ብቅ ይላሉ።</translation> <translation id="3202131003361292969">ዱካ</translation> <translation id="3202173864863109533">የዚህ ትር ተሰሚ ድምጸ-ከል ተደርጎበታል።</translation> +<translation id="3202218848974251205">የግላዊነት ማጠሪያ</translation> <translation id="3208321278970793882">መተግበሪያ</translation> <translation id="3208584281581115441">አሁን ፈትሽ</translation> <translation id="3208703785962634733">ያልተረጋገጠ</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">የእርስዎ መለያ የGoogle Play መደብርን እንዲደርስ ለማንቃት እባክዎ በእርስዎ የማንነት አቅራቢ በኩል ያረጋግጡ።</translation> <translation id="3462311546193741693">ከአብዛኛዎቹ ጣቢያዎች ዘግተው ያስወጣዎታል። በእርስዎ የGoogle መለያ ውስጥ በመለያ እንደገቡ ስለሚቆዩ የእርስዎ የሰመረ ውሂብ ሊጸዳ ይችላል።</translation> <translation id="3462413494201477527">የመለያ ቅንብር ይተው?</translation> +<translation id="3464145797867108663">የስራ መገለጫን አክል</translation> <translation id="346431825526753">ይሄ በ<ph name="CUSTODIAN_EMAIL" /> የሚቀናበር የህጻናት መለያ ነው።</translation> <translation id="3468298837301810372">መለያ</translation> <translation id="3468999815377931311">የAndroid ስልክ</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">ልክ አዲስ ባህሪያት ሲገኙ ማቅረብ</translation> <translation id="3602290021589620013">ቅድመ-ዕይታ</translation> <translation id="3603622770190368340">የአውታረ መረብ እውቅና ማረጋገጫ ያግኙ</translation> +<translation id="3604193429970465812">ሁለተኛ መለያዎች</translation> <translation id="3604713164406837697">ልጣፍ ይለውጡ</translation> <translation id="3605780360466892872">የኮሌታ ቁልፍ</translation> <translation id="3608576286259426129">የተጠቃሚ ምስል ቅድመ-እይታ</translation> @@ -2606,6 +2613,7 @@ <ph name="CONTROL_PANEL_APPLET_NAME" />ን መጀመር ይፈልጋሉ?</translation> <translation id="394183848452296464">አቋራጮችን መፍጠር አልተቻለም</translation> +<translation id="3943494825379372497">መተግበሪያዎች እና ገጾች ወደነበሩበት ይመለሱ?</translation> <translation id="3943582379552582368">&ተመለስ</translation> <translation id="3943857333388298514">ለጥፍ</translation> <translation id="3948116654032448504">ለምስል <ph name="SEARCH_ENGINE" />ን ይ&ፈልጉ</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">እነዚህ ቅጥያዎች በዚህ ጣቢያ ላይ ያለውን መረጃ መመልከትና መቀየር አያስፈልጋቸውም።</translation> <translation id="4046123991198612571">ቀጣይ ትራክ</translation> <translation id="4047726037116394521">ወደ መነሻ ሂድ</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# እውቂያ አይገኝም። የአቅራቢያ ማጋሪያን ከእነሱ ጋር ለመጠቀም ከGoogle መለያቸው ጋር የተጎዳኘውን የኢሜይል አድራሻ ወደ የእርስዎ እውቂያዎች ያክሉት።}one{# እውቂያዎች አይገኙም። የአቅራቢያ ማጋሪያን ከእነሱ ጋር ለመጠቀም ከGoogle መለያቸው ጋር የተጎዳኙትን የኢሜይል አድራሻዎች ወደ የእርስዎ እውቂያዎች ያክሏቸው።}other{# እውቂያዎች አይገኙም። የአቅራቢያ ማጋሪያን ከእነሱ ጋር ለመጠቀም ከGoogle መለያቸው ጋር የተጎዳኙትን የኢሜይል አድራሻዎች ወደ የእርስዎ እውቂያዎች ያክሏቸው።}}</translation> <translation id="4050225813016893843">የማረጋገጫ ዘዴ</translation> <translation id="4052120076834320548">በጣም ትንሽ</translation> <translation id="4056908315660577142">የእርስዎ ወላጅ ለ<ph name="APP_NAME" /> Chrome መተግበሪያ ያቀናበሩት የጊዜ ገደብ ላይ ደርሰዋል። ነገ ለ<ph name="TIME_LIMIT" /> ሊጠቀሙበት ይችላሉ።</translation> @@ -3172,7 +3181,6 @@ <translation id="4646675363240786305">ወደቦች</translation> <translation id="4647090755847581616">ትር &ዝጋ</translation> <translation id="4647283074445570750">ደረጃ <ph name="CURRENT_STEP" /> ከ<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{ወደ የእርስዎ ጡባዊ ሲገቡ መተግበሪያ ይጀምሩ}computer{ወደ የእርስዎ ኮምፒውተር ሲገቡ መተግበሪያ ይጀምሩ}other{ወደ የእርስዎ መሣሪያ ሲገቡ መተግበሪያ ይጀምሩ}}</translation> <translation id="4647697156028544508">እባክዎ የ«<ph name="DEVICE_NAME" />»ን ፒን ያስገቡ፦</translation> <translation id="4648491805942548247">በቂ ያልሆኑ ፍቃዶች</translation> <translation id="4648499713050786492">አንድ ሰው ከማከልዎ በፊት እባክዎ የእርስዎን መገለጫ ይክፈቱ።</translation> @@ -3336,6 +3344,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ይመስላል (ነባሪ)</translation> <translation id="4864369630010738180">በመግባት ላይ...</translation> <translation id="4864805589453749318">የትምህርት ቤት መለያ ለማከል ፈቃድ እየሰጠ ያለውን ወላጅ ይምረጡ።</translation> +<translation id="4866265760644917470">መገለጫ በተሳካ ሁኔታ ታክሏል።</translation> <translation id="486635084936119914">ካወረዱ በኋላ የተወሰኑ የፋይል አይነቶችን ክፈት</translation> <translation id="48704129375571883">ተጨማሪ ባህሪያትን ያክሉ</translation> <translation id="4870758487381879312">የውቅረት መረጃን ለማግኘት በአስተዳዳሪ የቀረበውን የይለፍ ቃል ያስገቡ</translation> @@ -3619,6 +3628,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{የተጠለፈው የይለፍ ቃል በተሳካ ሁኔታ ተቀይሯል። # ተጨማሪ የተጠለፈ ይለፍ ቃል አለዎት። Chrome ይህን የይለፍ ቃል አሁን መፈተሽ ይመክራል።}one{የተጠለፈው የይለፍ ቃል በተሳካ ሁኔታ ተቀይሯል። # ተጨማሪ የተጠለፉ የይለፍ ቃላት አለዎት። Chrome እነዚህን የይለፍ ቃላት አሁን መፈተሽ ይመክራል።}other{የተጠለፈው የይለፍ ቃል በተሳካ ሁኔታ ተቀይሯል። # ተጨማሪ የተጠለፉ የይለፍ ቃላት አለዎት። Chrome እነዚህን የይለፍ ቃላት አሁን መፈተሽ ይመክራል።}}</translation> <translation id="5207949376430453814">የጽሑፍ ድፋቱን አድምቅ</translation> <translation id="5209320130288484488">ምንም መሣሪያዎች አልተገኙም</translation> +<translation id="5209572028385096813">እኚህ ተጠቃሚ በFamily Link የሚተዳደሩ ናቸው</translation> <translation id="5210365745912300556">ትር ዝጋ</translation> <translation id="5213481667492808996">የእርስዎ የ«<ph name="NAME" />» ውሂብ አገልግሎት ጥቅም ላይ ለመዋል ዝግጁ ነው</translation> <translation id="5213891612754844763">የተኪ ቅንብሮችን አሳይ</translation> @@ -3704,6 +3714,7 @@ <translation id="5302048478445481009">ቋንቋ</translation> <translation id="5302932258331363306">ምትኮችን አሳይ</translation> <translation id="5304276686222516262">የእውቂያ ዝርዝር ማውረድ አልተቻለም። እባክዎ የአውታረ መረብ ግንኙነትዎን ያረጋግጡ ወይም<a href="#" id="tryAgainLink">እንደገና ይሞክሩ</a>.</translation> +<translation id="5305145881844743843">ይህ መለያ በ<ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /> የሚተዳደር ነው</translation> <translation id="5305688511332277257">ምንም አልተጫነም</translation> <translation id="5307030433605830021">ምንጭ አይደገፍም</translation> <translation id="5308380583665731573">ይገናኙ</translation> @@ -3717,6 +3728,7 @@ <translation id="5317780077021120954">አስቀምጥ</translation> <translation id="5319359161174645648">Google Chromeን ይመክራል</translation> <translation id="5320112320661303273">አስቀድመው በተለየ መሣሪያ ላይ ረዳትን ያዋቀሩ ይመስላል። የሚከተለውን ቅንብር በማብራት ከእርስዎ ረዳት ተጨማሪ ያግኙ።</translation> +<translation id="5320135788267874712">አዲስ የመሣሪያ ስም</translation> <translation id="532247166573571973">አገልጋዩ የማይደረስበት ሊሆን ይችላል። ቆይተው እንደገና ይሞክሩ።</translation> <translation id="5324300749339591280">የመተግበሪያዎች ዝርዝር</translation> <translation id="5324780743567488672">የእርስዎን መገኛ አካባቢ በመጠቀም በራስ-ሰር የጊዜ ቀጠናን ያዘጋጃል</translation> @@ -4084,6 +4096,7 @@ <translation id="5740820643029013514">ጸጥ ያለ መልዕክት መላላክን ይጠቀሙ (የሚመከር)</translation> <translation id="574104302965107104">ግልባጭን አሳይ</translation> <translation id="574209121243317957">ቅላፄ</translation> +<translation id="5742505912938664543">እዚህ ሁለተኛ መለያ ሲያክሉ ድሩን ሊያስሱ፣ መተግበሪያዎችን ሊያወርዱ እና ይህን መለያ የሚጠቀሙ የእርስዎን Gmail እና ሌሎች የGoogle አገልግሎቶችን ማየት ይችላሉ።</translation> <translation id="5746169159649715125">እንደ PDF አስቀምጥ</translation> <translation id="5747552184818312860">ጊዜው አልፎበታል</translation> <translation id="5747785204778348146">ገንቢ - ያልተረጋጋ</translation> @@ -4424,6 +4437,7 @@ <translation id="6129953537138746214">ባዶ ቦታ</translation> <translation id="6130692320435119637">Wi-Fi ያክሉ</translation> <translation id="6136114942382973861">የውርዶች አሞሌን ዝጋ</translation> +<translation id="6136287496450963112">የእርስዎ ደህንነት ቁልፍ በፒን ጥበቃ እየተደረገለት አይደለም ያለው። የጣት አሻራዎችን ለማቀናበር መጀመሪያ ፒን ይፍጠሩ።</translation> <translation id="6137767437444130246">የተጠቃሚ እውቅና ማረጋገጫ</translation> <translation id="6138680304137685902">የX9.62 ECDSA ፊርማ በSHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />፣ ምንም አውታረ መረብ የለም</translation> @@ -4604,6 +4618,7 @@ <translation id="6331566915566907158">የChrome OS ባህሪያት እና አፈጻጸም እንዲሻሻል ያግዙ</translation> <translation id="6331818708794917058">ጣቢያዎች ከMIDI መሣሪያዎች ጋር ለመገናኘት መጠየቅ ይችላሉ</translation> <translation id="6333064448949140209">ፋይሉ ለመታረም ወደ Google ይላካል</translation> +<translation id="6334444530352320327">የእርስዎ የመተግበሪያዎች እና የስርዓተ ክወና ቅንብሮች እርስዎ በዚህ መለያ በገቡባቸው Chromebooks ላይ ይሰምራሉ።<ph name="LINK_BEGIN" />የስምረት ቅንብሮች<ph name="LINK_END" /></translation> <translation id="6338981933082930623">ሁሉም ጣቢያዎች ማንኛውንም ማስታወቂያ ለእርስዎ ሊያሳዩዎት ይችላሉ</translation> <translation id="6339668969738228384">ለ<ph name="USER_EMAIL_ADDRESS" /> አዲስ መገለጫ ይፈጠሩ</translation> <translation id="6340017061976355871">ከአገልጋዩ ጋር መገናኘት አልተቻለም። እባክዎ የአውታረ መረብዎን ግንኙነት ይፈትሹትና እንደገና ይሞክሩ። ችግሩ ከቀጠለ የእርስዎን Chromebook ዳግም ያስጀምሩት።</translation> @@ -4905,6 +4920,7 @@ <translation id="6709133671862442373">ዜና</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />ን በመጠቀም አገናኝ</translation> <translation id="6710213216561001401">ቀዳሚ</translation> +<translation id="6713233729292711163">የስራ መገለጫን አክል</translation> <translation id="6715803357256707211">የእርስዎን የLinux መተግበሪያ መጫን ወቅት ስህተት አጋጥሟል። ለዝርዝሮች ማሳወቂያ ላይ ጠቅ ያድርጉ።</translation> <translation id="671619610707606484">ይህ በጣቢያዎች የተከማቸ <ph name="TOTAL_USAGE" /> ውሂብን ያጠፋል</translation> <translation id="671928215901716392">ማያ ገጽ ይቆልፉ</translation> @@ -5273,6 +5289,7 @@ <translation id="7121362699166175603">በአድራሻ አሞሌው ላይ ታሪክን እና ራስ-ማጠናቀቆችን ያጸዳል። የእርስዎ Google መለያ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ ሌሎች የአሰሳ ታሪክ አይነቶች ሊኖሩት ይችላል።</translation> <translation id="7121438501124788993">የገንቢ ሁነታ</translation> <translation id="7121728544325372695">ዘመናዊ ዳሾች</translation> +<translation id="7122353087820324370">የመተግበሪያዎች እና የስርዓተ ክወና ቅንብሮች ከሁለተኛ መለያዎች ጋር አይሰምሩም።</translation> <translation id="7123030151043029868">ብዙ ፋይሎችን በራስ-ሰር ለማውረድ ተፈቅዷል</translation> <translation id="7123360114020465152">ከአሁን በኋላ አይደገፍም</translation> <translation id="7125148293026877011">Crostiniን ይሰርዙ</translation> @@ -5587,6 +5604,7 @@ <translation id="750509436279396091">የውርዶች አቃፊን ከፍት</translation> <translation id="7506093026325926984">ይህ የይለፍ ቃል በዚህ መሣሪያ ላይ ይቀመጣል</translation> <translation id="7506130076368211615">አዲስ አውታረ መረብ ያቀናብሩ</translation> +<translation id="7506242536428928412">አዲሱን የደህንነት ቁልፍዎን ለመጠቀም አዲስ ፒን ያቀናብሩ</translation> <translation id="7506541170099744506">የእርስዎ <ph name="DEVICE_TYPE" /> በተሳካ ሁኔታ ለድርጅት አስተዳደር ተመዝግቧል።</translation> <translation id="7507207699631365376">የዚህን አቅራቢ <ph name="BEGIN_LINK" />የግላዊነት መመሪያ<ph name="END_LINK" /> ይመልከቱ</translation> <translation id="7507930499305566459">የሁኔታ መላሽ ሰርቲፍኬት</translation> @@ -5750,6 +5768,7 @@ <translation id="7691077781194517083">ይህን የደህንነት ቁልፍ ዳግም ማቀናበር አይቻልም። ስህተት <ph name="ERROR_CODE" />።</translation> <translation id="7691698019618282776">Crostiniን ማላቅ</translation> <translation id="7696063401938172191">በእርስዎ «<ph name="PHONE_NAME" />» ላይ፦</translation> +<translation id="7697166915480294040">የእርስዎን ማያ ገጽ በሚያጋሩበት ጊዜ ዝርዝሮች ይደበቃሉ</translation> <translation id="7697598343108519171">የQR ኮድ ለመቃኘት ካሜራ ይጠቀሙ</translation> <translation id="7699968112832915395">መለያን ማከል አይቻልም</translation> <translation id="7701040980221191251">ምንም</translation> @@ -6211,6 +6230,8 @@ <translation id="8184472985242519288">ወጥ የሆነ</translation> <translation id="8186609076106987817">አገልጋዩ ፋይሉን ሊያገኝ አልቻለም።</translation> <translation id="8188389033983459049">የመሣሪያዎን ቅንብሮችዎ ይፈትሹና ለመቀጠል ያብሩት</translation> +<translation id="8189306097519446565">የትምህርት ቤት መለያዎች</translation> +<translation id="8189750580333936930">የግላዊነት ማጠሪያ</translation> <translation id="8190193592390505034">ከ<ph name="PROVIDER_NAME" /> ጋር በመገናኘት ላይ</translation> <translation id="8191230140820435481">መተግበሪያዎችዎን፣ ቅጥያዎችዎን እና ገጽታዎችዎን ያቀናብራል</translation> <translation id="8195027750202970175">ዲስክ ላይ ያለው መጠን</translation> @@ -6903,6 +6924,7 @@ <translation id="8986362086234534611">እርሳ</translation> <translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation> <translation id="8987927404178983737">ወር</translation> +<translation id="8989823300731803443">ካቆሙበት ይቀጥሉ።</translation> <translation id="8990209962746788689">የQR ኮድ መፍጠር አልተቻለም</translation> <translation id="8991520179165052608">ጣቢያ የእርስዎን ማይክሮፎን መጠቀም ይችላል</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 ንጥል}one{# ንጥሎች}other{# ንጥሎች}}</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 1d3b3af..056e09a 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -3176,7 +3176,6 @@ <translation id="4646675363240786305">المنافذ</translation> <translation id="4647090755847581616">إغلاق &علامة التبويب</translation> <translation id="4647283074445570750">الخطوة <ph name="CURRENT_STEP" /> من أصل <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{تشغيل التطبيق تلقائيًا عند تسجيل الدخول إلى الجهاز اللوحي}computer{تشغيل التطبيق تلقائيًا عند تسجيل الدخول إلى جهاز الكمبيوتر}other{تشغيل التطبيق تلقائيًا عند تسجيل الدخول إلى الجهاز}}</translation> <translation id="4647697156028544508">يُرجى إدخال رقم التعريف الشخصي لـ "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">أذونات غير كافية</translation> <translation id="4648499713050786492">يُرجى فتح قفل ملفك الشخصي قبل إضافة شخص.</translation> @@ -3721,6 +3720,7 @@ <translation id="5317780077021120954">حفظ</translation> <translation id="5319359161174645648">توصي Google باستخدام Chrome</translation> <translation id="5320112320661303273">يبدو أنه سبق لك إعداد "مساعد Google" على جهاز آخر. أنجِز مزيدًا من المهام باستخدام "مساعد Google" من خلال تفعيل الإعدادات التالية.</translation> +<translation id="5320135788267874712">الاسم الجديد للجهاز</translation> <translation id="532247166573571973">قد يتعذر الوصول إلى الخادم. حاول مرة أخرى.</translation> <translation id="5324300749339591280">قائمة التطبيقات</translation> <translation id="5324780743567488672">تعيين المنطقة الزمنية تلقائيا باستخدام موقعك</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index e667fa4..b76a8484 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -3167,7 +3167,6 @@ <translation id="4646675363240786305">প’ৰ্টসমূহ</translation> <translation id="4647090755847581616">&টেব বন্ধ কৰক</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />টাৰ ভিতৰত <ph name="CURRENT_STEP" /> নম্বৰ পদক্ষেপ</translation> -<translation id="4647420311443994946">{0,select, tablet{আপুনি নিজৰ টেবলেটত ছাইন ইন কৰিলে এপ্টো আৰম্ভ কৰক}computer{আপুনি নিজৰ কম্পিউটাৰত ছাইন ইন কৰিলে এপ্টো আৰম্ভ কৰক}other{আপুনি নিজৰ ডিভাইচত ছাইন ইন কৰিলে এপ্টো আৰম্ভ কৰক}}</translation> <translation id="4647697156028544508">অনুগ্ৰহ কৰি "<ph name="DEVICE_NAME" />"ৰ পিনটো দিয়ক:</translation> <translation id="4648491805942548247">অপর্যাপ্ত অনুমতি</translation> <translation id="4648499713050786492">কোনো ব্যক্তিক যোগ কৰাৰ পূর্বে আপোনাৰ প্ৰ'ফাইল আনলক কৰক।</translation> @@ -3712,6 +3711,7 @@ <translation id="5317780077021120954">ছেভ কৰক</translation> <translation id="5319359161174645648">Googleএ Chrome ব্যৱহাৰৰ চুপাৰিছ কৰে</translation> <translation id="5320112320661303273">আপুনি ইতিমধ্যে অন্য এটা ডিভাইচত Assistant ছেট আপ কৰিছে যেন লাগিছে। তলৰ ছেটিংটো অন কৰি আপোনাৰ Assistantৰ পৰা আৰু অধিক উপকৃত হওক।</translation> +<translation id="5320135788267874712">নতুন ডিভাইচৰ নাম</translation> <translation id="532247166573571973">ছাৰ্ভাৰ প্ৰাপ্তব্য নহ’বও পাৰে৷ পিছত আকৌ চেষ্টা কৰক।</translation> <translation id="5324300749339591280">এপৰ সূচী</translation> <translation id="5324780743567488672">আপোনাৰ অৱস্থান ব্যৱহাৰ কৰি স্বয়ংক্ৰিয়ভাৱে সময় মণ্ডল ছেট কৰক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 344af09..56af11b2 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Şəbəkə yoxdur</translation> <translation id="1056898198331236512">Xəbərdarlıq</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Yeni PIN kodu daxil edin. PIN minimum bir simvoldan ibarət olmalıdır. Bunlar hərf, rəqəm və digər simvollar ola bilər.}other{Yeni PIN kodu daxil edin. PIN minimum # simvoldan ibarət olmalıdır. Bunlar hərf, rəqəm və digər simvollar ola bilər.}}</translation> <translation id="1059944192885972544">'<ph name="SEARCH_TEXT" />' üçün <ph name="NUM" /> Tab tapılıb</translation> <translation id="1060292118287751956">Ekranın güncəllənmə tezliyini təyin edir</translation> <translation id="1061904396131502319">Fasilə vaxtıdır</translation> @@ -631,9 +632,11 @@ <translation id="1688935057616748272">Hərf yazın</translation> <translation id="168991973552362966">Yaxınlıqdakı printeri əlavə edin</translation> <translation id="1689945336726856614">Linki kopyalayın</translation> +<translation id="1690248886740053041">Mobil şəbəkəyə qoşulmaq mümkün deyil. Texniki dəstək üçün, operatorunuzla əlaqə saxlayın.</translation> <translation id="1692115862433274081">Başqa hesab istifadə edin</translation> <translation id="1692118695553449118">Sinxronizasiya aktivdir</translation> <translation id="1692210323591458290">Tünd-bənövşəyi</translation> +<translation id="169279809881363536">Profil tapılmadı. Yeni bir şəbəkə ayarlamaq üçün cihazın kamerasını istifadə edərək QR kodunu skanlayın və ya operatorunuz tərəfindən verilən aktivasiya kodunu daxil edin.</translation> <translation id="1697150536837697295">İncəsənət</translation> <translation id="1697686431566694143">Fayla düzəliş edin</translation> <translation id="1698122934742150150">Yalnız cari incognito sessiyası</translation> @@ -1569,6 +1572,7 @@ <translation id="2770465223704140727">Siyahıdan silin</translation> <translation id="2770690685823456775">Parolları digər qovluğa eksport edin</translation> <translation id="2770929488047004208">Monitorun ayırdetmə dəqiqliyi</translation> +<translation id="2770954829020464827">Ekranınızı paylaşdığınız zaman detallar gizlədilir</translation> <translation id="2771268254788431918">Mobil data aktiv edildi</translation> <translation id="2771816809568414714">Pendir</translation> <translation id="2772936498786524345">Qorxaq</translation> @@ -1936,6 +1940,7 @@ <translation id="3201422919974259695">Əlçatan USB cihazları burada görünəcək.</translation> <translation id="3202131003361292969">Yol</translation> <translation id="3202173864863109533">Bu vərəqənin audiosu susdurulur.</translation> +<translation id="3202218848974251205">Məxfilik Sendboksu</translation> <translation id="3208321278970793882">Tətbiq</translation> <translation id="3208584281581115441">İndi yoxlayın</translation> <translation id="3208703785962634733">Təsdiq olunmadı</translation> @@ -2156,6 +2161,7 @@ <translation id="3459697287128633276">Hesabın Google Play Mağazaya girişini aktiv etmək üçün İdentifikasiya Provayderi ilə doğrulayın.</translation> <translation id="3462311546193741693">Bir çox saytlardan çıxış edəcəksiniz. Google Hesabınızdan çıxmayacaqsınız. Sinxronizasiya olunmuş data silinə bilər.</translation> <translation id="3462413494201477527">Hesab quraşdırması ləğv edilsin?</translation> +<translation id="3464145797867108663">İş profili əlavə edin</translation> <translation id="346431825526753">Bu, <ph name="CUSTODIAN_EMAIL" /> tərəfindən idarə olunan uşaq hesabıdır.</translation> <translation id="3468298837301810372">Etiket</translation> <translation id="3468999815377931311">Android telefonu</translation> @@ -2277,6 +2283,7 @@ <translation id="360180734785106144">Yeni funksiyalar əlçatan olduqda təklif edin</translation> <translation id="3602290021589620013">Önizləmə</translation> <translation id="3603622770190368340">Şəbəkə sertifikatını əldə edin</translation> +<translation id="3604193429970465812">İkinci hesablar</translation> <translation id="3604713164406837697">Divar kağızını dəyişin</translation> <translation id="3605780360466892872">Buttondown</translation> <translation id="3608576286259426129">İstifadəçi şəkil önizləməsi</translation> @@ -2601,6 +2608,7 @@ <ph name="CONTROL_PANEL_APPLET_NAME" /> funksiyasına başlamaq istəyirsiniz?</translation> <translation id="394183848452296464">Qısayol yaratmaq alınmadı</translation> +<translation id="3943494825379372497">Tətbiq və səhifələr bərpa edilsin?</translation> <translation id="3943582379552582368">Geri</translation> <translation id="3943857333388298514">Yapışdırın.</translation> <translation id="3948116654032448504"><ph name="SEARCH_ENGINE" /> şəkil axtarır</translation> @@ -2686,6 +2694,7 @@ <translation id="4046013316139505482">Bu artırmaların bu saytdakı məlumatları görməsinə və dəyişməsinə ehtiyac yoxdur.</translation> <translation id="4046123991198612571">Növbəti trek</translation> <translation id="4047726037116394521">Əsas səhifəyə keçin</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt əlçatan deyil. Onlarla Yaxınlıqda Paylaşımı istifadə etmək üçün onların Google Hesabı ilə əlaqəli e-poçt ünvanını kontaktlarınıza əlavə edin.}other{# kontakt əlçatan deyil. Onlarla Yaxınlıqda Paylaşımı istifadə etmək üçün onların Google Hesabları ilə əlaqəli e-poçt ünvanlarını kontaktlarınıza əlavə edin.}}</translation> <translation id="4050225813016893843">İdentifikasiya üsulu</translation> <translation id="4052120076834320548">Xırda</translation> <translation id="4056908315660577142">Valideyninizin <ph name="APP_NAME" /> Chrome tətbiqi üçün təyin etdiyi vaxt limitinə çatdınız. Ondan sabah <ph name="TIME_LIMIT" /> müddətinə istifadə edə bilərsiniz.</translation> @@ -3167,7 +3176,6 @@ <translation id="4646675363240786305">Portlar</translation> <translation id="4647090755847581616">&Vərəqəni qapadın</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /> mərhələ</translation> -<translation id="4647420311443994946">{0,select, tablet{Planşetə daxil olduqda tətbiqi başladın}computer{Kompüterə daxil olduqda tətbiqi başladın}other{Cihaza daxil olduqda tətbiqi başladın}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" üçün PIN daxil etməyiniz xahiş olunur:</translation> <translation id="4648491805942548247">Yetərsiz icazələr</translation> <translation id="4648499713050786492">Bir şəxsi əlavə etməmişdən əvvəl, profilinizin kilidini açın.</translation> @@ -3331,6 +3339,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Defolt)</translation> <translation id="4864369630010738180">Daxil olunur...</translation> <translation id="4864805589453749318">Məktəb hesabı əlavə etmək üçün icazəni verən valideyni seçin.</translation> +<translation id="4866265760644917470">Profil uğurla əlavə edildi.</translation> <translation id="486635084936119914">Endirdikdən sonra müəyyən fayl növlərini avtomatik açın</translation> <translation id="48704129375571883">Başqa funksiyalar əlavə edin</translation> <translation id="4870758487381879312">Konfiqurasiya məlumatı üçün adminin yaratdığı parolu daxil edin</translation> @@ -3614,6 +3623,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Oğurlanmış parol uğurla dəyişdirildi. Daha # oğurlanmış parolunuz var. Chrome bu parolu indi yoxlamağı tövsiyə edir.}other{Oğurlanmış parol uğurla dəyişdirildi. Daha # oğurlanmış parolunuz var. Chrome bu parolları indi yoxlamağı tövsiyə edir.}}</translation> <translation id="5207949376430453814">Mətn karetini vurğulayın</translation> <translation id="5209320130288484488">Heç bir cihaz tapılmadı</translation> +<translation id="5209572028385096813">Bu istifadəçi Family Link tərəfindən idarə olunur</translation> <translation id="5210365745912300556">Paneli qapadın</translation> <translation id="5213481667492808996">"<ph name="NAME" />" data xidmətiniz istifadəyə hazırdır</translation> <translation id="5213891612754844763">Proksi ayarlarını göstərin</translation> @@ -3699,6 +3709,7 @@ <translation id="5302048478445481009">Dil</translation> <translation id="5302932258331363306">Əvəzetmələri Göstərin</translation> <translation id="5304276686222516262">Kontakt siyahısını endirmək olmur. Şəbəkə bağlantınızı yoxlayın və ya <a href="#" id="tryAgainLink">yenidən sınayın</a>.</translation> +<translation id="5305145881844743843">Bu hesab <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /> tərəfindən idarə olunur</translation> <translation id="5305688511332277257">Heç biri quraşdırılmayıb</translation> <translation id="5307030433605830021">Mənbə dəstəklənmir</translation> <translation id="5308380583665731573">Qoşun</translation> @@ -3712,6 +3723,7 @@ <translation id="5317780077021120954">Yadda saxlayın</translation> <translation id="5319359161174645648">Google, Chrome'u tövsiyə edir</translation> <translation id="5320112320661303273">Görünür, hazırda Assistenti başqa cihazda ayarlamısınız. Aşağıdakı ayarı aktiv edərək Assistentdən maksimum faydalanın.</translation> +<translation id="5320135788267874712">Yeni cihaz adı</translation> <translation id="532247166573571973">Server əlçatmaz ola bilər. Sonra cəhd edin.</translation> <translation id="5324300749339591280">Tətbiq siyahısı</translation> <translation id="5324780743567488672">Məkanınızdan istifadə edərək saat qurşağını avtomatik ayarlayın</translation> @@ -4079,6 +4091,7 @@ <translation id="5740820643029013514">Səssiz mesajlaşmadan istifadə edin (tövsiyə edilir)</translation> <translation id="574104302965107104">Displeyin əks etdirilməsi</translation> <translation id="574209121243317957">Pitç</translation> +<translation id="5742505912938664543">Buraya ikinci hesab əlavə etdikdə, həmin hesabdan istifadə edərək vebə baxış keçirə, tətbiqləri endirə, Gmail və digər Google xidmətlərinizi yoxlaya bilərsiniz.</translation> <translation id="5746169159649715125">PDF olaraq saxlayın</translation> <translation id="5747552184818312860">Vaxtı bitir</translation> <translation id="5747785204778348146">Developer - qeyri-stabil</translation> @@ -4417,6 +4430,7 @@ <translation id="6129953537138746214">Boşluq</translation> <translation id="6130692320435119637">Wi-Fi əlavə edin</translation> <translation id="6136114942382973861">Endirilənlər panelini bağlayın</translation> +<translation id="6136287496450963112">Təhlükəsizlik açarınız PIN ilə qorunmur. Barmaq izlərini idarə etmək üçün əvvəlcə PIN yaradın.</translation> <translation id="6137767437444130246">İstifadəçi sertifikatı</translation> <translation id="6138680304137685902">X9.62 ECDSA SHA-384 ilə imza</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, şəbəkə yoxdur</translation> @@ -4597,6 +4611,7 @@ <translation id="6331566915566907158">Chrome ƏS funksiyalarını və performansı təkmilləşdirməyə yardım edin</translation> <translation id="6331818708794917058">Saytlar MIDI cihazlara qoşulmaq üçün icazə istəyə bilər</translation> <translation id="6333064448949140209">Fayl sazlama üçün Google'a göndəriləcək</translation> +<translation id="6334444530352320327">Tətbiqləriniz və OS ayarlarınız bu hesabla daxil olduğunuz Chromebook'larda sinxronizasiya ediləcəkdir.<ph name="LINK_BEGIN" />Ayarları Sinxronizasiya edin<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Bütün saytlar sizə istənilən reklamı göstərə bilər</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> üçün yeni profil yaradın</translation> <translation id="6340017061976355871">Server ilə qoşulmaq mümkün olmadı. Şəbəkə bağlantısını yoxlayın və yenidən cəhd edin. Problem davam edərsə, Chromebook'u yenidən başladın.</translation> @@ -4898,6 +4913,7 @@ <translation id="6709133671862442373">Xəbərlər</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> istifadə edərək qoşulun</translation> <translation id="6710213216561001401">Əvvəlki</translation> +<translation id="6713233729292711163">İş Profili əlavə edin</translation> <translation id="6715803357256707211">Linux tətbiqi quraşdırılan zaman xəta baş verdi. Detallar üçün bildirişə toxunun.</translation> <translation id="671619610707606484">Bununla saytlar tərəfindən saxlanılan bütün <ph name="TOTAL_USAGE" /> data silinəcək</translation> <translation id="671928215901716392">Ekranı kilidləyin</translation> @@ -5266,6 +5282,7 @@ <translation id="7121362699166175603">Ünvan penelindəki tarixçə və avtomatik tamamlamanı silir. <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> linkində Google Hesabına məxsus axtarış tarixçəsinin başqa formaları ola bilər.</translation> <translation id="7121438501124788993">Tərtibatçı Rejimi</translation> <translation id="7121728544325372695">Ağıllı Tirelər</translation> +<translation id="7122353087820324370">Tətbiqlər və OS ayarları ikinci hesablarla sinxronizasiya edilmir.</translation> <translation id="7123030151043029868">Çoxsaylı faylların avtomatik endirilməsinə icazə verilib</translation> <translation id="7123360114020465152">Daha dəstəklənmir</translation> <translation id="7125148293026877011">Crostini'ni silin</translation> @@ -5580,6 +5597,7 @@ <translation id="750509436279396091">Endirilənlər qovluğunu açın</translation> <translation id="7506093026325926984">Bu parol bu cihazda saxlanılıb</translation> <translation id="7506130076368211615">Yeni şəbəkə ayarlayın</translation> +<translation id="7506242536428928412">Yeni təhlükəsizlik açarınızı istifadə etmək üçün yeni PIN ayarlayın</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> cihazınız sahibkarlıq idarəçiliyi üçün uğurla qeydiyyatdan keçdi.</translation> <translation id="7507207699631365376">Bu təminatçının <ph name="BEGIN_LINK" />məxfilik siyasətinə<ph name="END_LINK" /> baxın</translation> <translation id="7507930499305566459">Status Responder Certificate</translation> @@ -5743,6 +5761,7 @@ <translation id="7691077781194517083">Bu güvənlik açarını sıfırlamaq mümkün deyil. Xəta <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini'nin güncəllənməsi</translation> <translation id="7696063401938172191">"<ph name="PHONE_NAME" />" telefonunuzda:</translation> +<translation id="7697166915480294040">Ekranınızı paylaşdığınız zaman detallar gizlədilir</translation> <translation id="7697598343108519171">QR kodu skanlamaq üçün kameranı istifadə edin</translation> <translation id="7699968112832915395">Hesab əlavə etmək olmur</translation> <translation id="7701040980221191251">Heç bir</translation> @@ -6198,6 +6217,8 @@ <translation id="8184472985242519288">Uniforma</translation> <translation id="8186609076106987817">Server faylı tapa bilmədi.</translation> <translation id="8188389033983459049">Cihaz ayarlarını yoxlayın və aktiv edərək davam edin</translation> +<translation id="8189306097519446565">Məktəb hesabları</translation> +<translation id="8189750580333936930">Məxfilik Sendboksu</translation> <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> provayderinə qoşulur</translation> <translation id="8191230140820435481">Tətbiqlər, artırmalar və temalarınızı idarə edin</translation> <translation id="8195027750202970175">Disk ölçüsü</translation> @@ -6887,6 +6908,7 @@ <translation id="8986362086234534611">Unudun</translation> <translation id="8986494364107987395">Google'a istifadəçi statistikalarını və qəza raportlarını avtomatik göndərin</translation> <translation id="8987927404178983737">Ay</translation> +<translation id="8989823300731803443">Qaldığınız yerdən davam edin.</translation> <translation id="8990209962746788689">QR kod yaratmaq olmur</translation> <translation id="8991520179165052608">Sayt mikrofonu paylaşa bilər</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 element}other{# element}}</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 9438664..eeb96eb 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -3176,7 +3176,6 @@ <translation id="4646675363240786305">Парты</translation> <translation id="4647090755847581616">&Закрыць укладку</translation> <translation id="4647283074445570750">Крок <ph name="CURRENT_STEP" /> з <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Запускаць праграму пры ўваходзе ва ўліковы запіс на планшэце}computer{Запускаць праграму пры ўваходзе ва ўліковы запіс на камп'ютары}other{Запускаць праграму пры ўваходзе ва ўліковы запіс на прыладзе}}</translation> <translation id="4647697156028544508">Увядзіце PIN-код для прылады "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Недастаткова дазволаў</translation> <translation id="4648499713050786492">Перш чым дадаваць карыстальніка, разблакіруйце свой профіль.</translation> @@ -3721,6 +3720,7 @@ <translation id="5317780077021120954">Захаваць</translation> <translation id="5319359161174645648">Google рэкамендуе браўзер Chrome</translation> <translation id="5320112320661303273">Здаецца, вы ўжо наладзілі Памочніка на іншай прыладзе. Выкарыстоўвайце яго яшчэ больш эфектыўна, уключыўшы наступную наладу.</translation> +<translation id="5320135788267874712">Новая назва прылады</translation> <translation id="532247166573571973">Сервер можа быць недаступны. Паўтарыце спробу пазней.</translation> <translation id="5324300749339591280">Спіс праграм</translation> <translation id="5324780743567488672">Задаваць часавы пояс аўтаматычна – з дапамогай даных пра месцазнаходжанне</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 1415696..e655fce 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Няма мрежи</translation> <translation id="1056898198331236512">Предупреждение</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Въведете новия си ПИН. Той трябва да е с дължина поне един знак и може да съдържа букви, цифри и други знаци.}other{Въведете новия си ПИН. Той трябва да е с дължина поне # знака и може да съдържа букви, цифри и други знаци.}}</translation> <translation id="1059944192885972544">Бяха открити <ph name="NUM" /> раздела за „<ph name="SEARCH_TEXT" />“</translation> <translation id="1060292118287751956">Определя честотата на актуализиране на екрана</translation> <translation id="1061904396131502319">Скоро ще е време за почивка</translation> @@ -632,9 +633,11 @@ <translation id="1688935057616748272">Въведете буква</translation> <translation id="168991973552362966">Добавяне на принтер в близост</translation> <translation id="1689945336726856614">Копиране на &URL адреса</translation> +<translation id="1690248886740053041">Не може да се установи връзка с мобилна мрежа. За техническа поддръжка се обърнете към оператора си.</translation> <translation id="1692115862433274081">Използване на друг профил</translation> <translation id="1692118695553449118">Синхронизирането е включено</translation> <translation id="1692210323591458290">Тъмнолилаво</translation> +<translation id="169279809881363536">Не бяха открити профили. За да настроите нова мрежа, сканирайте QR кода с камерата на устройството или въведете кода за активиране, предоставен от оператора ви.</translation> <translation id="1697150536837697295">Изкуство</translation> <translation id="1697686431566694143">Редактиране на файла</translation> <translation id="1698122934742150150">Само за текущата сесия в режим „инкогнито“</translation> @@ -1571,6 +1574,7 @@ <translation id="2770465223704140727">Премахване от списъка</translation> <translation id="2770690685823456775">Експортирайте паролите си в друга папка.</translation> <translation id="2770929488047004208">Разделителна способност на монитора</translation> +<translation id="2770954829020464827">Подробностите са скрити, когато споделяте екрана си</translation> <translation id="2771268254788431918">Мобилните данни са активирани</translation> <translation id="2771816809568414714">Сирене</translation> <translation id="2772936498786524345">Нинджа</translation> @@ -1938,6 +1942,7 @@ <translation id="3201422919974259695">Наличните USB устройства ще се показват тук.</translation> <translation id="3202131003361292969">Път</translation> <translation id="3202173864863109533">Звукът на този раздел е спрян.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">Приложение</translation> <translation id="3208584281581115441">Проверка сега</translation> <translation id="3208703785962634733">Непотвърдено</translation> @@ -2158,6 +2163,7 @@ <translation id="3459697287128633276">За да имате достъп до Google Play Магазин с профила си, моля, въведете идентификационните данни за използвания от вас доставчик на удостоверителни услуги.</translation> <translation id="3462311546193741693">Ще излезете от повечето сайтове, но не и от профила си в Google, за да могат да бъдат изчистени синхронизираните ви данни.</translation> <translation id="3462413494201477527">Да се анулира ли настройването на профила?</translation> +<translation id="3464145797867108663">Добавяне на служебен потребителски профил</translation> <translation id="346431825526753">Това е профил за деца, управляван от <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Етикет</translation> <translation id="3468999815377931311">Телефон с Android</translation> @@ -2279,6 +2285,7 @@ <translation id="360180734785106144">Предлагане на нови функции, когато станат достъпни</translation> <translation id="3602290021589620013">Визуализация</translation> <translation id="3603622770190368340">Получаване на мрежов сертификат</translation> +<translation id="3604193429970465812">Алтернативни профили</translation> <translation id="3604713164406837697">Промяна на тапета</translation> <translation id="3605780360466892872">Костюмар</translation> <translation id="3608576286259426129">Визуализация на потребителското изображение</translation> @@ -2605,6 +2612,7 @@ Искате ли да стартирате <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Прекият път не може да бъде създаден</translation> +<translation id="3943494825379372497">Да бъдат ли възстановени приложенията и страниците?</translation> <translation id="3943582379552582368">&Назад</translation> <translation id="3943857333388298514">Поставяне</translation> <translation id="3948116654032448504">&Търсене на изображението чрез <ph name="SEARCH_ENGINE" /></translation> @@ -2690,6 +2698,7 @@ <translation id="4046013316139505482">Тези разширения нямат нужда да виждат и променят информацията на сайта.</translation> <translation id="4046123991198612571">Следващ запис</translation> <translation id="4047726037116394521">Към началния екран</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# контакт не е налице. За да използвате функцията „Споделяне в близост“ с този човек, добавете към контактите си имейл адреса, свързан с профила му в Google.}other{# контакта не са налице. За да използвате функцията „Споделяне в близост“ с тях, добавете към контактите си имейл адресите, свързани със съответните профили в Google.}}</translation> <translation id="4050225813016893843">Метод за удостоверяване</translation> <translation id="4052120076834320548">Миниатюрен</translation> <translation id="4056908315660577142">Достигнахте времевия лимит, зададен от родителя ви за <ph name="APP_NAME" /> в Chrome. Можете да използвате приложението утре в продължение на <ph name="TIME_LIMIT" />.</translation> @@ -3173,7 +3182,6 @@ <translation id="4646675363240786305">Портове</translation> <translation id="4647090755847581616">&Затваряне на раздела</translation> <translation id="4647283074445570750">Стъпка <ph name="CURRENT_STEP" /> от <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Стартиране на приложение, когато влизате с профила си на таблета си}computer{Стартиране на приложение, когато влизате с профила си на компютъра си}other{Стартиране на приложение, когато влизате с профила си на устройството си}}</translation> <translation id="4647697156028544508">Моля, въведете ПИН кода за „<ph name="DEVICE_NAME" />“:</translation> <translation id="4648491805942548247">Недостатъчни разрешения</translation> <translation id="4648499713050786492">Моля, отключете потребителския си профил, преди да добавите човек.</translation> @@ -3337,6 +3345,7 @@ <translation id="4863769717153320198">Разделителната способност е <ph name="WIDTH" /> x <ph name="HEIGHT" /> (по подразбиране)</translation> <translation id="4864369630010738180">Извършва се влизане...</translation> <translation id="4864805589453749318">Изберете родителя, който предоставя разрешението за добавяне на училищен профил.</translation> +<translation id="4866265760644917470">Профилът бе добавен успешно.</translation> <translation id="486635084936119914">Автоматично отваряне на определени файлови типове след изтегляне</translation> <translation id="48704129375571883">Добавяне на допълнителни функции</translation> <translation id="4870758487381879312">Въведете паролата, предоставена от администратора, за да получите информация за конфигуриране</translation> @@ -3620,6 +3629,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Успешно променихте компрометираната парола. Имате още # компрометирана парола. Chrome препоръчва да я проверите сега.}other{Успешно променихте компрометираната парола. Имате още # компрометирани пароли. Chrome препоръчва да ги проверите сега.}}</translation> <translation id="5207949376430453814">Открояване на точката на вмъкване в текста</translation> <translation id="5209320130288484488">Няма намерени устройства</translation> +<translation id="5209572028385096813">Този потребител се управлява от Family Link</translation> <translation id="5210365745912300556">Затваряне на раздела</translation> <translation id="5213481667492808996">Услугата ви за данни „<ph name="NAME" />“ е готова за използване</translation> <translation id="5213891612754844763">Показване на настройките за прокси сървъра</translation> @@ -3705,6 +3715,7 @@ <translation id="5302048478445481009">Език</translation> <translation id="5302932258331363306">Show Substitutions</translation> <translation id="5304276686222516262">Списъкът с контакти не бе изтеглен. Проверете връзката си с мрежата или <a href="#" id="tryAgainLink">опитайте отново</a>.</translation> +<translation id="5305145881844743843">Този профил се управлява от <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Няма инсталирани</translation> <translation id="5307030433605830021">Източникът не се поддържа</translation> <translation id="5308380583665731573">Свързване</translation> @@ -3718,6 +3729,7 @@ <translation id="5317780077021120954">Запазване</translation> <translation id="5319359161174645648">Google препоръчва Chrome</translation> <translation id="5320112320661303273">Изглежда, че вече сте настроили Асистент на друго устройство. Възползвайте се в още по-голяма степен от Асистент, като включите следната настройка.</translation> +<translation id="5320135788267874712">Ново име на устройството</translation> <translation id="532247166573571973">Възможно е да няма достъп до сървъра. Опитайте отново по-късно.</translation> <translation id="5324300749339591280">Списък с приложения</translation> <translation id="5324780743567488672">Автоматично задаване на часовата зона въз основа на местоположението ви</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Използване на по-малко натрапчиви съобщения (препоръчително)</translation> <translation id="574104302965107104">Дублиране на екрана</translation> <translation id="574209121243317957">Височина</translation> +<translation id="5742505912938664543">Когато добавите алтернативен профил тук, ще можете да го използвате, за да сърфирате в мрежата, да изтегляте приложения и да работите с Gmail и другите услуги на Google.</translation> <translation id="5746169159649715125">Запазване като PDF файл</translation> <translation id="5747552184818312860">Изтича на</translation> <translation id="5747785204778348146">За програмисти – нестабилен</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Интервал</translation> <translation id="6130692320435119637">Добавяне на Wi-Fi</translation> <translation id="6136114942382973861">Затваряне на лентата на изтеглянето</translation> +<translation id="6136287496450963112">Ключът ви за сигурност не е защитен с ПИН. За да управлявате отпечатъците, първо създайте ПИН.</translation> <translation id="6137767437444130246">Потребителски сертификат</translation> <translation id="6138680304137685902">Подпис по X9.62 ECDSA с SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" /> – няма мрежа</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Помощ за подобряването на функциите и ефективността на Chrome OS</translation> <translation id="6331818708794917058">Сайтовете могат да извеждат запитвания за свързване с MIDI устройства</translation> <translation id="6333064448949140209">Файлът ще бъде изпратен до Google за отстраняване на грешки</translation> +<translation id="6334444530352320327">Приложенията ви и настройките на операционната система ще се синхронизират на устройствата Chromebook, в които сте влезли с този профил. <ph name="LINK_BEGIN" />Синхронизиране на настройките<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Всички сайтове могат да ви показват всякакви реклами</translation> <translation id="6339668969738228384">Създаване на нов потребителски профил за <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Не можа да се установи връзка със сървъра. Моля, проверете мрежовата си връзка и опитайте отново. Ако проблемът продължи, рестартирайте своя Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Новини</translation> <translation id="6709357832553498500">Свързване посредством <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Предишно</translation> +<translation id="6713233729292711163">Добавяне на служебен потребителски профил</translation> <translation id="6715803357256707211">Възникна грешка при инсталирането на приложението за Linux. За подробности кликнете върху известието.</translation> <translation id="671619610707606484">Съхраняваните от сайтовете данни в размер на <ph name="TOTAL_USAGE" /> ще бъдат изчистени</translation> <translation id="671928215901716392">Заключване на екрана</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Изчиства историята и автоматичните довършвания в адресната лента. В профила ви в Google може да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Режим за програмисти</translation> <translation id="7121728544325372695">Smart Dashes</translation> +<translation id="7122353087820324370">Приложенията и настройките на операционната система не се синхронизират с алтернативните профили.</translation> <translation id="7123030151043029868">Сайтове с разрешение за автоматично изтегляне на няколко файла</translation> <translation id="7123360114020465152">Вече не се поддържа</translation> <translation id="7125148293026877011">Изтриване на Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Отваряне на папката за изтегляния</translation> <translation id="7506093026325926984">Тази парола ще се запази на това устройство</translation> <translation id="7506130076368211615">Настройване на нова мрежа</translation> +<translation id="7506242536428928412">За да използвате новия си ключ за сигурност, задайте нов ПИН</translation> <translation id="7506541170099744506">Устройството ви <ph name="DEVICE_TYPE" /> е успешно записано за корпоративно управление.</translation> <translation id="7507207699631365376">Вижте <ph name="BEGIN_LINK" />декларацията за поверителност<ph name="END_LINK" /> на този доставчик</translation> <translation id="7507930499305566459">Сертификат за състоянието на респондер</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Този ключ за сигурност не може да бъде нулиран. Грешка <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Надстройване на Crostini</translation> <translation id="7696063401938172191">На своя <ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Подробностите са скрити, когато споделяте екрана си</translation> <translation id="7697598343108519171">Използване на камерата за сканиране на QR код</translation> <translation id="7699968112832915395">Профилът не може да се добави</translation> <translation id="7701040980221191251">Няма</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Еднородна</translation> <translation id="8186609076106987817">Сървърът не можа да намери файла.</translation> <translation id="8188389033983459049">Проверете настройките на устройството си и я включете, за да продължите</translation> +<translation id="8189306097519446565">Училищни профили</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Осъществява се връзка с: <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Управление на вашите приложения, разширения и теми</translation> <translation id="8195027750202970175">Размер върху диска</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">Забравяне</translation> <translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation> <translation id="8987927404178983737">Месец</translation> +<translation id="8989823300731803443">Продължете оттам, откъдето сте прекъснали.</translation> <translation id="8990209962746788689">Не може да се създаде QR код</translation> <translation id="8991520179165052608">Сайтът може да използва микрофона ви</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 елемент}other{# елемента}}</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index ae794286..d0a5a6ee 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">পোর্ট</translation> <translation id="4647090755847581616">&Close Tab</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />টির মধ্যে <ph name="CURRENT_STEP" /> নম্বর ধাপ</translation> -<translation id="4647420311443994946">{0,select, tablet{আপনার ট্যাবলেটে সাইন-ইন করলেই অ্যাপ চালু হয়ে যাবে}computer{আপনার কম্পিউটারে সাইন-ইন করলেই অ্যাপ চালু হয়ে যাবে}other{আপনার ডিভাইসে সাইন-ইন করলেই অ্যাপ চালু হয়ে যাবে}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />"-এর PIN লিখুন:</translation> <translation id="4648491805942548247">অপর্যাপ্ত অনুমতিগুলি</translation> <translation id="4648499713050786492">কোনো ব্যক্তি যোগ করার আগে দয়া করে আপনার প্রোফাইলটি আনলক করুন।</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">সেভ করুন</translation> <translation id="5319359161174645648">Google Chrome ব্যবহার করার সুপারিশ করে</translation> <translation id="5320112320661303273">মনে হচ্ছে আপনি অন্য একটি ডিভাইসে আগেই Assistant সেট আপ করেছেন। নিম্নলিখিত সেটিং চালু করে Assistant-এর সর্বাধিক সুবিধা নিন।</translation> +<translation id="5320135788267874712">নতুন ডিভাইসের নাম</translation> <translation id="532247166573571973">সার্ভারে সংযোগ নাও হতে পারে। পরে আবার চেষ্টা করুন।</translation> <translation id="5324300749339591280">অ্যাপ তালিকা</translation> <translation id="5324780743567488672">আপনার লোকেশন ব্যবহার করে স্বয়ংক্রিয়ভাবে সময় অঞ্চল সেট করুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 083bddb6..7b387f24 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nema mreže</translation> <translation id="1056898198331236512">Upozorenje</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Unesite novi PIN. PIN mora imati najmanje jedan znak i može sadržavati slova, brojke i druge znakove.}one{Unesite novi PIN. PIN mora imati najmanje # znak i može sadržavati slova, brojke i druge znakove.}few{Unesite novi PIN. PIN mora imati najmanje # znaka i može sadržavati slova, brojke i druge znakove.}other{Unesite novi PIN. PIN mora imati najmanje # znakova i može sadržavati slova, brojke i druge znakove.}}</translation> <translation id="1059944192885972544">Za upit "<ph name="SEARCH_TEXT" />" je pronađen sljedeći broj kartica: <ph name="NUM" /></translation> <translation id="1060292118287751956">Određuje frekvenciju ažuriranja ekrana</translation> <translation id="1061904396131502319">Uskoro će vrijeme za odmor</translation> @@ -637,9 +638,11 @@ <translation id="1688935057616748272">Napišite slovo</translation> <translation id="168991973552362966">Dodajte štampač u blizini</translation> <translation id="1689945336726856614">Kopiraj &URL</translation> +<translation id="1690248886740053041">Povezivanje s mobilnom mrežom nije uspjelo. Tehničku podršku zatražite od svojeg mobilnog operatera.</translation> <translation id="1692115862433274081">Koristi drugi račun</translation> <translation id="1692118695553449118">Sinhronizacija je uključena</translation> <translation id="1692210323591458290">Tamnoljubičasta</translation> +<translation id="169279809881363536">Nije otkriven nijedan profil. Da biste postavili novu mrežu, skenirajte QR kôd pomoću fotoaparata uređaja ili unesite aktivacijski kôd koji ste dobili od mobilnog operatera.</translation> <translation id="1697150536837697295">Umjetnost</translation> <translation id="1697686431566694143">Uredi fajl</translation> <translation id="1698122934742150150">Samo trenutačna anonimna sesija</translation> @@ -1576,6 +1579,7 @@ <translation id="2770465223704140727">Ukloni s liste</translation> <translation id="2770690685823456775">Izvezite svoje lozinke u drugi folder</translation> <translation id="2770929488047004208">Rezolucija monitora</translation> +<translation id="2770954829020464827">Pojedinosti su skrivene dok dijelite zaslon</translation> <translation id="2771268254788431918">Prijenos podataka na mobilnoj mreži je aktiviran</translation> <translation id="2771816809568414714">Sir</translation> <translation id="2772936498786524345">Tajni</translation> @@ -1943,6 +1947,7 @@ <translation id="3201422919974259695">Dostupni USB uređaji pojavit će se ovdje.</translation> <translation id="3202131003361292969">Putanja</translation> <translation id="3202173864863109533">Zvuk kartice je isključen.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">Aplikacija</translation> <translation id="3208584281581115441">Provjeri sada</translation> <translation id="3208703785962634733">Nepotvrđeno</translation> @@ -2163,6 +2168,7 @@ <translation id="3459697287128633276">Da bi vaš račun mogao pristupiti Google Play trgovini, potvrdite svoj identitet pomoću pružaoca identiteta.</translation> <translation id="3462311546193741693">Odjavljuje vas s većine stranica Ostat ćete prijavljeni na Google računu, stoga se vaši sinhronizirani podaci mogu obrisati.</translation> <translation id="3462413494201477527">Otkazati postavljanje računa?</translation> +<translation id="3464145797867108663">Dodaj poslovni profil</translation> <translation id="346431825526753">Ovo je račun za djecu kojim upravlja <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Oznaka</translation> <translation id="3468999815377931311">Android telefon</translation> @@ -2284,6 +2290,7 @@ <translation id="360180734785106144">Ponudite nove funkcije kada postanu dostupne</translation> <translation id="3602290021589620013">Pregled</translation> <translation id="3603622770190368340">Nabavite novu potvrdu</translation> +<translation id="3604193429970465812">Sekundarni računi</translation> <translation id="3604713164406837697">Promijenite pozadinsku sliku</translation> <translation id="3605780360466892872">Biznismen</translation> <translation id="3608576286259426129">Pregled korisnikove slike</translation> @@ -2608,6 +2615,7 @@ Želite li pokrenuti aplikaciju <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Nije moguće izraditi prečac</translation> +<translation id="3943494825379372497">Želite li vratiti aplikacije i stranice?</translation> <translation id="3943582379552582368">&Nazad</translation> <translation id="3943857333388298514">Zalijepi</translation> <translation id="3948116654032448504">Traženje slike koristeći <ph name="SEARCH_ENGINE" /></translation> @@ -2693,6 +2701,7 @@ <translation id="4046013316139505482">Ove ekstenzije ne moraju pregledati i mijenjati podatke na ovoj web lokaciji.</translation> <translation id="4046123991198612571">Sljedeća pjesma</translation> <translation id="4047726037116394521">Odlazak na početnu stranicu</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt nije dostupan. Da biste s tim kontaktom koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adresu povezanu s njegovim Google računom.}one{# kontakt nije dostupan. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}few{# kontakta nisu dostupna. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}other{# kontakata nije dostupno. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}}</translation> <translation id="4050225813016893843">Metoda autentifikacije</translation> <translation id="4052120076834320548">Malo</translation> <translation id="4056908315660577142">Dostignuto je vremensko ograničenje koje je tvoj roditelj postavio za Chrome aplikaciju <ph name="APP_NAME" />. Sutra je možeš koristiti <ph name="TIME_LIMIT" />.</translation> @@ -3176,7 +3185,6 @@ <translation id="4646675363240786305">Priključci</translation> <translation id="4647090755847581616">&Zatvori karticu</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. korak od <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Pokretanje aplikacije prilikom prijave na tabletu}computer{Pokretanje aplikacije prilikom prijave na računaru}other{Pokretanje aplikaciju prilikom prijave na uređaju}}</translation> <translation id="4647697156028544508">Unesite PIN za uređaj "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Nedovoljno odobrenja</translation> <translation id="4648499713050786492">Otključajte profil prije nego što dodate osobu.</translation> @@ -3340,6 +3348,7 @@ <translation id="4863769717153320198">Izgleda kao <ph name="WIDTH" /> x <ph name="HEIGHT" /> (zadano)</translation> <translation id="4864369630010738180">Prijavljivanje…</translation> <translation id="4864805589453749318">Odaberite roditelja koji daje odobrenje za dodavanje školskog računa.</translation> +<translation id="4866265760644917470">Profil je uspješno dodan.</translation> <translation id="486635084936119914">Automatski otvori određene vrste fajlova nakon preuzimanja</translation> <translation id="48704129375571883">Dodaj dodatne funkcije</translation> <translation id="4870758487381879312">Za informacije o konfiguraciji unesite lozinku koju vam je pružio administrator</translation> @@ -3623,6 +3632,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Ugrožena lozinka je uspješno promijenjena. Imate još # ugroženu lozinku. Chrome preporučuje da odmah provjerite tu lozinku.}one{Ugrožena lozinka je uspješno promijenjena. Imate još # ugroženu lozinku. Chrome preporučuje da odmah provjerite te lozinke.}few{Ugrožena lozinka je uspješno promijenjena. Imate još # ugrožene lozinke. Chrome preporučuje da odmah provjerite te lozinke.}other{Ugrožena lozinka je uspješno promijenjena. Imate još # ugroženih lozinki. Chrome preporučuje da odmah provjerite te lozinke.}}</translation> <translation id="5207949376430453814">Istakni kursor u tekstu</translation> <translation id="5209320130288484488">Nije pronađen nijedan uređaj</translation> +<translation id="5209572028385096813">Tim korisnikom upravlja Family Link</translation> <translation id="5210365745912300556">Zatvorite karticu.</translation> <translation id="5213481667492808996">Vaša usluga za prijenos podataka "<ph name="NAME" />" je spremna za upotrebu</translation> <translation id="5213891612754844763">Prikaži postavke proksi servera</translation> @@ -3708,6 +3718,7 @@ <translation id="5302048478445481009">Jezik</translation> <translation id="5302932258331363306">Prikaži Zamjene</translation> <translation id="5304276686222516262">Nije moguće preuzeti listu kontakata. Provjerite mrežnu vezu ili <a href="#" id="tryAgainLink">pokušajte ponovo</a>.</translation> +<translation id="5305145881844743843">Ovim računom upravlja <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Nijedan nije instaliran</translation> <translation id="5307030433605830021">Izvor nije podržan</translation> <translation id="5308380583665731573">Poveži</translation> @@ -3721,6 +3732,7 @@ <translation id="5317780077021120954">Sačuvaj</translation> <translation id="5319359161174645648">Google preporučuje Chrome</translation> <translation id="5320112320661303273">Izgleda da ste već postavili Asistenta na drugom uređaju. Uključite sljedeću postavku da još više iskoristite prednosti Asistenta.</translation> +<translation id="5320135788267874712">Novi naziv uređaja</translation> <translation id="532247166573571973">Možda nije moguće doprijeti do servera. Pokušajte ponovo kasnije.</translation> <translation id="5324300749339591280">Lista aplikacija</translation> <translation id="5324780743567488672">Automatski postavi vremensku zonu pomoću moje lokacije</translation> @@ -4088,6 +4100,7 @@ <translation id="5740820643029013514">Koristi tišu razmjenu poruka (preporučeno)</translation> <translation id="574104302965107104">Preslikavanje ekrana</translation> <translation id="574209121243317957">Visina</translation> +<translation id="5742505912938664543">Kad dodate sekundarni račun, možete pregledavati web, preuzimati aplikacije, provjeravati Gmail i druge Googleove usluge pomoću tog računa.</translation> <translation id="5746169159649715125">Sačuvaj kao PDF</translation> <translation id="5747552184818312860">Ističe</translation> <translation id="5747785204778348146">Programer - nestabilno</translation> @@ -4428,6 +4441,7 @@ <translation id="6129953537138746214">Razmaknica</translation> <translation id="6130692320435119637">Dodaj WiFi</translation> <translation id="6136114942382973861">Zatvori traku preuzetih fajlova</translation> +<translation id="6136287496450963112">Vaš sigurnosni ključ nije zaštićen PIN-om. Za upravljanje otiscima prstiju najprije izradite PIN.</translation> <translation id="6137767437444130246">Korisnički certifikat</translation> <translation id="6138680304137685902">X9.62 ECDSA potpis uz SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nema mreže</translation> @@ -4608,6 +4622,7 @@ <translation id="6331566915566907158">Pomozite nam da poboljšamo funkcije i performanse Chrome OS-a</translation> <translation id="6331818708794917058">Web lokacije mogu tražiti da se povežu s MIDI uređajima</translation> <translation id="6333064448949140209">Fajl će se poslati Googleu radi otklanjanje grešaka</translation> +<translation id="6334444530352320327">Vaše aplikacije i postavke OS-a sinkronizirat će se na svim Chromebookovima na koje ste prijavljeni ovim računom.<ph name="LINK_BEGIN" />Postavke sinkronizacije<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Sve web lokacije vam mogu prikazivati bilo koje oglase</translation> <translation id="6339668969738228384">Kreirajte novi profil za <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Povezivanje na server nije uspjelo. Provjerite mrežnu vezu i pokušajte ponovo. Ako se problem ne riješi, ponovo pokrenite Chromebook.</translation> @@ -4909,6 +4924,7 @@ <translation id="6709133671862442373">Vijesti</translation> <translation id="6709357832553498500">Poveži se na mrežu pomoću dodatka <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Nazad</translation> +<translation id="6713233729292711163">Dodaj poslovni profil</translation> <translation id="6715803357256707211">Došlo je do greške prilikom instalacije Linux aplikacije. Kliknite na obavještenje za detalje.</translation> <translation id="671619610707606484">Ovim će se obrisati <ph name="TOTAL_USAGE" /> podataka koje su pohranile web lokacije</translation> <translation id="671928215901716392">Zaključaj zaslon</translation> @@ -5277,6 +5293,7 @@ <translation id="7121362699166175603">Briše historiju i automatsko dovršavanje na traci za adresu. Vaš Google račun može imati druge oblike historije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Način rada za programere</translation> <translation id="7121728544325372695">Pametne crtice</translation> +<translation id="7122353087820324370">Aplikacije i postavke OS-a ne sinkroniziraju se sa sekundarnim računima.</translation> <translation id="7123030151043029868">Dozvoljeno je automatsko preuzimanje više fajlova</translation> <translation id="7123360114020465152">Više nije podržan</translation> <translation id="7125148293026877011">Izbrišite Crostini</translation> @@ -5591,6 +5608,7 @@ <translation id="750509436279396091">Otvori folder Preuzimanja</translation> <translation id="7506093026325926984">Ova lozinka će se sačuvati na ovom uređaju</translation> <translation id="7506130076368211615">Postavite novu mrežu</translation> +<translation id="7506242536428928412">Za upotrebu novog sigurnosnog ključa postavite novi PIN</translation> <translation id="7506541170099744506">Vaš uređaj <ph name="DEVICE_TYPE" /> je uspješno prijavljen za upravljanje koje vrši preduzeće.</translation> <translation id="7507207699631365376">Pogledajte <ph name="BEGIN_LINK" />pravila privatnosti<ph name="END_LINK" /> pružaoca usluga</translation> <translation id="7507930499305566459">Potvrda automatskog odgovora statusa</translation> @@ -5754,6 +5772,7 @@ <translation id="7691077781194517083">Nije moguće poništiti ovaj sigurnosni ključ. Greška <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Nadogradnja Crostinija</translation> <translation id="7696063401938172191">Na vašem "<ph name="PHONE_NAME" />" telefonu:</translation> +<translation id="7697166915480294040">Pojedinosti su skrivene dok dijelite zaslon</translation> <translation id="7697598343108519171">Kamerom skenirajte QR kôd</translation> <translation id="7699968112832915395">Nije moguće dodati račun</translation> <translation id="7701040980221191251">Nema</translation> @@ -6211,6 +6230,8 @@ <translation id="8184472985242519288">Jednobrazno</translation> <translation id="8186609076106987817">Server nije mogao pronaći fajl.</translation> <translation id="8188389033983459049">Pregledajte postavke uređaja i uključite ga da biste nastavili</translation> +<translation id="8189306097519446565">Školski računi</translation> +<translation id="8189750580333936930">Testno okruženje za privatnost</translation> <translation id="8190193592390505034">Povezivanje na mrežu <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Upravljajte aplikacijama, ekstenzijama i temama</translation> <translation id="8195027750202970175">Veličina na disku</translation> @@ -6904,6 +6925,7 @@ <translation id="8986362086234534611">Zaboravi</translation> <translation id="8986494364107987395">Automatski šaljite statistiku korištenja i izvještaje o padovima aplikacije Googleu</translation> <translation id="8987927404178983737">Mjesec</translation> +<translation id="8989823300731803443">Nastavite tamo gdje ste stali.</translation> <translation id="8990209962746788689">Nije moguće kreirati QR kôd</translation> <translation id="8991520179165052608">Web lokacija može koristiti vaš mikrofon</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 stavka}one{# stavka}few{# stavke}other{# stavki}}</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index c11090a8..7a5f3c6 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Cap xarxa</translation> <translation id="1056898198331236512">Advertiment</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Introdueix el PIN nou. Els PIN han de tenir 1 caràcter com a mínim i poden contenir lletres, números i altres caràcters.}other{Introdueix el PIN nou. Els PIN han de tenir # caràcters com a mínim i poden contenir lletres, números i altres caràcters.}}</translation> <translation id="1059944192885972544">S'han trobat <ph name="NUM" /> pestanyes per a "<ph name="SEARCH_TEXT" />"</translation> <translation id="1060292118287751956">Determina la freqüència d'actualització de la pantalla</translation> <translation id="1061904396131502319">Ja gairebé és l'hora de fer una pausa</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Escriu una lletra</translation> <translation id="168991973552362966">Afegeix una impressora propera</translation> <translation id="1689945336726856614">Copia l'&URL</translation> +<translation id="1690248886740053041">No es pot connectar a una xarxa mòbil. Per obtenir assistència tècnica, contacta amb el teu operador.</translation> <translation id="1692115862433274081">Utilitza un altre compte</translation> <translation id="1692118695553449118">La sincronització està activada</translation> <translation id="1692210323591458290">Porpra fosc</translation> +<translation id="169279809881363536">No s'ha detectat cap perfil. Per configurar una xarxa nova, escaneja el codi QR amb la càmera del dispositiu o introdueix el codi d'activació que t'ha proporcionat l'operador.</translation> <translation id="1697150536837697295">Art</translation> <translation id="1697686431566694143">Edita el fitxer</translation> <translation id="1698122934742150150">Només la sessió d'incògnit actual</translation> @@ -1573,6 +1576,7 @@ <translation id="2770465223704140727">Suprimeix de la llista</translation> <translation id="2770690685823456775">Exporta les contrasenyes a una altra carpeta</translation> <translation id="2770929488047004208">Resolució del monitor</translation> +<translation id="2770954829020464827">Els detalls estan amagats mentre comparteixes la pantalla</translation> <translation id="2771268254788431918">Dades mòbils activades</translation> <translation id="2771816809568414714">Formatge</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1940,6 +1944,7 @@ <translation id="3201422919974259695">Els dispositius USB disponibles es mostraran aquí.</translation> <translation id="3202131003361292969">Camí</translation> <translation id="3202173864863109533">S'està silenciant l'àudio d'aquesta pestanya.</translation> +<translation id="3202218848974251205">Zona de proves de privadesa</translation> <translation id="3208321278970793882">Aplicació</translation> <translation id="3208584281581115441">Comprova ara</translation> <translation id="3208703785962634733">No confirmat</translation> @@ -2160,6 +2165,7 @@ <translation id="3459697287128633276">Per poder accedir a Google Play Store amb el teu compte, autentica't amb el teu proveïdor d'identitat.</translation> <translation id="3462311546193741693">Se't tancarà la sessió de la majoria de llocs web, però continuaràs tenint la sessió iniciada al Compte de Google. Pot ser que les dades sincronitzades s'esborrin.</translation> <translation id="3462413494201477527">Voleu cancel·lar la configuració del compte?</translation> +<translation id="3464145797867108663">Afegeix un perfil de treball</translation> <translation id="346431825526753">Aquest és un compte infantil gestionat per <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etiqueta</translation> <translation id="3468999815377931311">Telèfon Android</translation> @@ -2281,6 +2287,7 @@ <translation id="360180734785106144">Oferir funcions noves a mesura que estiguin disponibles.</translation> <translation id="3602290021589620013">Previsualitza</translation> <translation id="3603622770190368340">Obtenció del certificat de xarxa</translation> +<translation id="3604193429970465812">Comptes secundaris</translation> <translation id="3604713164406837697">Canvia el fons de pantalla</translation> <translation id="3605780360466892872">Executiu</translation> <translation id="3608576286259426129">Previsualització de la imatge d'usuari</translation> @@ -2604,6 +2611,7 @@ Voleu iniciar <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">No es pot crear la drecera</translation> +<translation id="3943494825379372497">Vols restaurar les aplicacions i les pàgines?</translation> <translation id="3943582379552582368">&Enrere</translation> <translation id="3943857333388298514">Enganxa</translation> <translation id="3948116654032448504">&Cerca la imatge a <ph name="SEARCH_ENGINE" /></translation> @@ -2689,6 +2697,7 @@ <translation id="4046013316139505482">Aquestes extensions no necessiten veure ni modificar la informació d'aquest lloc web.</translation> <translation id="4046123991198612571">Pista següent</translation> <translation id="4047726037116394521">Ves a la pàgina d'inici</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# contacte no està disponible. Per fer servir la funció Compartició Nearby amb aquest contacte, afegeix l'adreça electrònica associada al seu Compte de Google als teus contactes.}other{# contactes no estan disponibles. Per fer servir la funció Compartició Nearby amb aquests contactes, afegeix les adreces electròniques associades als seus Comptes de Google als teus contactes.}}</translation> <translation id="4050225813016893843">Mètode d'autenticació</translation> <translation id="4052120076834320548">Minúscul</translation> <translation id="4056908315660577142">Has arribat al límit de temps que els teus pares han definit per a l'aplicació de Chrome <ph name="APP_NAME" />. Demà podràs utilitzar-la durant <ph name="TIME_LIMIT" />.</translation> @@ -3172,7 +3181,6 @@ <translation id="4646675363240786305">Ports</translation> <translation id="4647090755847581616">&Tanca la pestanya</translation> <translation id="4647283074445570750">Pas <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Obre l'aplicació en iniciar la sessió a la tauleta}computer{Obre l'aplicació en iniciar la sessió a l'ordinador}other{Obre l'aplicació en iniciar la sessió al dispositiu}}</translation> <translation id="4647697156028544508">Introduïu el PIN per a "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permisos insuficients</translation> <translation id="4648499713050786492">Desbloquegeu el vostre perfil per poder afegir una persona.</translation> @@ -3336,6 +3344,7 @@ <translation id="4863769717153320198">Resolució: <ph name="WIDTH" /> x <ph name="HEIGHT" /> (predeterminada)</translation> <translation id="4864369630010738180">S'està iniciant la sessió...</translation> <translation id="4864805589453749318">Selecciona quin dels teus pares concedeix el permís per afegir un compte de centre educatiu.</translation> +<translation id="4866265760644917470">El perfil s'ha afegit correctament.</translation> <translation id="486635084936119914">Obre alguns tipus de fitxer automàticament després de baixar-los</translation> <translation id="48704129375571883">Afegeix funcions addicionals</translation> <translation id="4870758487381879312">Introdueix la contrasenya proporcionada per l'administrador a fi d'obtenir informació de configuració</translation> @@ -3619,6 +3628,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{La contrasenya en perill s'ha canviat correctament. Tens # contrasenya més en perill. Chrome et recomana que comprovis aquesta contrasenya ara.}other{La contrasenya en perill s'ha canviat correctament. Tens # contrasenyes més en perill. Chrome et recomana que comprovis aquestes contrasenyes ara.}}</translation> <translation id="5207949376430453814">Ressalta la marca d'inserció de text</translation> <translation id="5209320130288484488">No s'ha trobat cap dispositiu</translation> +<translation id="5209572028385096813">Aquest usuari està gestionat per Family Link</translation> <translation id="5210365745912300556">Tanca la pestanya</translation> <translation id="5213481667492808996">Ja pots utilitzar el servei de dades <ph name="NAME" /></translation> <translation id="5213891612754844763">Mostra la configuració del servidor intermediari</translation> @@ -3705,6 +3715,7 @@ <translation id="5302048478445481009">Idioma</translation> <translation id="5302932258331363306">Mostra les substitucions</translation> <translation id="5304276686222516262">No es pot baixar la llista de contactes. Comprova la connexió a la xarxa o <a href="#" id="tryAgainLink">torna-ho a provar</a>.</translation> +<translation id="5305145881844743843">Aquest compte està gestionat per <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Cap d'instal·lat</translation> <translation id="5307030433605830021">Aquesta font no s'admet</translation> <translation id="5308380583665731573">Connecta</translation> @@ -3718,6 +3729,7 @@ <translation id="5317780077021120954">Desa</translation> <translation id="5319359161174645648">Google recomana Chrome</translation> <translation id="5320112320661303273">Sembla que ja has configurat l'Assistent en un altre dispositiu. Treu encara més partit del teu Assistent activant l'opció de configuració següent.</translation> +<translation id="5320135788267874712">Nom nou del dispositiu</translation> <translation id="532247166573571973">És possible que no es pugui accedir al servidor. Torneu-ho a provar més tard.</translation> <translation id="5324300749339591280">Llista d'aplicacions</translation> <translation id="5324780743567488672">Estableix la zona horària automàticament en funció de la meva ubicació</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Utilitza missatges menys intrusius (opció recomanada)</translation> <translation id="574104302965107104">Projecció de la pantalla</translation> <translation id="574209121243317957">To</translation> +<translation id="5742505912938664543">Si afegeixes un compte secundari aquí, podràs utilitzar-lo per navegar pel web, baixar aplicacions i consultar Gmail i altres serveis de Google.</translation> <translation id="5746169159649715125">Desa com a PDF</translation> <translation id="5747552184818312860">Caduca el dia</translation> <translation id="5747785204778348146">Desenvolupador: inestable</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Espai</translation> <translation id="6130692320435119637">Afegeix una Wi‑Fi</translation> <translation id="6136114942382973861">Tanca la barra de baixades</translation> +<translation id="6136287496450963112">La clau de seguretat no està protegida amb un PIN. Crea'n un per gestionar les empremtes digitals.</translation> <translation id="6137767437444130246">Certificat d'usuari</translation> <translation id="6138680304137685902">Signatura d'ECDSA X9.62 amb SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" /> (sense xarxa)</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Ajuda a millorar les funcions i el rendiment de Chrome OS</translation> <translation id="6331818708794917058">Els llocs web poden demanar permís per connectar-se a dispositius MIDI</translation> <translation id="6333064448949140209">El fitxer s'enviarà a Google per depurar-lo</translation> +<translation id="6334444530352320327">Les teves aplicacions i la configuració del sistema operatiu se sincronitzaran en tots els Chromebook en què tinguis la sessió iniciada amb aquest compte. <ph name="LINK_BEGIN" />Configuració de sincronització<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Tots els llocs web et poden mostrar qualsevol anunci</translation> <translation id="6339668969738228384">Crea un perfil nou per a <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">No s'ha pogut connectar amb el servidor. Comprova la connexió a la xarxa i torna-ho a provar. Si el problema continua, reinicia Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Notícies</translation> <translation id="6709357832553498500">Connecta mitjançant <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Anterior</translation> +<translation id="6713233729292711163">Afegeix un perfil de treball</translation> <translation id="6715803357256707211">S'ha produït un error en instal·lar l'aplicació per a Linux. Fes clic a la notificació per veure'n els detalls.</translation> <translation id="671619610707606484">Amb aquesta acció s'esborraran dades emmagatzemades pels llocs web (<ph name="TOTAL_USAGE" />)</translation> <translation id="671928215901716392">Pantalla de bloqueig</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Esborra l'historial i les complecions automàtiques a la barra d'adreces. A <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> trobaràs altres maneres d'explorar l'historial de navegació del Compte de Google.</translation> <translation id="7121438501124788993">Mode de desenvolupador</translation> <translation id="7121728544325372695">Guions intel·ligents</translation> +<translation id="7122353087820324370">Les aplicacions i la configuració del sistema operatiu no se sincronitzen amb els comptes secundaris.</translation> <translation id="7123030151043029868">Amb permís per baixar automàticament diversos fitxers</translation> <translation id="7123360114020465152">Ja no s'admet</translation> <translation id="7125148293026877011">Suprimeix Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Obre la carpeta de baixades</translation> <translation id="7506093026325926984">Aquesta contrasenya es desarà en aquest dispositiu</translation> <translation id="7506130076368211615">Configura una xarxa nova</translation> +<translation id="7506242536428928412">Per utilitzar la nova clau de seguretat, defineix un PIN nou</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> s'ha inscrit correctament a la gestió empresarial.</translation> <translation id="7507207699631365376">Consulta la <ph name="BEGIN_LINK" />política de privadesa<ph name="END_LINK" /> d'aquest proveïdor</translation> <translation id="7507930499305566459">Certificat de resposta d'estat</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Aquesta clau de seguretat no es pot restablir. Error <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Actualització de Crostini</translation> <translation id="7696063401938172191">A <ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Els detalls estan amagats mentre comparteixes la pantalla</translation> <translation id="7697598343108519171">Utilitza la càmera per escanejar el codi QR</translation> <translation id="7699968112832915395">No es pot afegir el compte</translation> <translation id="7701040980221191251">Cap</translation> @@ -6208,6 +6227,8 @@ <translation id="8184472985242519288">Uniforme</translation> <translation id="8186609076106987817">El servidor no ha pogut trobar el fitxer.</translation> <translation id="8188389033983459049">Comprova la configuració del dispositiu i activa'l per continuar</translation> +<translation id="8189306097519446565">Comptes de centre educatiu</translation> +<translation id="8189750580333936930">Zona de proves de privadesa</translation> <translation id="8190193592390505034">S'està connectant amb <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Gestionar les aplicacions, les extensions i els temes</translation> <translation id="8195027750202970175">Espai ocupat al disc</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">Oblida</translation> <translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation> <translation id="8987927404178983737">Mes</translation> +<translation id="8989823300731803443">Continua des d'on ho vas deixar</translation> <translation id="8990209962746788689">No es pot crear el codi QR</translation> <translation id="8991520179165052608">El lloc web pot utilitzar el micròfon</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 element}other{# elements}}</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index d7efe44..9352dfd3b 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Porty</translation> <translation id="4647090755847581616">&Zavřít kartu</translation> <translation id="4647283074445570750">Krok <ph name="CURRENT_STEP" /> z <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Spustit aplikaci, když se přihlásíte do tabletu}computer{Spustit aplikaci, když se přihlásíte do počítače}other{Spustit aplikaci, když se přihlásíte do zařízení}}</translation> <translation id="4647697156028544508">Zadejte prosím PIN pro zařízení <ph name="DEVICE_NAME" />:</translation> <translation id="4648491805942548247">Nedostatečná oprávnění</translation> <translation id="4648499713050786492">Před přidáním osoby prosím odemkněte svůj profil.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Uložit</translation> <translation id="5319359161174645648">Google doporučuje prohlížeč Chrome</translation> <translation id="5320112320661303273">Zdá se, že už jste si Asistenta nastavili na jiném zařízení. Když zapnete následující nastavení, Asistent bude ještě užitečnější.</translation> +<translation id="5320135788267874712">Nový název zařízení</translation> <translation id="532247166573571973">Server pravděpodobně není dostupný. Zkuste to znovu později.</translation> <translation id="5324300749339591280">Seznam aplikací</translation> <translation id="5324780743567488672">Nastavit časové pásmo automaticky podle polohy</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index ff84b926..1da6785 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Ingen netværk</translation> <translation id="1056898198331236512">Advarsel</translation> <translation id="1058262162121953039">PUK-kode</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Angiv din nye pinkode. En pinkode skal bestå af mindst ét tegn og kan indeholde bogstaver, tal og andre tegn.}one{Angiv din nye pinkode. En pinkode skal bestå af mindst # tegn og kan indeholde bogstaver, tal og andre tegn.}other{Angiv din nye pinkode. En pinkode skal bestå af mindst # tegn og kan indeholde bogstaver, tal og andre tegn.}}</translation> <translation id="1059944192885972544">Der blev fundet <ph name="NUM" /> faner for "<ph name="SEARCH_TEXT" />"</translation> <translation id="1060292118287751956">Fastlægger frekvensen for skærmopdateringer</translation> <translation id="1061904396131502319">Det er snart tid til en pause</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">Skriv et bogstav</translation> <translation id="168991973552362966">Tilføj en printer i nærheden</translation> <translation id="1689945336726856614">Kopiér &webadresse</translation> +<translation id="1690248886740053041">Der kunne ikke oprettes forbindelse til et mobilnetværk. Kontakt dit mobilselskab for at få teknisk support.</translation> <translation id="1692115862433274081">Brug en anden konto</translation> <translation id="1692118695553449118">Synkronisering er slået til</translation> <translation id="1692210323591458290">Mørklilla</translation> +<translation id="169279809881363536">Der blev ikke fundet nogen profiler. Du kan konfigurere et nyt netværk ved at scanne QR-koden med kameraet på enheden eller ved at angive den aktiveringskode, du fik af dit mobilselskab.</translation> <translation id="1697150536837697295">Art</translation> <translation id="1697686431566694143">Rediger fil</translation> <translation id="1698122934742150150">Kun for den aktuelle inkognitosession</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">Fjern fra listen</translation> <translation id="2770690685823456775">Eksportér dine adgangskoder til en anden mappe</translation> <translation id="2770929488047004208">Skærmopløsning</translation> +<translation id="2770954829020464827">Oplysningerne er skjulte, når du deler din skærm</translation> <translation id="2771268254788431918">Mobildata er aktiveret</translation> <translation id="2771816809568414714">Ost</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">Tilgængelige USB-enheder vises her.</translation> <translation id="3202131003361292969">Sti</translation> <translation id="3202173864863109533">Denne fanes lyd er slået fra.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">App</translation> <translation id="3208584281581115441">Tjek nu</translation> <translation id="3208703785962634733">Ikke bekræftet</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">Du skal godkende hos din identitetsudbyder, før du kan give din konto adgang til Google Play Butik.</translation> <translation id="3462311546193741693">Logger dig ud af de fleste websites. Du forbliver logget ind på din Google-konto, så dine synkroniserede data kan ryddes.</translation> <translation id="3462413494201477527">Vil du annullere konfigurationen af kontoen?</translation> +<translation id="3464145797867108663">Tilføj arbejdsprofil</translation> <translation id="346431825526753">Dette er en børnekonto, som administreres af <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etiket</translation> <translation id="3468999815377931311">Android-telefon</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">Tilbyde nye funktioner, efterhånden som de bliver tilgængelige</translation> <translation id="3602290021589620013">Forhåndsvisning</translation> <translation id="3603622770190368340">Få fat i et netværkscertifikat</translation> +<translation id="3604193429970465812">Sekundære konti</translation> <translation id="3604713164406837697">Skift baggrund</translation> <translation id="3605780360466892872">Asger</translation> <translation id="3608576286259426129">Forhåndsvisning af billede fra bruger</translation> @@ -2607,6 +2614,7 @@ Vil du starte <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Genvejen kan ikke oprettes</translation> +<translation id="3943494825379372497">Vil du gendanne apps og sider?</translation> <translation id="3943582379552582368">&Tilbage</translation> <translation id="3943857333388298514">Indsæt</translation> <translation id="3948116654032448504">&Søg efter billedet på <ph name="SEARCH_ENGINE" /></translation> @@ -2692,6 +2700,7 @@ <translation id="4046013316139505482">Disse udvidelser kan ikke se og ændre oplysninger på dette website.</translation> <translation id="4046123991198612571">Næste nummer</translation> <translation id="4047726037116394521">Gå til startsiden</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt er ikke tilgængelig. Hvis du vil bruge "Deling tæt på" med denne kontakt, skal du føje den mailadresse, der er tilknyttet vedkommendes Google-konto, til dine kontakter.}one{# kontakt er ikke tilgængelig. Hvis du vil bruge "Deling tæt på" med denne kontakt, skal du føje den mailadresse, der er tilknyttet vedkommendes Google-konto, til dine kontakter.}other{# kontakter er ikke tilgængelige. Hvis du vil bruge "Deling tæt på" med disse kontakter, skal du føje de mailadresser, der er tilknyttet deres Google-konti, til dine kontakter.}}</translation> <translation id="4050225813016893843">Godkendelsesmetode</translation> <translation id="4052120076834320548">Lillebitte</translation> <translation id="4056908315660577142">Du har nået den grænse, din forælder har angivet for Chrome-appen <ph name="APP_NAME" />. Du kan bruge den i <ph name="TIME_LIMIT" /> i morgen.</translation> @@ -3175,7 +3184,6 @@ <translation id="4646675363240786305">Porte</translation> <translation id="4647090755847581616">&Luk fanen</translation> <translation id="4647283074445570750">Trin <ph name="CURRENT_STEP" /> af <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Start appen. når du logger ind på din tablet}computer{Start appen, når du logger ind på din computer}other{Start appen, når du logger ind på din enhed}}</translation> <translation id="4647697156028544508">Angiv pinkoden for "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Utilstrækkelige tilladelser</translation> <translation id="4648499713050786492">Lås din profil op, før du kan tilføje en person.</translation> @@ -3339,6 +3347,7 @@ <translation id="4863769717153320198">Ligner <ph name="WIDTH" /> x <ph name="HEIGHT" /> (standard)</translation> <translation id="4864369630010738180">Logger ind...</translation> <translation id="4864805589453749318">Vælg den forælder, der giver tilladelse til at tilføje en skolekonto.</translation> +<translation id="4866265760644917470">Profilen er tilføjet.</translation> <translation id="486635084936119914">Åbn bestemte filtyper automatisk efter download</translation> <translation id="48704129375571883">Tilføj yderligere funktioner</translation> <translation id="4870758487381879312">Angiv adgangskoden fra administratoren for at få konfigurationsoplysninger</translation> @@ -3622,6 +3631,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Den kompromitterede adgangskode blev ændret. Du har # anden kompromitteret adgangskode. Chrome anbefaler, at du tjekker denne adgangskode nu.}one{Den kompromitterede adgangskode blev ændret. Du har # anden kompromitteret adgangskode. Chrome anbefaler, at du tjekker denne adgangskode nu.}other{Den kompromitterede adgangskode blev ændret. Du har # andre kompromitterede adgangskoder. Chrome anbefaler, at du tjekker disse adgangskoder nu.}}</translation> <translation id="5207949376430453814">Fremhæv tekstmarkør</translation> <translation id="5209320130288484488">Der blev ikke fundet nogen enheder</translation> +<translation id="5209572028385096813">Denne bruger administreres af Family Link</translation> <translation id="5210365745912300556">Luk fanen</translation> <translation id="5213481667492808996">Din datatjeneste fra "<ph name="NAME" />" er klar til brug</translation> <translation id="5213891612754844763">Vis proxyindstillinger</translation> @@ -3707,6 +3717,7 @@ <translation id="5302048478445481009">Sprog</translation> <translation id="5302932258331363306">Vis erstatninger</translation> <translation id="5304276686222516262">Listen over kontakter kunne ikke downloades. Tjek din netværksforbindelse, eller <a href="#" id="tryAgainLink">prøv igen</a>.</translation> +<translation id="5305145881844743843">Denne konto administreres af <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Ingen installeret</translation> <translation id="5307030433605830021">Kilden understøttes ikke</translation> <translation id="5308380583665731573">Få forbindelse</translation> @@ -3720,6 +3731,7 @@ <translation id="5317780077021120954">Gem</translation> <translation id="5319359161174645648">Google anbefaler Chrome</translation> <translation id="5320112320661303273">Det ser ud til, at du allerede har konfigureret Assistent på en anden enhed. Du kan få endnu mere ud af Assistent ved at aktivere følgende indstilling.</translation> +<translation id="5320135788267874712">Navn på ny enhed</translation> <translation id="532247166573571973">Serveren kan være utilgængelig. Prøv igen senere.</translation> <translation id="5324300749339591280">Liste med apps</translation> <translation id="5324780743567488672">Indstil tidszonen automatisk ved hjælp af din placering</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Få lydløse meddelelser (anbefales)</translation> <translation id="574104302965107104">Skærmspejling</translation> <translation id="574209121243317957">Toneleje</translation> +<translation id="5742505912938664543">Når du tilføjer en sekundær konto her, kan du gå på nettet, downloade apps, tjekke Gmail og bruge andre Google-tjenester med den pågældende konto.</translation> <translation id="5746169159649715125">Gem som PDF</translation> <translation id="5747552184818312860">Udløber</translation> <translation id="5747785204778348146">Udvikler – ustabil</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Mellemrum</translation> <translation id="6130692320435119637">Tilføj Wi-Fi</translation> <translation id="6136114942382973861">Luk downloadlinje</translation> +<translation id="6136287496450963112">Din sikkerhedsnøgle er ikke beskyttet med en pinkode. Du skal oprette en pinkode, før du kan administrere fingeraftryk.</translation> <translation id="6137767437444130246">Brugercertifikat</translation> <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, intet netværk</translation> @@ -4608,6 +4622,7 @@ <translation id="6331566915566907158">Vær med til at forbedre funktioner og ydeevne i Chrome OS</translation> <translation id="6331818708794917058">Websites kan anmode om tilladelse til at oprette forbindelse til MIDI-enheder</translation> <translation id="6333064448949140209">Filen sendes til Google til fejlretning</translation> +<translation id="6334444530352320327">Dine apps og OS-indstillinger synkroniseres med alle de Chromebooks, hvor du er logget ind med denne konto.<ph name="LINK_BEGIN" />Indstillinger for synkronisering<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Alle websites kan vise dig alle slags annoncer</translation> <translation id="6339668969738228384">Opret en ny profil for <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Der kunne ikke oprettes forbindelse til serveren. Tjek din netværksforbindelse, og prøv igen. Genstart din Chromebook, hvis problemet fortsætter.</translation> @@ -4909,6 +4924,7 @@ <translation id="6709133671862442373">Nyheder</translation> <translation id="6709357832553498500">Opret forbindelse ved hjælp af <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Forrige</translation> +<translation id="6713233729292711163">Tilføj arbejdsprofil</translation> <translation id="6715803357256707211">Der opstod en fejl ved installationen af Linux-programmmet. Klik på notifikationen for at få flere oplysninger.</translation> <translation id="671619610707606484">Denne handling rydder <ph name="TOTAL_USAGE" /> data, der er gemt af websites</translation> <translation id="671928215901716392">Lås skærmen</translation> @@ -5277,6 +5293,7 @@ <translation id="7121362699166175603">Rydder historikken og autofuldførelser i adresselinjen. Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Udviklertilstand</translation> <translation id="7121728544325372695">Smarte bindestreger</translation> +<translation id="7122353087820324370">Apps og OS-indstillinger synkroniseres ikke med sekundære konti.</translation> <translation id="7123030151043029868">Har tilladelse til at downloade flere filer automatisk</translation> <translation id="7123360114020465152">Printeren understøttes ikke længere</translation> <translation id="7125148293026877011">Slet Crostini</translation> @@ -5591,6 +5608,7 @@ <translation id="750509436279396091">Åbn mappen med downloads</translation> <translation id="7506093026325926984">Denne adgangskode gemmes på denne enhed</translation> <translation id="7506130076368211615">Konfigurer nye netværk</translation> +<translation id="7506242536428928412">Angiv en ny pinkode for at bruge din nye sikkerhedsnøgle</translation> <translation id="7506541170099744506">Din <ph name="DEVICE_TYPE" /> er tilmeldt virksomhedsadministration.</translation> <translation id="7507207699631365376">Se denne udbyders <ph name="BEGIN_LINK" />privatlivspolitik<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Certifikat for statussvar</translation> @@ -5754,6 +5772,7 @@ <translation id="7691077781194517083">Denne sikkerhedsnøgle kan ikke nulstilles. Fejl <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini-opgradering</translation> <translation id="7696063401938172191">På din "<ph name="PHONE_NAME" />":</translation> +<translation id="7697166915480294040">Oplysningerne er skjulte, når du deler din skærm</translation> <translation id="7697598343108519171">Scan QR-koden med kameraet</translation> <translation id="7699968112832915395">Kontoen kan ikke tilføjes</translation> <translation id="7701040980221191251">Ingen</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Ensartet</translation> <translation id="8186609076106987817">Serveren kunne ikke finde filen.</translation> <translation id="8188389033983459049">Tjek enhedens indstillinger, og aktivér Bluetooth for at fortsætte</translation> +<translation id="8189306097519446565">Skolekonti</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Forbinder til <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Administrere dine apps, udvidelser og temaer</translation> <translation id="8195027750202970175">Filstørrelse</translation> @@ -6903,6 +6924,7 @@ <translation id="8986362086234534611">Glem</translation> <translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation> <translation id="8987927404178983737">Måned</translation> +<translation id="8989823300731803443">Fortsæt, hvor du slap.</translation> <translation id="8990209962746788689">QR-koden kan ikke oprettes</translation> <translation id="8991520179165052608">Websitet kan anvende din mikrofon</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 element}one{# element}other{# elementer}}</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 0a3e12b..6240ff0 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -3170,7 +3170,6 @@ <translation id="4646675363240786305">Ports</translation> <translation id="4647090755847581616">&Tab schließen</translation> <translation id="4647283074445570750">Schritt <ph name="CURRENT_STEP" /> von <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{App beim Anmelden am Tablet starten}computer{App beim Anmelden am Computer starten}other{App beim Anmelden am Gerät starten}}</translation> <translation id="4647697156028544508">Bitte geben Sie die PIN für "<ph name="DEVICE_NAME" />" ein:</translation> <translation id="4648491805942548247">Unzureichende Berechtigungen</translation> <translation id="4648499713050786492">Entsperren Sie Ihr Profil, bevor Sie eine Person hinzufügen.</translation> @@ -3715,6 +3714,7 @@ <translation id="5317780077021120954">Speichern</translation> <translation id="5319359161174645648">Google empfiehlt Chrome</translation> <translation id="5320112320661303273">Sie haben Assistant schon auf einem anderen Gerät eingerichtet. Wenn Sie die folgende Einstellung aktivieren, können Sie Assistant noch besser nutzen.</translation> +<translation id="5320135788267874712">Neuer Gerätename</translation> <translation id="532247166573571973">Der Server ist eventuell nicht erreichbar. Versuchen Sie es später noch einmal.</translation> <translation id="5324300749339591280">Apps-Liste</translation> <translation id="5324780743567488672">Zeitzone automatisch anhand des Standorts einstellen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index e989a11b..ec83a39c 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Κανένα δίκτυο</translation> <translation id="1056898198331236512">Προειδοποίηση</translation> <translation id="1058262162121953039">Κωδικός PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Εισαγάγετε το νέο PIN σας. Ένα PIN πρέπει να αποτελείται από τουλάχιστον έναν χαρακτήρα και μπορεί να περιέχει γράμματα, αριθμούς και άλλους χαρακτήρες.}other{Εισαγάγετε το νέο PIN σας. Ένα PIN πρέπει να αποτελείται από τουλάχιστον # χαρακτήρες και μπορεί να περιέχει γράμματα, αριθμούς και άλλους χαρακτήρες.}}</translation> <translation id="1059944192885972544">Βρέθηκαν <ph name="NUM" /> καρτέλες για την αναζήτηση "<ph name="SEARCH_TEXT" />"</translation> <translation id="1060292118287751956">Καθορίζει τη συχνότητα ενημέρωσης της οθόνης</translation> <translation id="1061904396131502319">Πλησιάζει η ώρα για διάλειμμα</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Πληκτρολογήστε ένα γράμμα</translation> <translation id="168991973552362966">Προσθήκη εκτυπωτή που βρίσκεται σε κοντινή απόσταση</translation> <translation id="1689945336726856614">Αντιγραφή &URL</translation> +<translation id="1690248886740053041">Δεν είναι δυνατή η σύνδεση σε δίκτυο κινητής τηλεφωνίας. Για τεχνική υποστήριξη, επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας.</translation> <translation id="1692115862433274081">Χρήση διαφορετικού λογαριασμού</translation> <translation id="1692118695553449118">Ο συγχρονισμός είναι ενεργοποιημένος</translation> <translation id="1692210323591458290">Σκούρο μοβ</translation> +<translation id="169279809881363536">Δεν βρέθηκαν προφίλ εργασίας. Για να ρυθμίσετε ένα νέο δίκτυο, σαρώστε τον κωδικό QR χρησιμοποιώντας την κάμερα της συσκευής ή εισαγάγετε τον κωδικό ενεργοποίησης που παρέχει η εταιρεία κινητής τηλεφωνίας σας.</translation> <translation id="1697150536837697295">Art</translation> <translation id="1697686431566694143">Επεξεργασία αρχείου</translation> <translation id="1698122934742150150">Μόνο για την τρέχουσα περίοδο λειτουργίας σε κατάσταση ανώνυμης περιήγησης</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Κατάργηση από τη λίστα</translation> <translation id="2770690685823456775">Εξαγάγετε τους κωδικούς πρόσβασης σε άλλο φάκελο</translation> <translation id="2770929488047004208">Ανάλυση οθόνης</translation> +<translation id="2770954829020464827">Οι λεπτομέρειες αποκρύπτονται όσο μοιράζεστε την οθόνη σας.</translation> <translation id="2771268254788431918">Τα δεδομένα κινητής τηλεφωνίας ενεργοποιήθηκαν</translation> <translation id="2771816809568414714">Τυρί</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Εδώ θα εμφανίζονται οι διαθέσιμες συσκευές USB.</translation> <translation id="3202131003361292969">Διαδρομή</translation> <translation id="3202173864863109533">Ο ήχος αυτής της καρτέλας έχει τεθεί σε σίγαση.</translation> +<translation id="3202218848974251205">Το Privacy Sandbox</translation> <translation id="3208321278970793882">Εφαρμογή</translation> <translation id="3208584281581115441">Έλεγχος τώρα</translation> <translation id="3208703785962634733">Μη επιβεβαιωμένη</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Για να είναι δυνατή η πρόσβαση του λογαριασμού σας στο Google Play Store, πραγματοποιήστε έλεγχο ταυτότητας με τον Πάροχο ταυτότητας.</translation> <translation id="3462311546193741693">Θα αποσυνδεθείτε από τους περισσότερους ιστοτόπους. Θα παραμείνετε συνδεδεμένοι στον Λογαριασμό σας Google, για να μπορέσετε να διαγράψετε τα συγχρονισμένα δεδομένα σας.</translation> <translation id="3462413494201477527">Ακύρωση ρύθμισης λογαριασμού;</translation> +<translation id="3464145797867108663">Προσθήκη προφίλ εργασίας</translation> <translation id="346431825526753">Αυτός είναι ένας λογαριασμός για παιδιά τον οποίο διαχειρίζεται ο χρήστης <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Ετικέτα</translation> <translation id="3468999815377931311">Τηλέφωνο Android</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Παροχή νέων λειτουργιών μόλις γίνουν διαθέσιμες</translation> <translation id="3602290021589620013">Προεπισκόπηση</translation> <translation id="3603622770190368340">Απόκτηση πιστοποιητικού δικτύου</translation> +<translation id="3604193429970465812">Δευτερεύοντες λογαριασμοί</translation> <translation id="3604713164406837697">Αλλαγή ταπετσαρίας</translation> <translation id="3605780360466892872">Άνετος</translation> <translation id="3608576286259426129">Προεπισκόπηση εικόνας χρήστη</translation> @@ -2606,6 +2613,7 @@ Θέλετε να γίνει εκκίνηση του <ph name="CONTROL_PANEL_APPLET_NAME" />;</translation> <translation id="394183848452296464">Δεν είναι δυνατή η δημιουργία συντόμευσης</translation> +<translation id="3943494825379372497">Επαναφορά εφαρμογών και σελίδων;</translation> <translation id="3943582379552582368">&Πίσω</translation> <translation id="3943857333388298514">Επικόλληση</translation> <translation id="3948116654032448504">&Αναζήτηση <ph name="SEARCH_ENGINE" /> για εικόνα</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">Αυτές οι επεκτάσεις δεν χρειάζεται να προβάλλουν και να αλλάζουν τις πληροφορίες σε αυτόν τον ιστότοπο.</translation> <translation id="4046123991198612571">Επόμενο κομμάτι</translation> <translation id="4047726037116394521">Μετάβαση στην Αρχική σελίδα</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# επαφή δεν είναι διαθέσιμη. Για να χρησιμοποιήσετε την Κοινοποίηση κοντά με αυτήν την επαφή, προσθέστε στις επαφές σας τη διεύθυνση ηλεκτρονικού ταχυδρομείου που συσχετίζεται με τον Λογαριασμό Google της επαφής.}other{# επαφές δεν είναι διαθέσιμες. Για να χρησιμοποιήσετε την Κοινοποίηση κοντά με αυτές τις επαφές, προσθέστε στις επαφές σας τις διευθύνσεις ηλεκτρονικού ταχυδρομείου που συσχετίζονται με τους Λογαριασμούς Google των επαφών.}}</translation> <translation id="4050225813016893843">Μέθοδος ελέγχου ταυτότητας</translation> <translation id="4052120076834320548">Πάρα πολύ μικρό</translation> <translation id="4056908315660577142">Συμπλήρωσες το χρονικό όριο που έχει θέσει ο γονέας σου για την εφαρμογή Chrome <ph name="APP_NAME" />. Μπορείς να τη χρησιμοποιήσεις πάλι αύριο για <ph name="TIME_LIMIT" />.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Θύρες</translation> <translation id="4647090755847581616">&Κλείσιμο καρτέλας</translation> <translation id="4647283074445570750">Βήμα <ph name="CURRENT_STEP" /> από <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Εκκίνηση εφαρμογής κατά τη σύνδεση στο tablet σας}computer{Εκκίνηση εφαρμογής κατά τη σύνδεση στον υπολογιστή σας}other{Εκκίνηση εφαρμογής κατά τη σύνδεση στη συσκευή σας}}</translation> <translation id="4647697156028544508">Εισαγάγετε το PIN για τη συσκευή "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Ανεπαρκείς άδειες</translation> <translation id="4648499713050786492">Ξεκλειδώστε το προφίλ σας προτού προσθέσετε κάποιο άτομο.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Θα εμφανίζεται ως <ph name="WIDTH" /> x <ph name="HEIGHT" /> (προεπιλογή)</translation> <translation id="4864369630010738180">Σύνδεση…</translation> <translation id="4864805589453749318">Επίλεξε τον γονέα σου που παραχωρεί την άδεια για την προσθήκη ενός σχολικού λογαριασμού.</translation> +<translation id="4866265760644917470">Το προφίλ προστέθηκε με επιτυχία.</translation> <translation id="486635084936119914">Άνοιγμα ορισμένων τύπων αρχείων αυτόματα μετά τη λήψη</translation> <translation id="48704129375571883">Προσθήκη επιπλέον λειτουργιών</translation> <translation id="4870758487381879312">Καταχωρίστε τον κωδικό πρόσβασης που παρασχέθηκε από τον διαχειριστή, για να λάβετε πληροφορίες διαμόρφωσης</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Ο παραβιασμένος κωδικός πρόσβασης άλλαξε με επιτυχία. Έχετε ακόμη # παραβιασμένο κωδικό πρόσβασης. Το Chrome προτείνει να ελέγξετε άμεσα αυτόν τον κωδικό πρόσβασης.}other{Ο παραβιασμένος κωδικός πρόσβασης άλλαξε με επιτυχία. Έχετε ακόμη # παραβιασμένους κωδικούς πρόσβασης. Το Chrome προτείνει να ελέγξετε άμεσα αυτούς τους κωδικούς πρόσβασης.}}</translation> <translation id="5207949376430453814">Επισήμανση δρομέα κειμένου</translation> <translation id="5209320130288484488">Δεν βρέθηκαν συσκευές</translation> +<translation id="5209572028385096813">Η διαχείριση αυτού του χρήστη πραγματοποιείται από το Family Link</translation> <translation id="5210365745912300556">Κλείσιμο καρτέλας</translation> <translation id="5213481667492808996">Η υπηρεσία δεδομένων "<ph name="NAME" />" είναι έτοιμη για χρήση</translation> <translation id="5213891612754844763">Προβολή ρυθμίσεων διακομιστή μεσολάβησης</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Γλώσσα</translation> <translation id="5302932258331363306">Εμφάνιση αντικαταστάσεων</translation> <translation id="5304276686222516262">Δεν είναι δυνατή η λήψη της λίστας επαφών. Ελέγξτε τη σύνδεση δικτύου σας ή <a href="#" id="tryAgainLink">δοκιμάστε ξανά</a>.</translation> +<translation id="5305145881844743843">Η διαχείριση αυτού του λογαριασμού πραγματοποιείται από τον τομέα <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Δεν υπάρχει εγκατεστημένο</translation> <translation id="5307030433605830021">Η πηγή δεν υποστηρίζεται</translation> <translation id="5308380583665731573">Σύνδεση</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Αποθήκευση</translation> <translation id="5319359161174645648">Η Google συνιστά το Chrome</translation> <translation id="5320112320661303273">Φαίνεται ότι έχετε ήδη ρυθμίσει τον Βοηθό σε διαφορετική συσκευή. Αξιοποιήστε ακόμη περισσότερο τον Βοηθό σας ενεργοποιώντας την παρακάτω ρύθμιση.</translation> +<translation id="5320135788267874712">Νέο όνομα συσκευής</translation> <translation id="532247166573571973">Ο διακομιστής μπορεί να μην είναι προσβάσιμος. Δοκιμάστε ξανά αργότερα.</translation> <translation id="5324300749339591280">Λίστα εφαρμογών</translation> <translation id="5324780743567488672">Αυτόματη ρύθμιση ζώνης ώρας με χρήση της τοποθεσίας σας</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Χρήση πιο διακριτικών μηνυμάτων (συνιστάται)</translation> <translation id="574104302965107104">Κατοπτρισμός οθόνης</translation> <translation id="574209121243317957">Τόνος</translation> +<translation id="5742505912938664543">Όταν προσθέτετε εδώ έναν δευτερεύοντα λογαριασμό, μπορείτε να τον χρησιμοποιήσετε για να περιηγηθείτε στον ιστό, να κατεβάσετε εφαρμογές, να ελέγξετε το Gmail και άλλες υπηρεσίες Google.</translation> <translation id="5746169159649715125">Αποθήκευση ως PDF</translation> <translation id="5747552184818312860">Λήγει</translation> <translation id="5747785204778348146">Προγραμματιστής - ασταθές</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Κενό</translation> <translation id="6130692320435119637">Προσθήκη Wi-Fi</translation> <translation id="6136114942382973861">Κλείσιμο γραμμής λήψεων</translation> +<translation id="6136287496450963112">Το κλειδί ασφαλείας σας δεν προστατεύεται από PIN. Για τη διαχείριση δακτυλικών αποτυπωμάτων, θα πρέπει να δημιουργήσετε αρχικά ένα PIN.</translation> <translation id="6137767437444130246">Πιστοποιητικό χρήστη</translation> <translation id="6138680304137685902">Υπογραφή X9.62 ECDSA με SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, κανένα δίκτυο</translation> @@ -4607,6 +4621,7 @@ <translation id="6331566915566907158">Συμβάλετε στη βελτίωση των λειτουργιών και της απόδοσης του Chrome OS</translation> <translation id="6331818708794917058">Οι ιστότοποι μπορούν να ζητούν τη σύνδεση σε συσκευές MIDI</translation> <translation id="6333064448949140209">Το αρχείο θα σταλεί στην Google για εντοπισμό σφαλμάτων</translation> +<translation id="6334444530352320327">Οι εφαρμογές και οι ρυθμίσεις λειτουργικού συστήματος θα συγχρονιστούν στα Chromebook στα οποία έχετε συνδεθεί με αυτόν τον λογαριασμό.<ph name="LINK_BEGIN" />Ρυθμίσεις συγχρονισμού<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Όλοι οι ιστότοποι μπορούν να προβάλλουν οποιεσδήποτε διαφημίσεις σε εσάς</translation> <translation id="6339668969738228384">Δημιουργία νέου προφίλ για τη διεύθυνση <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Δεν ήταν δυνατή η σύνδεση με τον διακομιστή. Ελέγξτε τη σύνδεση δικτύου και δοκιμάστε ξανά. Εάν το πρόβλημα παραμένει, επανεκκινήστε το Chromebook.</translation> @@ -4908,6 +4923,7 @@ <translation id="6709133671862442373">Ειδήσεις</translation> <translation id="6709357832553498500">Σύνδεση με χρήση <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Προηγούμενο</translation> +<translation id="6713233729292711163">Προσθήκη προφίλ εργασίας</translation> <translation id="6715803357256707211">Παρουσιάστηκε σφάλμα κατά την εγκατάσταση της εφαρμογής σας Linux. Κάντε κλικ στην ειδοποίηση για λεπτομέρειες.</translation> <translation id="671619610707606484">Με αυτήν την ενέργεια θα διαγραφούν <ph name="TOTAL_USAGE" /> των δεδομένων που έχουν αποθηκευτεί από ιστοτόπους.</translation> <translation id="671928215901716392">Κλείδωμα οθόνης</translation> @@ -5276,6 +5292,7 @@ <translation id="7121362699166175603">Διαγράφει το ιστορικό και τα στοιχεία αυτόματης συμπλήρωσης στη γραμμή διευθύνσεων. Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Λειτουργία προγραμματιστή</translation> <translation id="7121728544325372695">Έξυπνες παύλες</translation> +<translation id="7122353087820324370">Οι εφαρμογές και οι ρυθμίσεις λειτουργικού συστήματος δεν συγχρονίζονται στους δευτερεύοντες λογαριασμούς.</translation> <translation id="7123030151043029868">Επιτρέπεται να πραγματοποιούν αυτόματη λήψη πολλών αρχείων</translation> <translation id="7123360114020465152">Δεν υποστηρίζεται πλέον</translation> <translation id="7125148293026877011">Διαγραφή Crostini</translation> @@ -5590,6 +5607,7 @@ <translation id="750509436279396091">Άνοιγμα φακέλου λήψεων</translation> <translation id="7506093026325926984">Αυτός ο κωδικός πρόσβασης θα αποθηκευτεί σε αυτήν τη συσκευή</translation> <translation id="7506130076368211615">Ρύθμιση νέου δικτύου</translation> +<translation id="7506242536428928412">Για να χρησιμοποιήσετε το νέο κλειδί ασφαλείας, ορίστε ένα νέο PIN.</translation> <translation id="7506541170099744506">Η συσκευή <ph name="DEVICE_TYPE" /> εγγράφηκε με επιτυχία για διαχείριση επιχειρήσεων.</translation> <translation id="7507207699631365376">Δείτε την <ph name="BEGIN_LINK" />πολιτική απορρήτου<ph name="END_LINK" /> του παρόχου</translation> <translation id="7507930499305566459">Πιστοποιητικό απόκρισης κατάστασης</translation> @@ -5753,6 +5771,7 @@ <translation id="7691077781194517083">Δεν είναι δυνατή η επαναφορά αυτού του κλειδιού ασφαλείας. Σφάλμα <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Αναβάθμιση Crostini</translation> <translation id="7696063401938172191">Στο τηλέφωνο "<ph name="PHONE_NAME" />":</translation> +<translation id="7697166915480294040">Οι λεπτομέρειες αποκρύπτονται όσο μοιράζεστε την οθόνη σας.</translation> <translation id="7697598343108519171">Χρήση της κάμερας για σάρωση κωδικών QR</translation> <translation id="7699968112832915395">Δεν είναι δυνατή η προσθήκη λογαριασμού.</translation> <translation id="7701040980221191251">Καμία</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Ομοιόμορφο</translation> <translation id="8186609076106987817">Δεν ήταν δυνατός ο εντοπισμός του αρχείου από τον διακομιστή.</translation> <translation id="8188389033983459049">Ελέγξτε τις ρυθμίσεις της συσκευής σας και ενεργοποιήστε την για να συνεχίσετε</translation> +<translation id="8189306097519446565">Σχολικοί λογαριασμοί</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Σύνδεση με <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Διαχείριση των εφαρμογών, των επεκτάσεων και των θεμάτων σας</translation> <translation id="8195027750202970175">Μέγεθος στον δίσκο</translation> @@ -6899,6 +6920,7 @@ <translation id="8986362086234534611">Διαγραφή από τη μνήμη</translation> <translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation> <translation id="8987927404178983737">Μήνας</translation> +<translation id="8989823300731803443">Συνεχίστε από εκεί που σταματήσατε.</translation> <translation id="8990209962746788689">Δεν είναι δυνατή η δημιουργία κωδικού QR</translation> <translation id="8991520179165052608">Ο ιστότοπος μπορεί να χρησιμοποιήσει το μικρόφωνό σας</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 στοιχείο}other{# στοιχεία}}</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 7fb4652..3240ba20 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">No networks</translation> <translation id="1056898198331236512">Warning</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Enter your new PIN. A PIN must be at least one character long and can contain letters, numbers and other characters.}other{Enter your new PIN. A PIN must be at least # characters long and can contain letters, numbers and other characters.}}</translation> <translation id="1059944192885972544">Found <ph name="NUM" /> tabs For '<ph name="SEARCH_TEXT" />'</translation> <translation id="1060292118287751956">Determines the frequency that the screen updates</translation> <translation id="1061904396131502319">Almost time for a break</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Type a letter</translation> <translation id="168991973552362966">Add a nearby printer</translation> <translation id="1689945336726856614">Copy &URL</translation> +<translation id="1690248886740053041">Unable to connect to a mobile network. For technical support, please contact your operator.</translation> <translation id="1692115862433274081">Use another account</translation> <translation id="1692118695553449118">Sync is on</translation> <translation id="1692210323591458290">Dark purple</translation> +<translation id="169279809881363536">No profiles were discovered. To set up a new network, scan the QR code using the device camera or enter the activation code provided by your operator.</translation> <translation id="1697150536837697295">Art</translation> <translation id="1697686431566694143">Edit file</translation> <translation id="1698122934742150150">Current incognito session only</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Remove from list</translation> <translation id="2770690685823456775">Export your passwords to another folder</translation> <translation id="2770929488047004208">Monitor resolution</translation> +<translation id="2770954829020464827">Details are hidden while you share your screen</translation> <translation id="2771268254788431918">Mobile data activated</translation> <translation id="2771816809568414714">Cheese</translation> <translation id="2772936498786524345">Sneaky</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Available USB devices will appear here.</translation> <translation id="3202131003361292969">Path</translation> <translation id="3202173864863109533">This tab's audio is being muted.</translation> +<translation id="3202218848974251205">The privacy sandbox</translation> <translation id="3208321278970793882">App</translation> <translation id="3208584281581115441">Check now</translation> <translation id="3208703785962634733">Unconfirmed</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">To enable your account to access the Google Play Store, please authenticate with your Identity Provider.</translation> <translation id="3462311546193741693">Signs you out of most sites. You'll stay signed in to your Google Account so that your synced data can be cleared.</translation> <translation id="3462413494201477527">Cancel account setup?</translation> +<translation id="3464145797867108663">Add work profile</translation> <translation id="346431825526753">This is an account for kids managed by <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Label</translation> <translation id="3468999815377931311">Android phone</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Offer new features as they become available</translation> <translation id="3602290021589620013">Preview</translation> <translation id="3603622770190368340">Obtain network certificate</translation> +<translation id="3604193429970465812">Secondary accounts</translation> <translation id="3604713164406837697">Change wallpaper</translation> <translation id="3605780360466892872">Businessman</translation> <translation id="3608576286259426129">User image preview</translation> @@ -2606,6 +2613,7 @@ Would you like to start <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Can’t create shortcut</translation> +<translation id="3943494825379372497">Restore apps and pages?</translation> <translation id="3943582379552582368">&Back</translation> <translation id="3943857333388298514">Paste</translation> <translation id="3948116654032448504">&Search <ph name="SEARCH_ENGINE" /> for Image</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">These extensions don't need to see and change information on this site.</translation> <translation id="4046123991198612571">Next track</translation> <translation id="4047726037116394521">Go home</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# contact is not available. To use Nearby Share with them, add the email address associated with their Google Account to your contacts.}other{# contacts are not available. To use Nearby Share with them, add the email addresses associated with their Google Accounts to your contacts.}}</translation> <translation id="4050225813016893843">Authentication method</translation> <translation id="4052120076834320548">Tiny</translation> <translation id="4056908315660577142">You reached the time limit that your parent set for <ph name="APP_NAME" /> Chrome app. You can use it for <ph name="TIME_LIMIT" /> tomorrow.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Ports</translation> <translation id="4647090755847581616">&Close Tab</translation> <translation id="4647283074445570750">Step <ph name="CURRENT_STEP" /> of <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Start app when you sign in to your tablet}computer{Start app when you sign in to your computer}other{Start app when you sign in to your device}}</translation> <translation id="4647697156028544508">Please enter the PIN for "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Insufficient permissions</translation> <translation id="4648499713050786492">Please unlock your profile before adding a person.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Looks like <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Default)</translation> <translation id="4864369630010738180">Signing in...</translation> <translation id="4864805589453749318">Select the parent who is granting permission to add a school account.</translation> +<translation id="4866265760644917470">Profile has been added successfully.</translation> <translation id="486635084936119914">Open certain file types automatically after downloading</translation> <translation id="48704129375571883">Add additional features</translation> <translation id="4870758487381879312">Enter admin-provided password to get configuration info</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Successfully changed the compromised password. You have # more compromised password. Chrome recommends checking this password now.}other{Successfully changed the compromised password. You have # more compromised passwords. Chrome recommends checking these passwords now.}}</translation> <translation id="5207949376430453814">Highlight text caret</translation> <translation id="5209320130288484488">No devices found</translation> +<translation id="5209572028385096813">This user is managed by Family Link</translation> <translation id="5210365745912300556">Close tab</translation> <translation id="5213481667492808996">Your '<ph name="NAME" />' data service is ready to use</translation> <translation id="5213891612754844763">Show proxy settings</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Language</translation> <translation id="5302932258331363306">Show Substitutions</translation> <translation id="5304276686222516262">Unable to download contact list. Please check your network connection, or <a href="#" id="tryAgainLink">try again</a>.</translation> +<translation id="5305145881844743843">This account is managed by <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">None installed</translation> <translation id="5307030433605830021">Source not supported</translation> <translation id="5308380583665731573">Connect</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Save</translation> <translation id="5319359161174645648">Google recommends Chrome</translation> <translation id="5320112320661303273">Looks like you've already set up Assistant on a different device. Get even more out of your Assistant by turning on the following setting.</translation> +<translation id="5320135788267874712">New device name</translation> <translation id="532247166573571973">The server may be unreachable. Try again later.</translation> <translation id="5324300749339591280">Apps list</translation> <translation id="5324780743567488672">Set time zone automatically using your location</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Use quieter messaging (recommended)</translation> <translation id="574104302965107104">Display mirroring</translation> <translation id="574209121243317957">Pitch</translation> +<translation id="5742505912938664543">When you add a secondary account here, you may browse the web, download apps, and check your Gmail and other Google services using that account.</translation> <translation id="5746169159649715125">Save as PDF</translation> <translation id="5747552184818312860">Expires</translation> <translation id="5747785204778348146">Developer - unstable</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Space</translation> <translation id="6130692320435119637">Add Wi-Fi</translation> <translation id="6136114942382973861">Close downloads bar</translation> +<translation id="6136287496450963112">Your security key is not protected with a PIN. To manage fingerprints, first create a PIN.</translation> <translation id="6137767437444130246">User certificate</translation> <translation id="6138680304137685902">X9.62 ECDSA Signature with SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, no network</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Help improve Chrome OS features and performance</translation> <translation id="6331818708794917058">Sites can ask to connect to MIDI devices</translation> <translation id="6333064448949140209">File will be sent to Google for debugging</translation> +<translation id="6334444530352320327">Your apps and OS settings will sync across Chromebooks where you're signed in with this account.<ph name="LINK_BEGIN" />Sync settings<ph name="LINK_END" /></translation> <translation id="6338981933082930623">All sites can show any ads to you</translation> <translation id="6339668969738228384">Create a new profile for <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Couldn’t connect with the server. Please check your network connection and try again. If the problem persists, restart your Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500">Connect using <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Previous</translation> +<translation id="6713233729292711163">Add work profile</translation> <translation id="6715803357256707211">An error occurred during installation of your Linux application. Click on the notification for details.</translation> <translation id="671619610707606484">This will clear <ph name="TOTAL_USAGE" /> of data stored by sites</translation> <translation id="671928215901716392">Lock screen</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Clears history and auto-completions in the address bar. Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Developer mode</translation> <translation id="7121728544325372695">Smart Dashes</translation> +<translation id="7122353087820324370">Apps and OS settings are not synced to secondary accounts.</translation> <translation id="7123030151043029868">Allowed to automatically download multiple files</translation> <translation id="7123360114020465152">No longer supported</translation> <translation id="7125148293026877011">Delete Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Open downloads folder</translation> <translation id="7506093026325926984">This password will be saved on this device</translation> <translation id="7506130076368211615">Set up new network</translation> +<translation id="7506242536428928412">To use your new security key, set a new PIN</translation> <translation id="7506541170099744506">Your <ph name="DEVICE_TYPE" /> has successfully been enrolled for enterprise management.</translation> <translation id="7507207699631365376">See this provider's <ph name="BEGIN_LINK" />privacy policy<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Status Responder Certificate</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Can’t reset this security key. Error <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini upgrade</translation> <translation id="7696063401938172191">On your '<ph name="PHONE_NAME" />':</translation> +<translation id="7697166915480294040">Details are hidden while you share your screen</translation> <translation id="7697598343108519171">Use camera to scan QR code</translation> <translation id="7699968112832915395">Can't add account</translation> <translation id="7701040980221191251">None</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Uniform</translation> <translation id="8186609076106987817">The server could not find the file.</translation> <translation id="8188389033983459049">Check your device settings and turn it on to continue</translation> +<translation id="8189306097519446565">School accounts</translation> +<translation id="8189750580333936930">Privacy sandbox</translation> <translation id="8190193592390505034">Connecting to <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Manage your apps, extensions, and themes</translation> <translation id="8195027750202970175">Size on disk</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">Forget</translation> <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation> <translation id="8987927404178983737">Month</translation> +<translation id="8989823300731803443">Continue where you left off.</translation> <translation id="8990209962746788689">Can't create QR code</translation> <translation id="8991520179165052608">Site can use your microphone</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 item}other{# items}}</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 7bab147..706dd34 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3171,7 +3171,6 @@ <translation id="4646675363240786305">Puertos</translation> <translation id="4647090755847581616">&Cerrar pestaña</translation> <translation id="4647283074445570750">Paso <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Iniciar la app cuando accedas a tu cuenta en la tablet}computer{Iniciar la app cuando accedas a tu cuenta en la computadora}other{Iniciar la app cuando accedas a tu cuenta en el dispositivo}}</translation> <translation id="4647697156028544508">Ingresa el PIN para "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permisos insuficientes</translation> <translation id="4648499713050786492">Desbloquea tu perfil antes de agregar una persona.</translation> @@ -3716,6 +3715,7 @@ <translation id="5317780077021120954">Guardar</translation> <translation id="5319359161174645648">Google recomienda Chrome</translation> <translation id="5320112320661303273">Al parecer, ya configuraste Asistente en otro dispositivo. Activa la siguiente configuración para sacarle más provecho a tu Asistente.</translation> +<translation id="5320135788267874712">Nombre del nuevo dispositivo</translation> <translation id="532247166573571973">Es posible que no se pueda acceder al servidor. Vuelve a intentarlo más tarde.</translation> <translation id="5324300749339591280">Lista de apps</translation> <translation id="5324780743567488672">Configurar la zona horaria automáticamente mediante la ubicación</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index b603d81..620d0c5 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">Puertos</translation> <translation id="4647090755847581616">&Cerrar pestaña</translation> <translation id="4647283074445570750">Paso <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Abrir aplicación al iniciar sesión en tu tablet}computer{Abrir aplicación al iniciar sesión en tu ordenador}other{Abrir aplicación al iniciar sesión en tu dispositivo}}</translation> <translation id="4647697156028544508">Introduce el PIN de "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permisos insuficientes</translation> <translation id="4648499713050786492">Desbloquea tu perfil antes de añadir a un usuario.</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">Guardar</translation> <translation id="5319359161174645648">Google recomienda Chrome</translation> <translation id="5320112320661303273">Parece que ya has configurado el Asistente en otro dispositivo. Saca más partido al Asistente activando la siguiente opción.</translation> +<translation id="5320135788267874712">Nuevo nombre del dispositivo</translation> <translation id="532247166573571973">Es posible que no se pueda acceder al servidor. Vuelve a intentarlo más tarde.</translation> <translation id="5324300749339591280">Lista de aplicaciones</translation> <translation id="5324780743567488672">Establecer la zona horaria de forma automática según tu ubicación</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index c9817f6d..2cafc30 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Võrke ei ole</translation> <translation id="1056898198331236512">Hoiatus</translation> <translation id="1058262162121953039">PUK-kood</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Sisestage oma uus PIN-kood. PIN-kood peab sisaldama vähemalt ühte tähemärki ja see tohib sisaldada nii tähti, numbreid kui ka teisi tähemärke.}other{Sisestage oma uus PIN-kood. PIN-kood peab sisaldama vähemalt # tähemärki ja see tohib sisaldada nii tähti, numbreid kui ka teisi tähemärke.}}</translation> <translation id="1059944192885972544">Päringule „<ph name="SEARCH_TEXT" />” leiti <ph name="NUM" /> vahelehte</translation> <translation id="1060292118287751956">Määrab ekraanikuva värskendamissageduse</translation> <translation id="1061904396131502319">Pausiaeg on peagi käes</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Sisestage täht</translation> <translation id="168991973552362966">Lähedalasuva printeri lisamine</translation> <translation id="1689945336726856614">Kopeeri &URL</translation> +<translation id="1690248886740053041">Mobiilsidevõrguga ühendamine ei õnnestu. Tehnilise toe saamiseks võtke ühendust operaatoriga.</translation> <translation id="1692115862433274081">Kasuta teist kontot</translation> <translation id="1692118695553449118">Sünkroonimine on sisse lülitatud</translation> <translation id="1692210323591458290">Tumelilla</translation> +<translation id="169279809881363536">Ühtegi profiili ei leitud. Uue võrgu seadistamiseks skannige QR-kood seadme kaameraga või sisestage operaatorilt saadud aktiveerimiskood.</translation> <translation id="1697150536837697295">Kunst</translation> <translation id="1697686431566694143">Muuda faili</translation> <translation id="1698122934742150150">Ainult praegune inkognito seanss</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Eemalda loendist</translation> <translation id="2770690685823456775">Eksportige paroolid muusse kausta</translation> <translation id="2770929488047004208">Kuvari eraldusvõime</translation> +<translation id="2770954829020464827">Üksikasjad on ekraanikuva jagamisel peidetud</translation> <translation id="2771268254788431918">Mobiilne andmeside on aktiveeritud</translation> <translation id="2771816809568414714">Juust</translation> <translation id="2772936498786524345">Hiiliv</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Siin kuvatakse saadaolevad USB-seadmed.</translation> <translation id="3202131003361292969">Tee</translation> <translation id="3202173864863109533">Selle vahekaardi heli summutatakse.</translation> +<translation id="3202218848974251205">Privaatsuse liivakast</translation> <translation id="3208321278970793882">Rakendus</translation> <translation id="3208584281581115441">Kontrolli kohe</translation> <translation id="3208703785962634733">Kinnitamata</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Oma kontol Google Play poele juurdepääsu lubamiseks autentige ennast teenuse Identiteedi pakkuja abil.</translation> <translation id="3462311546193741693">Teid logitakse enamikult saitidelt välja. Jääte oma Google'i kontole sisselogituks, et teie sünkroonitud andmed saaks kustutada.</translation> <translation id="3462413494201477527">Kas tühistada konto seadistamine?</translation> +<translation id="3464145797867108663">Lisa tööprofiil</translation> <translation id="346431825526753">Seda lastekontot haldab <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Silt</translation> <translation id="3468999815377931311">Android-telefon</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Pakkuda uusi funktsioone, kui need kättesaadavaks muutuvad</translation> <translation id="3602290021589620013">Eelvaade</translation> <translation id="3603622770190368340">Võrgusertifikaadi hankimine</translation> +<translation id="3604193429970465812">Teisesed kontod</translation> <translation id="3604713164406837697">Taustapildi muutmine</translation> <translation id="3605780360466892872">Triiksärk</translation> <translation id="3608576286259426129">Kasutaja pildi eelvaade</translation> @@ -2606,6 +2613,7 @@ Kas soovite käivitada funktsiooni <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Otseteed ei saa luua</translation> +<translation id="3943494825379372497">Kas taastada rakendused ja lehed?</translation> <translation id="3943582379552582368">&Tagasi</translation> <translation id="3943857333388298514">Kleebi</translation> <translation id="3948116654032448504">&Otsi teenusest <ph name="SEARCH_ENGINE" /> kujutist</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">Need laiendused ei pea sellel saidil olevat teavet nägema ega saama seda muuta.</translation> <translation id="4046123991198612571">Järgmine lugu</translation> <translation id="4047726037116394521">Mine avalehele</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt pole saadaval. Funktsiooni Läheduses jagamine kasutamiseks koos temaga lisage tema Google'i kontoga seotud e-posti aadress oma kontaktide hulka.}other{# kontakti pole saadaval. Funktsiooni Läheduses jagamine kasutamiseks koos nendega lisage nende Google'i kontodega seotud e-posti aadressid oma kontaktide hulka.}}</translation> <translation id="4050225813016893843">Autentimismeetod</translation> <translation id="4052120076834320548">Tilluke</translation> <translation id="4056908315660577142">Jõudsid piiranguni, mille sinu vanem Chrome'i rakenduses <ph name="APP_NAME" /> määras. Homme saad seda kasutada <ph name="TIME_LIMIT" />.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Pordid</translation> <translation id="4647090755847581616">&Sule vaheleht</translation> <translation id="4647283074445570750">Toiming <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Rakendus käivitatakse, kui tahvelarvutisse sisse logite}computer{Rakendus käivitatakse, kui arvutisse sisse logite}other{Rakendus käivitatakse, kui seadmesse sisse logite}}</translation> <translation id="4647697156028544508">Sisestage seadme „<ph name="DEVICE_NAME" />” PIN-kood:</translation> <translation id="4648491805942548247">Ebapiisav luba</translation> <translation id="4648499713050786492">Enne inimese lisamist avage oma profiil.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Näib kui <ph name="WIDTH" /> × <ph name="HEIGHT" /> (vaikeseade)</translation> <translation id="4864369630010738180">Sisselogimine ...</translation> <translation id="4864805589453749318">Vali vanem, kes annab kooli konto lisamiseks loa.</translation> +<translation id="4866265760644917470">Profiili lisamine õnnestus.</translation> <translation id="486635084936119914">Teatud failitüübid avatakse pärast allalaadimist automaatselt</translation> <translation id="48704129375571883">Lisafunktsioonide lisamine</translation> <translation id="4870758487381879312">Seadistusteabe hankimiseks sisestage administraatorilt saadud parool</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Ohustatud parooli muutmine õnnestus. Teil on veel # ohustatud parool. Chrome soovitab seda parooli kohe kontrollida.}other{Ohustatud parooli muutmine õnnestus. Teil on veel # ohustatud parooli. Chrome soovitab neid paroole kohe kontrollida.}}</translation> <translation id="5207949376430453814">Tekstisisestusmärgi esiletõstmine</translation> <translation id="5209320130288484488">Seadmeid ei leitud</translation> +<translation id="5209572028385096813">Seda kasutajat haldab Family Link</translation> <translation id="5210365745912300556">Sule vaheleht</translation> <translation id="5213481667492808996">Võrgu „<ph name="NAME" />” andmesideteenus on kasutamiseks valmis</translation> <translation id="5213891612754844763">Kuva puhverserveri seaded</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Keel</translation> <translation id="5302932258331363306">Kuva asendused</translation> <translation id="5304276686222516262">Kontaktide loendit ei õnnestu alla laadida. Kontrollige oma võrguühendust või <a href="#" id="tryAgainLink">proovige uuesti</a>.</translation> +<translation id="5305145881844743843">Seda kontot haldab <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Pole ühtegi installitud</translation> <translation id="5307030433605830021">Allikat ei toetata</translation> <translation id="5308380583665731573">Ühendamine</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Salvesta</translation> <translation id="5319359161174645648">Google soovitab Chrome'i</translation> <translation id="5320112320661303273">Näib, et olete assistendi teises seadmes juba seadistanud. Kui lülitate sisse järgmise seade, saate assistenti kasutada veelgi paremal moel.</translation> +<translation id="5320135788267874712">Seadme uus nimi</translation> <translation id="532247166573571973">Serveriga ei pruugi ühendust saada. Proovige hiljem uuesti.</translation> <translation id="5324300749339591280">Rakenduste loend</translation> <translation id="5324780743567488672">Määra ajavöönd asukoha alusel automaatselt</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Kasuta vaiksemat sõnumsidet (soovitatav)</translation> <translation id="574104302965107104">Ekraanikuva peegeldamine</translation> <translation id="574209121243317957">Helikõrgus</translation> +<translation id="5742505912938664543">Kui lisate siin teisese konto, saate veebi sirvida, rakendusi alla laadida ning oma Gmaili postkasti ja teisi Google'i teenuseid vaadata selle kontoga.</translation> <translation id="5746169159649715125">Salvesta PDF-ina</translation> <translation id="5747552184818312860">Aegub</translation> <translation id="5747785204778348146">Arendaja – ebastabiilne</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Tühik</translation> <translation id="6130692320435119637">Lisa WiFi</translation> <translation id="6136114942382973861">Sule allalaadimiste riba</translation> +<translation id="6136287496450963112">Teie turvavõti pole PIN-koodiga kaitstud. Sõrmejälgede haldamiseks looge esmalt PIN-kood.</translation> <translation id="6137767437444130246">Kasutaja sertifikaat</translation> <translation id="6138680304137685902">X9.62 ECDSA allkiri SHA-384-ga</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, võrku pole</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Aidake Chrome OS-i funktsioone ja toimivust täiustada</translation> <translation id="6331818708794917058">Saidid saavad küsida luba MIDI-seadmetega ühenduse loomiseks</translation> <translation id="6333064448949140209">Fail saadetakse silumiseks Google'ile</translation> +<translation id="6334444530352320327">Teie rakendused ja OS-i seaded sünkroonitakse kõigis Chromebookides, kuhu olete selle kontoga sisse logitud. <ph name="LINK_BEGIN" />Seadete sünkroonimine<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Kõik saidid saavad teile kuvada mis tahes reklaame</translation> <translation id="6339668969738228384">Loo e-posti aadressile <ph name="USER_EMAIL_ADDRESS" /> uus profiil</translation> <translation id="6340017061976355871">Serveriga ei õnnestunud ühendust luua. Kontrollige võrguühendust ja proovige uuesti. Probleemi jätkumisel taaskäivitage oma Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Uudised</translation> <translation id="6709357832553498500">Ühenda, kasutades laiendust <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Eelmine</translation> +<translation id="6713233729292711163">Lisa tööprofiil</translation> <translation id="6715803357256707211">Linuxi rakenduse installimisel ilmnes viga. Lisateabe saamiseks klõpsake märguandel.</translation> <translation id="671619610707606484">See kustutab <ph name="TOTAL_USAGE" /> ulatuses saitide salvestatud andmeid</translation> <translation id="671928215901716392">Lukusta ekraan</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Kustutab aadressiribalt ajaloo ja automaatse täitmise andmed. Aadressil <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu.</translation> <translation id="7121438501124788993">Arendaja režiim</translation> <translation id="7121728544325372695">Nutikad sidekriipsud</translation> +<translation id="7122353087820324370">Rakendusi ja OS-i seadeid teiseste kontodega ei sünkroonita.</translation> <translation id="7123030151043029868">Lubatud automaatselt mitu faili alla laadida</translation> <translation id="7123360114020465152">Enam ei toetata</translation> <translation id="7125148293026877011">Crostini kustutamine</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Ava allalaaditud failide kaust</translation> <translation id="7506093026325926984">See parool salvestatakse sellesse seadmesse</translation> <translation id="7506130076368211615">Uue võrgu seadistamine</translation> +<translation id="7506242536428928412">Oma uue turvavõtme kasutamiseks seadistage uus PIN-kood</translation> <translation id="7506541170099744506">Teie <ph name="DEVICE_TYPE" /> registreeriti ettevõtte halduse jaoks.</translation> <translation id="7507207699631365376">Vaadake selle teenusepakkuja <ph name="BEGIN_LINK" />privaatsuseeskirju<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Olekuvastaja sertifikaat</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Seda turvavõtit ei saa lähtestada. Viga <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini versiooniuuendus</translation> <translation id="7696063401938172191">Teie seadmes <ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Üksikasjad on ekraanikuva jagamisel peidetud</translation> <translation id="7697598343108519171">Kasutage QR-koodi skannimiseks kaamerat</translation> <translation id="7699968112832915395">Kontot ei saa lisada</translation> <translation id="7701040980221191251">Pole</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Ühtne</translation> <translation id="8186609076106987817">Server ei leidnud faili.</translation> <translation id="8188389033983459049">Kontrollige oma seadme seadeid ja lülitage see jätkamiseks sisse</translation> +<translation id="8189306097519446565">Koolikontod</translation> +<translation id="8189750580333936930">Privaatsuse liivakast</translation> <translation id="8190193592390505034">Ühendamine võrku <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Teie rakenduste, laienduste ja teemade haldamine</translation> <translation id="8195027750202970175">Maht kettal</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">Unusta</translation> <translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation> <translation id="8987927404178983737">kuu</translation> +<translation id="8989823300731803443">Jätkake sealt, kus pooleli jäite.</translation> <translation id="8990209962746788689">QR-koodi ei saa luua</translation> <translation id="8991520179165052608">Sait saab kasutada teie mikrofoni</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 üksus}other{# üksust}}</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 2fd2ea2..a8dca43 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Atakak</translation> <translation id="4647090755847581616">&Itxi fitxa</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /> urratsa</translation> -<translation id="4647420311443994946">{0,select, tablet{Abiarazi aplikazioa tabletan saioa hasten duzunean}computer{Abiarazi aplikazioa ordenagailuan saioa hasten duzunean}other{Abiarazi aplikazioa gailuan saioa hasten duzunean}}</translation> <translation id="4647697156028544508">Idatzi "<ph name="DEVICE_NAME" />" gailuaren PIN kodea:</translation> <translation id="4648491805942548247">Ez dago behar adina baimen</translation> <translation id="4648499713050786492">Desblokeatu profila inor gehitu aurretik.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Gorde</translation> <translation id="5319359161174645648">Google-k Chrome gomendatzen dizu</translation> <translation id="5320112320661303273">Laguntzailea beste gailu batean konfiguratu duzu dagoeneko. Eginbide horri are etekin handiagoa ateratzeko, aktibatu jarraian ageri den ezarpena.</translation> +<translation id="5320135788267874712">Gailuaren izen berria</translation> <translation id="532247166573571973">Baliteke zerbitzarira konektatu ezin izatea. Saiatu berriro geroago.</translation> <translation id="5324300749339591280">Aplikazioen zerrenda</translation> <translation id="5324780743567488672">Ezarri ordu-zona automatikoki kokapenaren arabera</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index ea90d80..1d893f6 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">درگاهها</translation> <translation id="4647090755847581616">&بستن برگه </translation> <translation id="4647283074445570750">مرحله <ph name="CURRENT_STEP" /> از <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{اجرای برنامه هنگام ورود به سیستم رایانه لوحی}computer{اجرای برنامه هنگام ورود به سیستم رایانه}other{اجرای برنامه هنگام ورود به سیستم دستگاه}}</translation> <translation id="4647697156028544508">لطفاً پین را برای "<ph name="DEVICE_NAME" />" وارد کنید:</translation> <translation id="4648491805942548247">مجوزها کافی نیستند</translation> <translation id="4648499713050786492">لطفاً قبل از افزودن شخصی، قفل نمایهتان را باز کنید.</translation> @@ -3717,6 +3716,7 @@ <translation id="5317780077021120954">ذخیره</translation> <translation id="5319359161174645648">Google، Chrome را توصیه میکند</translation> <translation id="5320112320661303273">بهنظر میرسد قبلاً «دستیار» را در دستگاه دیگری راهاندازی کردهاید. با روشن کردن تنظیم زیر، بهره بیشتری از «دستیار» ببرید.</translation> +<translation id="5320135788267874712">نام دستگاه جدید</translation> <translation id="532247166573571973">ممکن است سرور در دسترس نباشد. بعداً دوباره امتحان کنید.</translation> <translation id="5324300749339591280">فهرست برنامهها</translation> <translation id="5324780743567488672">تنظیم خودکار منطقه زمانی با استفاده از موقعیت مکانی شما</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 6a5dd38..1390d20d 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Ei verkkoja</translation> <translation id="1056898198331236512">Varoitus</translation> <translation id="1058262162121953039">PUK-koodi</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Lisää uusi PIN-koodisi. PIN-koodin on oltava vähintään yhden merkin pituinen, ja se voi sisältää kirjaimia, numeroita ja muita merkkejä.}other{Lisää uusi PIN-koodisi. PIN-koodin on oltava vähintään # merkin pituinen, ja se voi sisältää kirjaimia, numeroita ja muita merkkejä.}}</translation> <translation id="1059944192885972544">Haulla "<ph name="SEARCH_TEXT" />" löytyi <ph name="NUM" /> välilehteä</translation> <translation id="1060292118287751956">Määrittää näytön päivitystiheyden</translation> <translation id="1061904396131502319">Pian on tauon paikka</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Kirjoita kirjain</translation> <translation id="168991973552362966">Lisää lähellä oleva tulostin</translation> <translation id="1689945336726856614">Kopioi &URL-osoite</translation> +<translation id="1690248886740053041">Mobiiliverkkoon ei saada yhteyttä. Voit pyytää teknistä tukea operaattorilta.</translation> <translation id="1692115862433274081">Käytä toista tiliä</translation> <translation id="1692118695553449118">Synkronointi on päällä</translation> <translation id="1692210323591458290">Tummanvioletti</translation> +<translation id="169279809881363536">Profiileja ei löytynyt. Jos haluat luoda uuden verkon, skannaa QR-koodi laitteen kameralla tai lisää operaattorisi antama aktivointikoodi.</translation> <translation id="1697150536837697295">Taide</translation> <translation id="1697686431566694143">Muokkaa tiedostoa</translation> <translation id="1698122934742150150">Vain nykyinen incognito-istunto</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Poista luettelosta</translation> <translation id="2770690685823456775">Vie salasanasi toiseen kansioon</translation> <translation id="2770929488047004208">Näytön resoluutio</translation> +<translation id="2770954829020464827">Tiedot on piilotettu näytön jakamisen ajaksi</translation> <translation id="2771268254788431918">Mobiilidata aktivoitu</translation> <translation id="2771816809568414714">Juusto</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Käytettävissä olevat USB-laitteet näkyvät täällä.</translation> <translation id="3202131003361292969">Reitti</translation> <translation id="3202173864863109533">Tämän välilehden äänet on mykistetty.</translation> +<translation id="3202218848974251205">Tietosuojan hiekkalaatikko</translation> <translation id="3208321278970793882">Sovellus</translation> <translation id="3208584281581115441">Tarkista nyt</translation> <translation id="3208703785962634733">Vahvistamaton</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Tunnistustietojen tarjoajan on todennettava henkilöllisyytesi, ennen kuin Google Play Kaupan käyttö tilillä on mahdollista.</translation> <translation id="3462311546193741693">Tämä kirjaa sinut ulos useimmilta sivustoilta. Sinua ei kirjata ulos Google-tililtäsi, jotta synkronoitu datasi voidaan tyhjentää.</translation> <translation id="3462413494201477527">Perutaanko tilin luominen?</translation> +<translation id="3464145797867108663">Lisää työprofiili</translation> <translation id="346431825526753">Tämä on lapsen tili, jota hallinnoi <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Tunniste</translation> <translation id="3468999815377931311">Android-puhelin</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Sinulle voidaan tarjota uusia ominaisuuksia, kun ne tulevat saataville.</translation> <translation id="3602290021589620013">Esikatselu</translation> <translation id="3603622770190368340">Hanki verkkovarmenne</translation> +<translation id="3604193429970465812">Toissijaiset tilit</translation> <translation id="3604713164406837697">Vaihda taustakuva</translation> <translation id="3605780360466892872">Dave</translation> <translation id="3608576286259426129">Käyttäjän kuvan esikatselu</translation> @@ -2603,6 +2610,7 @@ <translation id="3940233957883229251">Ota automaattinen toisto käyttöön</translation> <translation id="3941565636838060942">Jos haluat piilottaa tämän ohjelman käyttöoikeuden, sinun on poistettava sen asennus käyttämällä sovelmaa <ph name="CONTROL_PANEL_APPLET_NAME" /> ohjauspaneelissa. Haluatko käynnistää sovelman <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Pikakuvakkeen luominen epäonnistui</translation> +<translation id="3943494825379372497">Palautetaanko sovellukset ja sivut?</translation> <translation id="3943582379552582368">&Edellinen</translation> <translation id="3943857333388298514">Liitä</translation> <translation id="3948116654032448504">&Hae kuvaa (<ph name="SEARCH_ENGINE" />)</translation> @@ -2688,6 +2696,7 @@ <translation id="4046013316139505482">Näiden laajennusten ei tarvitse nähdä tai muokata sivuston tietoja.</translation> <translation id="4046123991198612571">Seuraava kappale</translation> <translation id="4047726037116394521">Aloitusnäytölle</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakti ei ole saatavilla. Jos haluat käyttää lähijakamista hänen kanssaan, lisää hänen Google-tiliinsä liittyvä sähköpostiosoite yhteystietoihisi.}other{# kontaktia ei ole saatavilla. Jos haluat käyttää lähijakamista heidän kanssaan, lisää heidän Google-tileihinsä liittyvät sähköpostiosoitteet yhteystietoihisi.}}</translation> <translation id="4050225813016893843">Todennustapa</translation> <translation id="4052120076834320548">Pikkuruinen</translation> <translation id="4056908315660577142">Vanhempasi asettama Chrome-sovelluksen (<ph name="APP_NAME" />) aikaraja tuli täyteen. Voit käyttää sitä <ph name="TIME_LIMIT" /> huomenna.</translation> @@ -3171,7 +3180,6 @@ <translation id="4646675363240786305">Portit</translation> <translation id="4647090755847581616">&Sulje välilehti</translation> <translation id="4647283074445570750">Vaihe <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Käynnistä sovellus, kun kirjaudut tabletillesi}computer{Käynnistä sovellus, kun kirjaudut tietokoneellesi}other{Käynnistä sovellus, kun kirjaudut laitteellesi}}</translation> <translation id="4647697156028544508">Anna laitteen <ph name="DEVICE_NAME" /> PIN-koodi:</translation> <translation id="4648491805942548247">Käyttöluvat eivät riitä</translation> <translation id="4648499713050786492">Avaa profiilisi lukitus ennen henkilön lisäämistä.</translation> @@ -3335,6 +3343,7 @@ <translation id="4863769717153320198">Näyttää olevan <ph name="WIDTH" /> x <ph name="HEIGHT" /> (oletus)</translation> <translation id="4864369630010738180">Kirjaudutaan...</translation> <translation id="4864805589453749318">Valitse vanhempi, joka antaa luvan oppilaitostilin lisäämiseen.</translation> +<translation id="4866265760644917470">Profiili on lisätty.</translation> <translation id="486635084936119914">Avaa tietyn tyyppiset tiedostot automaattisesti latauksen jälkeen.</translation> <translation id="48704129375571883">Lisää ominaisuuksia</translation> <translation id="4870758487381879312">Syötä ylläpitäjältä saatu salasana hakeaksesi kokoonpanotiedot</translation> @@ -3618,6 +3627,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Vaarantunut salasana vaihdettu onnistuneesti. Sinulla on vielä # vaarantunut salasana. Chrome suosittelee tarkistamaan tämän salasanan nyt.}other{Vaarantunut salasana vaihdettu onnistuneesti. Sinulla on vielä # vaarantunutta salasanaa. Chrome suosittelee tarkistamaan nämä salasanat nyt.}}</translation> <translation id="5207949376430453814">Korosta tekstikursori</translation> <translation id="5209320130288484488">Laitteita ei löytynyt</translation> +<translation id="5209572028385096813">Käyttäjää ylläpidetään Family Linkillä</translation> <translation id="5210365745912300556">Sulje välilehti</translation> <translation id="5213481667492808996">Datapalvelu (<ph name="NAME" />) on valmiina käyttöön</translation> <translation id="5213891612754844763">Näytä välityspalvelinasetukset</translation> @@ -3703,6 +3713,7 @@ <translation id="5302048478445481009">Kieli</translation> <translation id="5302932258331363306">Näytä korvaavat</translation> <translation id="5304276686222516262">Kontakteja ei voi ladata. Tarkista verkkoyhteys tai <a href="#" id="tryAgainLink">yritä uudelleen</a>.</translation> +<translation id="5305145881844743843">Tätä tiliä hoitaa <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" />.</translation> <translation id="5305688511332277257">Yhtään ei ole asennettu</translation> <translation id="5307030433605830021">Lähdettä ei tueta</translation> <translation id="5308380583665731573">Muodosta yhteys</translation> @@ -3716,6 +3727,7 @@ <translation id="5317780077021120954">Tallenna</translation> <translation id="5319359161174645648">Google suosittelee Chromea</translation> <translation id="5320112320661303273">Näyttää siltä, että olet jo ottanut Assistantin käyttöön toisella laitteella. Assistantista on vielä enemmän hyötyä, kun laitat seuraavan asetuksen päälle.</translation> +<translation id="5320135788267874712">Laitteen uusi nimi</translation> <translation id="532247166573571973">Palvelimeen ei ehkä saada yhteyttä. Yritä uudelleen.</translation> <translation id="5324300749339591280">Sovellusluettelo</translation> <translation id="5324780743567488672">Aseta aikavyöhyke automaattisesti käyttämällä sijaintiasi.</translation> @@ -4083,6 +4095,7 @@ <translation id="5740820643029013514">Valitse hiljaisemmat viestit (suositus)</translation> <translation id="574104302965107104">Näytön peilaus</translation> <translation id="574209121243317957">Äänenkorkeus</translation> +<translation id="5742505912938664543">Kun lisäät tänne toisen tilin, voit selata internetiä, ladata sovelluksia sekä käyttää Gmailia ja muita Googlen palveluja kyseisellä tilillä.</translation> <translation id="5746169159649715125">Tallenna PDF-muodossa</translation> <translation id="5747552184818312860">Vanhenee</translation> <translation id="5747785204778348146">Kehittäjä – epävakaa</translation> @@ -4423,6 +4436,7 @@ <translation id="6129953537138746214">Välilyönti</translation> <translation id="6130692320435119637">Lisää Wi-Fi-yhteys</translation> <translation id="6136114942382973861">Sulje latauspalkki</translation> +<translation id="6136287496450963112">Suojausavaintasi ei ole suojattu PIN-koodilla. Luo PIN-koodi, jotta voit ylläpitää sormenjälkiä.</translation> <translation id="6137767437444130246">Käyttäjävarmenne</translation> <translation id="6138680304137685902">X9.62 ECDSA ‑allekirjoitus, jossa on SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, ei verkkoa</translation> @@ -4605,6 +4619,7 @@ <translation id="6331566915566907158">Auta parantamaan Chrome-käyttöjärjestelmän ominaisuuksia ja suorituskykyä</translation> <translation id="6331818708794917058">Sivustot saavat pyytää lupaa yhdistää MIDI-laitteisiin</translation> <translation id="6333064448949140209">Tiedosto lähetetään Googlelle virheenkorjausta varten.</translation> +<translation id="6334444530352320327">Sovellukset ja käyttöjärjestelmän asetukset synkronoidaan kaikille Chromebookeille, joille olet kirjautunut tällä tilillä.<ph name="LINK_BEGIN" />Synkronointiasetukset<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Kaikki sivustot saavat näyttää sinulle kaikenlaisia mainoksia</translation> <translation id="6339668969738228384">Luo uusi profiili käyttäjälle <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Palvelimeen ei saatu yhteyttä. Tarkista verkkoyhteytesi ja yritä uudelleen. Jos ongelma jatkuu, käynnistä Chromebook uudelleen.</translation> @@ -4906,6 +4921,7 @@ <translation id="6709133671862442373">Uutiset</translation> <translation id="6709357832553498500">Yhdistä laajennuksella <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Edellinen</translation> +<translation id="6713233729292711163">Lisää työprofiili</translation> <translation id="6715803357256707211">Linux-sovelluksen asennuksessa tapahtui virhe. Katso lisätietoja klikkaamalla ilmoitusta.</translation> <translation id="671619610707606484">Tämä poistaa <ph name="TOTAL_USAGE" /> dataa, jonka sivustot ovat tallentaneet.</translation> <translation id="671928215901716392">Näytönlukitus</translation> @@ -5274,6 +5290,7 @@ <translation id="7121362699166175603">Tyhjentää historian ja osoitekentän automaattiset täydennykset. Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Kehittäjätila</translation> <translation id="7121728544325372695">Älykkäät väliviivat</translation> +<translation id="7122353087820324370">Sovelluksia ja käyttöjärjestelmän asetuksia ei synkronoida toissijaisille tileille.</translation> <translation id="7123030151043029868">Useiden tiedostojen automaattinen lataaminen sallittu</translation> <translation id="7123360114020465152">Ei enää tueta</translation> <translation id="7125148293026877011">Poista Crostini</translation> @@ -5588,6 +5605,7 @@ <translation id="750509436279396091">Avaa latauskansio</translation> <translation id="7506093026325926984">Tämä salasana tallennetaan tälle laitteelle</translation> <translation id="7506130076368211615">Lisää uusi verkko</translation> +<translation id="7506242536428928412">Jos haluat käyttää uutta suojausavainta, luo uusi PIN-koodi</translation> <translation id="7506541170099744506">Yrityshallinta on otettu käyttöön laitteessa <ph name="DEVICE_TYPE" />.</translation> <translation id="7507207699631365376">Katso tämän palveluntarjoajan <ph name="BEGIN_LINK" />tietosuojakäytäntö<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Tilavastausvarmenne</translation> @@ -5751,6 +5769,7 @@ <translation id="7691077781194517083">Tätä suojausavainta ei voi nollata. Virhe: <ph name="ERROR_CODE" /></translation> <translation id="7691698019618282776">Crostini-päivitys</translation> <translation id="7696063401938172191"><ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Tiedot on piilotettu näytön jakamisen ajaksi</translation> <translation id="7697598343108519171">Skannaa QR-koodi kameralla</translation> <translation id="7699968112832915395">Tiliä ei voi lisätä</translation> <translation id="7701040980221191251">Ei mitään</translation> @@ -6207,6 +6226,8 @@ <translation id="8184472985242519288">Yhdenmukainen</translation> <translation id="8186609076106987817">Palvelin ei löydä tiedostoa.</translation> <translation id="8188389033983459049">Tarkista laitteesi asetukset ja ota se käyttöön jatkaaksesi</translation> +<translation id="8189306097519446565">Koulutilit</translation> +<translation id="8189750580333936930">Tietosuojan hiekkalaatikko</translation> <translation id="8190193592390505034">Muodostetaan yhteyttä sivustoon <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Hallita sovelluksia, laajennuksia ja teemoja</translation> <translation id="8195027750202970175">Tiedoston koko</translation> @@ -6898,6 +6919,7 @@ <translation id="8986362086234534611">Unohda</translation> <translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation> <translation id="8987927404178983737">Kuukausi</translation> +<translation id="8989823300731803443">Jatka siitä, mihin jäit.</translation> <translation id="8990209962746788689">QR-koodin luominen ei onnistu</translation> <translation id="8991520179165052608">Sivusto voi käyttää mikrofoniasi</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 kohde}other{# kohdetta}}</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 55a1206..81e620f 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Walang network</translation> <translation id="1056898198331236512">Babala</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Ilagay ang iyong bagong PIN. Dapat ay may hindi bababa sa isang character ang PIN, at puwede itong maglaman ng mga titik, numero, at iba pang character.}one{Ilagay ang iyong bagong PIN. Dapat ay may hindi bababa sa # character ang PIN, at puwede itong maglaman ng mga titik, numero, at iba pang character.}other{Ilagay ang iyong bagong PIN. Dapat ay may hindi bababa sa # na character ang PIN, at puwede itong maglaman ng mga titik, numero, at iba pang character.}}</translation> <translation id="1059944192885972544">Nakakita ng <ph name="NUM" /> (na) Tab Para sa '<ph name="SEARCH_TEXT" />'</translation> <translation id="1060292118287751956">Tinutukoy ang frequency na ina-update ng screen</translation> <translation id="1061904396131502319">Halos oras na para magpahinga</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">Mag-type ng titik</translation> <translation id="168991973552362966">Magdagdag ng kalapit na printer</translation> <translation id="1689945336726856614">Kopyahin ang &URL</translation> +<translation id="1690248886740053041">Hindi makakonekta sa isang mobile network. Para sa technical support, makipag-ugnayan sa iyong carrier.</translation> <translation id="1692115862433274081">Gumamit ng ibang account</translation> <translation id="1692118695553449118">Naka-on ang pag-sync</translation> <translation id="1692210323591458290">Dark purple</translation> +<translation id="169279809881363536">Walang profile ang natuklasan. Para mag-set up ng bagong network, i-scan ang QR code gamit ang camera ng device o ilagay ang code sa pag-activate na ibinigay ng iyong carrier</translation> <translation id="1697150536837697295">Sining</translation> <translation id="1697686431566694143">I-edit ang file</translation> <translation id="1698122934742150150">Kasalukuyang incognito na session lang</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">Alisin sa listahan</translation> <translation id="2770690685823456775">I-export ang iyong mga password sa isa pang folder</translation> <translation id="2770929488047004208">Resolution ng monitor</translation> +<translation id="2770954829020464827">Nakatago ang mga detalye habang ibinabahagi mo ang iyong screen</translation> <translation id="2771268254788431918">Na-activate ang mobile data</translation> <translation id="2771816809568414714">Keso</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">Lalabas dito ang mga available na USB device.</translation> <translation id="3202131003361292969">Path</translation> <translation id="3202173864863109533">Iminu-mute ang audio ng tab na ito.</translation> +<translation id="3202218848974251205">Ang Privacy Sandbox</translation> <translation id="3208321278970793882">App</translation> <translation id="3208584281581115441">Suriin ngayon</translation> <translation id="3208703785962634733">Hindi kumpirmado</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">Upang i-enable ang iyong account na i-access ang Google Play Store, paki-authenticate gamit ang Identity Provider mo.</translation> <translation id="3462311546193741693">Sina-sign out ka sa karamihan ng mga site. Hindi ka masa-sign out sa iyong Google Account kaya maki-clear ang naka-sync mong data.</translation> <translation id="3462413494201477527">Kanselahin ang pag-setup ng account?</translation> +<translation id="3464145797867108663">Magdagdag ng profile sa trabaho</translation> <translation id="346431825526753">Isa itong account para sa mga bata na pinamamahalaan ni <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Label</translation> <translation id="3468999815377931311">Android phone</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">Mag-alok ng mga bagong feature kapag naging available ang mga ito</translation> <translation id="3602290021589620013">I-preview</translation> <translation id="3603622770190368340">Kunin ang certificate ng network</translation> +<translation id="3604193429970465812">Mga pangalawang account</translation> <translation id="3604713164406837697">Palitan ang wallpaper</translation> <translation id="3605780360466892872">Bossing</translation> <translation id="3608576286259426129">Preview ng larawan ng user</translation> @@ -2607,6 +2614,7 @@ Gusto mo bang simulan ang <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Hindi makagawa ng shortcut</translation> +<translation id="3943494825379372497">I-restore ang mga app at page?</translation> <translation id="3943582379552582368">&Bumalik</translation> <translation id="3943857333388298514">Paste</translation> <translation id="3948116654032448504">&Maghanap sa <ph name="SEARCH_ENGINE" /> para sa Larawan</translation> @@ -2692,6 +2700,7 @@ <translation id="4046013316139505482">Hindi kailangang makita at baguhin ng mga extension na ito ang impormasyon sa site na ito.</translation> <translation id="4046123991198612571">Susunod na track</translation> <translation id="4047726037116394521">Pumunta sa home</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# contact ang hindi available. Para magamit ang Nearby Share kasama niya, idagdag sa iyong mga contact ang email address na nauugnay sa kanyang Google Account.}one{# contact ang hindi available. Para magamit ang Nearby Share kasama nila, idagdag sa iyong mga contact ang mga email address na nauugnay sa kanilang mga Google Account.}other{# na contact ang hindi available. Para magamit ang Nearby Share kasama nila, idagdag sa iyong mga contact ang mga email address na nauugnay sa kanilang mga Google Account.}}</translation> <translation id="4050225813016893843">Paraan ng pag-authenticate</translation> <translation id="4052120076834320548">Maliit</translation> <translation id="4056908315660577142">Naabot mo na ang limitasyon sa oras na itinakda ng iyong magulang para sa Chrome app na <ph name="APP_NAME" />. Puwede mo itong magamit nang <ph name="TIME_LIMIT" /> bukas.</translation> @@ -3175,7 +3184,6 @@ <translation id="4646675363240786305">Mga Port</translation> <translation id="4647090755847581616">&Isara ang Tab</translation> <translation id="4647283074445570750">Hakbang <ph name="CURRENT_STEP" /> ng <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Buksan ang app kapag nag-sign in ka sa iyong tablet}computer{Buksan ang app kapag nag-sign in ka sa iyong computer}other{Buksan ang app kapag nag-sign in ka sa iyong device}}</translation> <translation id="4647697156028544508">Pakilagay ang PIN para sa "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Hindi sapat na mga pagpapahintulot</translation> <translation id="4648499713050786492">Paki-unlock ang iyong profile bago magdagdag ng tao.</translation> @@ -3339,6 +3347,7 @@ <translation id="4863769717153320198">Mukhang <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Default)</translation> <translation id="4864369630010738180">Nagsa-sign in...</translation> <translation id="4864805589453749318">Piliin ang magulang na nagbibigay ng pahintulot na magdagdag ng pampaaralang account.</translation> +<translation id="4866265760644917470">Matagumpay na naidagdag ang profile.</translation> <translation id="486635084936119914">Awtomatikong buksan ang ilang partikular na uri ng file pagkatapos ma-download</translation> <translation id="48704129375571883">Magdagdag ng mga karagdagang feature</translation> <translation id="4870758487381879312">Ilagay ang password na ibinigay ng admin para makuha ang impormasyon sa pag-configure</translation> @@ -3622,6 +3631,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Napalitan ang nakompromisong password. May # ka pang nakompromisong password. Inirerekomenda ng Chrome na suriin ngayon ang password na ito.}one{Napalitan ang nakompromisong password. May # ka pang nakompromisong password. Inirerekomenda ng Chrome na suriin ngayon ang mga password na ito.}other{Napalitan ang nakompromisong password. May # ka pang nakompromisong password. Inirerekomenda ng Chrome na suriin ngayon ang mga password na ito.}}</translation> <translation id="5207949376430453814">I-highlight ang text caret</translation> <translation id="5209320130288484488">Walang nahanap na mga device</translation> +<translation id="5209572028385096813">Pinapamahalaan ng Family Link ang user na ito</translation> <translation id="5210365745912300556">Isara ang tab</translation> <translation id="5213481667492808996">Magagamit na ang iyong serbisyo ng data ng '<ph name="NAME" />'</translation> <translation id="5213891612754844763">Ipakita ang mga setting ng proxy</translation> @@ -3707,6 +3717,7 @@ <translation id="5302048478445481009">Wika</translation> <translation id="5302932258331363306">Ipakita ang Mga Kahalili</translation> <translation id="5304276686222516262">Hindi ma-download ang listahan ng contact. Tingnan ang iyong koneksyon ng network, o <a href="#" id="tryAgainLink">subukan ulit</a>.</translation> +<translation id="5305145881844743843">Ang account na ito ay pinapamahalaan ng <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Walang naka-install</translation> <translation id="5307030433605830021">Hindi sinusuportahan ang source</translation> <translation id="5308380583665731573">Kumonekta</translation> @@ -3720,6 +3731,7 @@ <translation id="5317780077021120954">I-save</translation> <translation id="5319359161174645648">Inirerekomenda ng Google ang Chrome</translation> <translation id="5320112320661303273">Mukhang na-set up mo na ang Assistant sa ibang device. Mas sulitin ang iyong Assistant sa pamamagitan ng pag-on sa sumusunod na setting.</translation> +<translation id="5320135788267874712">Bagong pangalan ng device</translation> <translation id="532247166573571973">Maaaring hindi makakonekta sa server. Subukang muli sa ibang pagkakataon.</translation> <translation id="5324300749339591280">Listahan ng mga app</translation> <translation id="5324780743567488672">Awtomatikong itakda ang time zone gamit ang iyong lokasyon</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Gumamit ng mas mahinang pagmemensahe (inirerekomenda)</translation> <translation id="574104302965107104">Pag-mirror ng display</translation> <translation id="574209121243317957">Pitch</translation> +<translation id="5742505912938664543">Kapag nagdagdag ka ng pangalawang account dito, magagawa mong i-browse ang web, mag-download ng mga app, tingnan ang iyong Gmail at iba pang serbisyo ng Google gamit ang account na iyon.</translation> <translation id="5746169159649715125">I-save bilang PDF</translation> <translation id="5747552184818312860">Mag-e-expire sa</translation> <translation id="5747785204778348146">Developer - hindi matatag</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Puwang</translation> <translation id="6130692320435119637">Magdagdag ng Wi-Fi</translation> <translation id="6136114942382973861">Isara ang bar ng mga download</translation> +<translation id="6136287496450963112">Hindi pinoprotektahan ng PIN ang iyong security key. Para pamahalaan ang mga fingerprint, gumawa muna ng PIN.</translation> <translation id="6137767437444130246">Certificate ng user</translation> <translation id="6138680304137685902">X9.62 ECDSA Signature na may SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, walang network</translation> @@ -4607,6 +4621,7 @@ <translation id="6331566915566907158">Tumulong na pahusayin ang mga feature at performance ng Chrome OS</translation> <translation id="6331818708794917058">Puwedeng hilingin ng mga site na kumonekta sa mga MIDI device</translation> <translation id="6333064448949140209">Ipapadala ang file sa Google para sa pagde-debug</translation> +<translation id="6334444530352320327">Magsi-sync ang iyong mga app at setting ng OS sa Mga Chromebook kung saan ka naka-sign in gamit ang account na ito.<ph name="LINK_BEGIN" />I-sync ang Mga Setting<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Puwedeng magpakita sa iyo ng anumang ad ang lahat ng site</translation> <translation id="6339668969738228384">Gumawa ng bagong profile para sa <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Hindi makakonekta sa server. Pakitingnan ang iyong koneksyon sa network at subukang muli. Kung magpapatuloy ang problema, i-restart ang Chromebook mo.</translation> @@ -4908,6 +4923,7 @@ <translation id="6709133671862442373">Balita</translation> <translation id="6709357832553498500">Kumonekta sa pamamagitan ng <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Nauna</translation> +<translation id="6713233729292711163">Magdagdag ng Profile sa Trabaho</translation> <translation id="6715803357256707211">Nagkaroon ng error habang ini-install ang iyong Linux application. Mag-click sa notification para sa mga detalye.</translation> <translation id="671619610707606484">Iki-clear nito ang <ph name="TOTAL_USAGE" /> ng data na na-store ng mga site</translation> <translation id="671928215901716392">I-lock ang screen</translation> @@ -5276,6 +5292,7 @@ <translation id="7121362699166175603">Kini-clear ang history at mga autocompletion sa address bar. Maaaring may iba pang anyo ng history ng pag-browse ang iyong Google Account sa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Developer Mode</translation> <translation id="7121728544325372695">Mga Smart na Gitling</translation> +<translation id="7122353087820324370">Hindi naka-sync ang Mga App at setting ng OS sa mga pangalawang account.</translation> <translation id="7123030151043029868">Pinapayagang awtomatikong mag-download ng maraming file</translation> <translation id="7123360114020465152">Hindi na sinusuportahan</translation> <translation id="7125148293026877011">I-delete ang Crostini</translation> @@ -5590,6 +5607,7 @@ <translation id="750509436279396091">Buksan ang folder ng mga download</translation> <translation id="7506093026325926984">Mase-save ang password na ito sa device na ito</translation> <translation id="7506130076368211615">Mag-set up ng bagong network</translation> +<translation id="7506242536428928412">Para gamitin ang iyong bagong security key, magtakda ng bagong PIN</translation> <translation id="7506541170099744506">Matagumpay na na-enroll ang iyong <ph name="DEVICE_TYPE" /> para sa pamamahala ng enterprise.</translation> <translation id="7507207699631365376">Tingnan ang <ph name="BEGIN_LINK" />patakaran sa privacy<ph name="END_LINK" /> ng provider na ito</translation> <translation id="7507930499305566459">Certificate sa Katayuan ng Responder</translation> @@ -5753,6 +5771,7 @@ <translation id="7691077781194517083">Hindi puwedeng i-reset ang security key na ito. Error <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Pag-upgrade ng Crostini</translation> <translation id="7696063401938172191">Sa iyong '<ph name="PHONE_NAME" />':</translation> +<translation id="7697166915480294040">Nakatago ang mga detalye habang ibinabahagi mo ang iyong screen</translation> <translation id="7697598343108519171">Gamitin ang camera para i-scan ang QR code</translation> <translation id="7699968112832915395">Hindi maidagdag ang account</translation> <translation id="7701040980221191251">Wala</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Magkapareho</translation> <translation id="8186609076106987817">Hindi makita ng server ang file.</translation> <translation id="8188389033983459049">Suriin ang mga setting ng iyong device at i-on ito para magpatuloy</translation> +<translation id="8189306097519446565">Mga pampaaralang account</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Kumukonekta sa <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Pamahalaan ang iyong apps, mga extension, at tema</translation> <translation id="8195027750202970175">Sukat sa disk</translation> @@ -6904,6 +6925,7 @@ <translation id="8986362086234534611">Kalimutan</translation> <translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation> <translation id="8987927404178983737">Buwan</translation> +<translation id="8989823300731803443">Magpatuloy kung saan ka tumigil.</translation> <translation id="8990209962746788689">Hindi magawa ang QR code</translation> <translation id="8991520179165052608">Maaaring gamitin ng site ang iyong mikropono</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 item}one{# item}other{# na item}}</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 32a1118..b18b9d8 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -3177,7 +3177,6 @@ <translation id="4646675363240786305">Ports</translation> <translation id="4647090755847581616">&Fermer l'onglet</translation> <translation id="4647283074445570750">Étape <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Démarrer l'application lorsque vous vous connectez à votre tablette}computer{Démarrer l'application lorsque vous vous connectez à votre ordinateur}other{Démarrer l'application lorsque vous vous connectez à votre appareil}}</translation> <translation id="4647697156028544508">Veuillez entrer le NIP pour l'appareil « <ph name="DEVICE_NAME" /> » :</translation> <translation id="4648491805942548247">Autorisations insuffisantes.</translation> <translation id="4648499713050786492">Veuillez déverrouiller votre profil avant d'ajouter une personne.</translation> @@ -3722,6 +3721,7 @@ <translation id="5317780077021120954">Enregistrer</translation> <translation id="5319359161174645648">Google recommande Chrome</translation> <translation id="5320112320661303273">On dirait que vous avez déjà configuré l'Assistant sur un autre appareil. Profitez davantage de votre Assistant en activant le paramètre suivant.</translation> +<translation id="5320135788267874712">Nouveau nom de l'appareil</translation> <translation id="532247166573571973">Le serveur est peut-être inaccessible. Réessayez plus tard.</translation> <translation id="5324300749339591280">Liste des applications</translation> <translation id="5324780743567488672">Régler automatiquement le fuseau horaire en fonction de votre emplacement</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 86e2e1b9..c8af7c6c 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -3176,7 +3176,6 @@ <translation id="4646675363240786305">Ports</translation> <translation id="4647090755847581616">&Fermer l'onglet</translation> <translation id="4647283074445570750">Étape <ph name="CURRENT_STEP" /> sur <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Lancer l'application lorsque vous vous connectez sur votre tablette}computer{Lancer l'application lorsque vous vous connectez sur votre ordinateur}other{Lancer l'application lorsque vous vous connectez sur votre appareil}}</translation> <translation id="4647697156028544508">Saisissez le code d'accès de "<ph name="DEVICE_NAME" />" :</translation> <translation id="4648491805942548247">Autorisations insuffisantes.</translation> <translation id="4648499713050786492">Veuillez déverrouiller votre profil avant d'ajouter une personne.</translation> @@ -3721,6 +3720,7 @@ <translation id="5317780077021120954">Enregistrer</translation> <translation id="5319359161174645648">Google recommande Chrome</translation> <translation id="5320112320661303273">Apparemment, vous avez déjà configuré l'Assistant sur un autre appareil. Exploitez tout le potentiel de l'Assistant en activant le paramètre suivant.</translation> +<translation id="5320135788267874712">Nouveau nom de l'appareil</translation> <translation id="532247166573571973">Le serveur peut être inaccessible. Veuillez réessayer plus tard.</translation> <translation id="5324300749339591280">Liste d'applications</translation> <translation id="5324780743567488672">Définir le fuseau horaire automatiquement à l'aide de votre position</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 80c9795..efb1620 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">Portos</translation> <translation id="4647090755847581616">&Pechar pestana</translation> <translation id="4647283074445570750">Paso <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Abrir aplicación ao iniciar sesión na tableta}computer{Abrir aplicación ao iniciar sesión no ordenador}other{Abrir aplicación ao iniciar sesión no dispositivo}}</translation> <translation id="4647697156028544508">Introduce o PIN de "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permisos insuficientes</translation> <translation id="4648499713050786492">Desbloquea o teu perfil antes de engadir unha persoa.</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">Gardar</translation> <translation id="5319359161174645648">Google recomenda Chrome</translation> <translation id="5320112320661303273">Parece que xa configuraches o Asistente noutro dispositivo. Activa a opción de configuración que se indica a continuación para tirar aínda máis proveito do teu Asistente.</translation> +<translation id="5320135788267874712">Novo nome do dispositivo</translation> <translation id="532247166573571973">É posible que non se poida acceder ao servidor. Téntao de novo máis tarde.</translation> <translation id="5324300749339591280">Lista de aplicacións</translation> <translation id="5324780743567488672">Definir o fuso horario automaticamente a través da túa localización</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 2429835e..a7feee2 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -3171,7 +3171,6 @@ <translation id="4646675363240786305">પોર્ટ</translation> <translation id="4647090755847581616">&Close Tab</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />માંથી <ph name="CURRENT_STEP" /> પગલું</translation> -<translation id="4647420311443994946">{0,select, tablet{તમે તમારા ટૅબ્લેટમાં સાઇન ઇન કરો, ત્યારે આ ઍપ શરૂ કરો}computer{તમે તમારા કમ્પ્યુટરમાં સાઇન ઇન કરો, ત્યારે આ ઍપ શરૂ કરો}other{તમે તમારા ડિવાઇસમાં સાઇન ઇન કરો, ત્યારે આ ઍપ શરૂ કરો}}</translation> <translation id="4647697156028544508">કૃપા કરીને "<ph name="DEVICE_NAME" />" માટે પિન દાખલ કરો:</translation> <translation id="4648491805942548247">અપર્યાપ્ત પરવાનગીઓ</translation> <translation id="4648499713050786492">કોઇ વ્યક્તિને ઉમેરતા પહેલાં કૃપા કરીને તમારી પ્રોફાઇલ અનલૉક કરો.</translation> @@ -3716,6 +3715,7 @@ <translation id="5317780077021120954">સાચવો</translation> <translation id="5319359161174645648">Google Chromeની ભલામણ કરે છે</translation> <translation id="5320112320661303273">એવું લાગે છે કે તમે અન્ય ડિવાઇસ પર પહેલેથી Assistantનું સેટઅપ કર્યું છે. નીચે જણાવેલું સેટિંગ ચાલુ કરીને તમારા Assistantનો હજી પણ વધુ લાભ મેળવો.</translation> +<translation id="5320135788267874712">ડિવાઇસનું નવું નામ</translation> <translation id="532247166573571973">સર્વર પહોંચની બહાર હોઇ શકે છે. પછીથી ફરી પ્રયાસ કરો.</translation> <translation id="5324300749339591280">ઍપની સૂચિ</translation> <translation id="5324780743567488672">તમારા સ્થાનનો ઉપયોગ કરીને ઑટોમૅટિક રીતે સમય ઝોન સેટ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 02f4849..c301dc1 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">नेटवर्क नहीं है</translation> <translation id="1056898198331236512">चेतावनी</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{नया पिन डालें. पिन में कम से कम 1 वर्ण होना ज़रूरी है और इसमें अक्षर, अंक, और दूसरे वर्ण डाले जा सकते हैं.}one{नया पिन डालें. पिन में कम से कम # वर्ण होना ज़रूरी है और इसमें अक्षर, अंक, और दूसरे वर्ण डाले जा सकते हैं.}other{नया पिन डालें. पिन में कम से कम # वर्ण होने ज़रूरी हैं और इसमें अक्षर, अंक, और दूसरे वर्ण डाले जा सकते हैं.}}</translation> <translation id="1059944192885972544">'<ph name="SEARCH_TEXT" />' के लिए, <ph name="NUM" /> टैब मिले</translation> <translation id="1060292118287751956">स्क्रीन अपडेट होने की दर तय की जाती है</translation> <translation id="1061904396131502319">ब्रेक लेने का समय होने वाला है</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">कोई अक्षर लिखें</translation> <translation id="168991973552362966">आस-पास का कोई प्रिंटर जोड़ें</translation> <translation id="1689945336726856614">यूआरएल &की कॉपी करें</translation> +<translation id="1690248886740053041">मोबाइल नेटवर्क से कनेक्ट नहीं किया जा सका. तकनीकी सहायता के लिए, कृपया मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.</translation> <translation id="1692115862433274081">किसी दूसरे खाते का इस्तेमाल करें</translation> <translation id="1692118695553449118">समन्वयन चालू है</translation> <translation id="1692210323591458290">गहरा बैंगनी</translation> +<translation id="169279809881363536">कोई प्रोफ़ाइल नहीं मिली. नया नेटवर्क सेट अप करने के लिए, अपने डिवाइस के कैमरे से क्यूआर कोड को स्कैन करें या मोबाइल और इंटरनेट सेवा देने वाली कंपनी से मिला ऐक्टिवेशन कोड डालें.</translation> <translation id="1697150536837697295">कला</translation> <translation id="1697686431566694143">फ़ाइल में बदलाव करें</translation> <translation id="1698122934742150150">केवल वर्तमान गुप्त सत्र</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">सूची से निकालें</translation> <translation id="2770690685823456775">अपने पासवर्ड किसी दूसरे फ़ोल्डर में निर्यात करें</translation> <translation id="2770929488047004208">मॉनिटर का रिज़ॉल्यूशन</translation> +<translation id="2770954829020464827">स्क्रीन शेयर करने के दौरान सूचना का कॉन्टेंट छिपा रहता है</translation> <translation id="2771268254788431918">मोबाइल डेटा चालू किया गया</translation> <translation id="2771816809568414714">पनीर</translation> <translation id="2772936498786524345">स्नीकी</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">उपलब्ध यूएसबी डिवाइस यहां दिखाई देंगे.</translation> <translation id="3202131003361292969">पाथ</translation> <translation id="3202173864863109533">इस टैब का ऑडियो म्यूट किया जा रहा है.</translation> +<translation id="3202218848974251205">निजता सैंडबॉक्स</translation> <translation id="3208321278970793882">ऐप्लिकेशन</translation> <translation id="3208584281581115441">अभी देखें</translation> <translation id="3208703785962634733">पुष्टि न की गई</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">Google Play स्टोर एक्सेस करने को अपना खाता चालू करने के लिए, कृपया अपनी पहचान देने वाली सेवा के ज़रिए पुष्टि करें.</translation> <translation id="3462311546193741693">आपको अधिकतर साइटों से साइन आउट कर देता है. आप अपने 'Google खाते' में साइन इन रहते हैं ताकि आपका सिंक किया हुआ डेटा साफ़ हो जाए.</translation> <translation id="3462413494201477527">खाता सेटअप रहने दें?</translation> +<translation id="3464145797867108663">वर्क प्रोफ़ाइल जोड़ें</translation> <translation id="346431825526753">यह बच्चों के लिए बनाया गया खाता है जिसे <ph name="CUSTODIAN_EMAIL" /> द्वारा प्रबंधित किया जाता है.</translation> <translation id="3468298837301810372">लेबल</translation> <translation id="3468999815377931311">Android फ़ोन</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">उपलब्ध होने पर नई सुविधाएं ऑफ़र कर सकता है</translation> <translation id="3602290021589620013">झलक देखें</translation> <translation id="3603622770190368340">नेटवर्क प्रमाणपत्र पाएं</translation> +<translation id="3604193429970465812">दूसरे खाते</translation> <translation id="3604713164406837697">वॉलपेपर बदलें</translation> <translation id="3605780360466892872">बटनडाउन</translation> <translation id="3608576286259426129">उपयोगकर्ता के इमेज की झलक</translation> @@ -2606,6 +2613,7 @@ क्या आप <ph name="CONTROL_PANEL_APPLET_NAME" /> को शुरू करना चाहते हैं?</translation> <translation id="394183848452296464">शॉर्टकट नहीं बनाए जा सकते</translation> +<translation id="3943494825379372497">क्या आप ऐप्लिकेशन और पेजों को वापस लाना चाहते हैं?</translation> <translation id="3943582379552582368">&वापस</translation> <translation id="3943857333388298514">चिपकाएं</translation> <translation id="3948116654032448504">इमेज को <ph name="SEARCH_ENGINE" /> पर खोजें</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">इन एक्सटेंशन को साइट की जानकारी देखने या बदलने की ज़रूरत नहीं होती है.</translation> <translation id="4046123991198612571">अगला ट्रैक</translation> <translation id="4047726037116394521">होम पेज पर जाएं</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# संपर्क उपलब्ध नहीं है. इस संपर्क के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इस संपर्क के Google खाते से जुड़ा ईमेल पता अपने संपर्कों में जोड़ें.}one{# संपर्क उपलब्ध नहीं है. इस संपर्क के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इस संपर्क के Google खाते से जुड़ा ईमेल पता अपने संपर्कों में जोड़ें.}other{# संपर्क उपलब्ध नहीं हैं. इन संपर्कों के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इन संपर्कों के Google खातों से जुड़े ईमेल पते अपने संपर्कों में जोड़ें.}}</translation> <translation id="4050225813016893843">पुष्टि करने का तरीका</translation> <translation id="4052120076834320548">छोटा</translation> <translation id="4056908315660577142">आप उस समयसीमा तक पहुंच गए हैं जो आपके माता-पिता ने <ph name="APP_NAME" /> Chrome ऐप्लिकेशन के लिए तय की थी. आप इसे कल <ph name="TIME_LIMIT" /> के लिए इस्तेमाल कर सकते हैं.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">पोर्ट</translation> <translation id="4647090755847581616">&टैब बंद करें</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> में से <ph name="CURRENT_STEP" /> चरण</translation> -<translation id="4647420311443994946">{0,select, tablet{जब आप अपने टैबलेट में साइन इन करते हैं, तब वेब ऐप्लिकेशन को चालू करें}computer{जब आप अपने कंप्यूटर में साइन इन करते हैं, तब वेब ऐप्लिकेशन को चालू करें}other{जब आप अपने डिवाइस में साइन इन करते हैं, तब वेब ऐप्लिकेशन को चालू करें}}</translation> <translation id="4647697156028544508">कृपया "<ph name="DEVICE_NAME" />" के लिए पिन दर्ज करें:</translation> <translation id="4648491805942548247">अपर्याप्त अनुमतियां</translation> <translation id="4648499713050786492">कृपया किसी व्यक्ति को जोड़ने से पहले अपनी प्रोफ़ाइल अनलॉक करें.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जैसा लगता है (डिफ़ॉल्ट)</translation> <translation id="4864369630010738180">प्रवेश कर रहा है...</translation> <translation id="4864805589453749318">उन अभिभावक को चुनें जो स्कूल वाले खाते को जोड़ने के लिए अनुमति दे रहे हैं.</translation> +<translation id="4866265760644917470">प्रोफ़ाइल जोड़ दी गई है.</translation> <translation id="486635084936119914">कुछ निश्चित फ़ाइल प्रकारों को डाउनलोड करने के बाद उन्हें अपने आप खोलें</translation> <translation id="48704129375571883">अतिरिक्त सुविधाएं जोड़ें</translation> <translation id="4870758487381879312">कॉन्फ़िगरेशन की जानकारी पाने के लिए एडमिन का दिया हुआ पासवर्ड डालें</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{हैक किए गए या चोरी हुए पासवर्ड को बदल दिया गया है. आपका # और पासवर्ड या तो हैक हुआ है या चोरी हुआ है. Chrome अभी इस पासवर्ड की जांच करने का सुझाव देता है.}one{हैक किए गए या चोरी हुए पासवर्ड को बदल दिया गया है. आपका # और पासवर्ड या तो हैक हुआ है या चोरी हुआ है. Chrome अभी इस पासवर्ड की जांच करने का सुझाव देता है.}other{हैक किए गए या चोरी हुए पासवर्ड बदल दिए गए हैं. आपके # और पासवर्ड या तो हैक हुए हैं या चोरी हुए हैं. Chrome अभी इन पासवर्ड की जांच करने का सुझाव देता है.}}</translation> <translation id="5207949376430453814">लेख कैरेट हाइलाइट करें</translation> <translation id="5209320130288484488">कोई डिवाइस नहीं मिला</translation> +<translation id="5209572028385096813">इस उपयोगकर्ता खाते को Family Link प्रबंधित करता है</translation> <translation id="5210365745912300556">टैब बंद करें</translation> <translation id="5213481667492808996">आपकी '<ph name="NAME" />' डेटा सेवा इस्तेमाल किए जाने के लिए तैयार है</translation> <translation id="5213891612754844763">प्रॉक्सी सेटिंग दिखाएं</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">भाषा</translation> <translation id="5302932258331363306">Show Substitutions</translation> <translation id="5304276686222516262">संपर्क सूची डाउनलोड नहीं हो सकी. कृपया अपने नेटवर्क कनेक्शन की जांच करें या <a href="#" id="tryAgainLink">फिर से कोशिश करें</a>.</translation> +<translation id="5305145881844743843">इस खाते को <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /> प्रबंधित करता है</translation> <translation id="5305688511332277257">कुछ भी इंस्टॉल नहीं है</translation> <translation id="5307030433605830021">स्रोत काम नहीं करता है</translation> <translation id="5308380583665731573">कनेक्ट करें</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">सेव करें</translation> <translation id="5319359161174645648">Google, Chrome का सुझाव देता है</translation> <translation id="5320112320661303273">ऐसा लगता है कि आपने पहले ही किसी दूसरे डिवाइस पर Google Assistant को सेट अप कर लिया है. नीचे दी गई सेटिंग चालू करके, Assistant का और फ़ायदा पाएं.</translation> +<translation id="5320135788267874712">नए डिवाइस का नाम</translation> <translation id="532247166573571973">हो सकता है कि सर्वर तक पहुंचा नहीं जा सकता हो. बाद में फिर से प्रयास करें.</translation> <translation id="5324300749339591280">ऐप्लिकेशन की सूची</translation> <translation id="5324780743567488672">अपने स्थान का उपयोग करके अपने आप समय क्षेत्र सेट करें</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">मैसेज भेजने के शांत तरीके (जिसमें साइट सूचनाएं न भेजें) का इस्तेमाल करें (सुझाया गया)</translation> <translation id="574104302965107104">डिसप्ले स्क्रीन शेयर करना</translation> <translation id="574209121243317957">पिच</translation> +<translation id="5742505912938664543">जब आप दूसरा खाता जोड़ते हैं, तब आप उस खाते से वेब को ब्राउज़ कर सकते हैं, ऐप्लिकेशन डाउनलोड कर सकते हैं, और Gmail और अन्य Google सेवाओं का इस्तेमाल कर सकते हैं.</translation> <translation id="5746169159649715125">PDF के रूप में सेव करें</translation> <translation id="5747552184818312860">समय सीमा समाप्ति तारीख</translation> <translation id="5747785204778348146">डेवलपर - अस्थिर</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Space</translation> <translation id="6130692320435119637">वाई-फ़ाई जोड़ें</translation> <translation id="6136114942382973861">डाउनलोड बार बंद करें</translation> +<translation id="6136287496450963112">आपकी सुरक्षा कुंजी को पिन से सुरक्षित नहीं किया गया है. फ़िंगरप्रिंट प्रबंधित करने के लिए, पहले एक पिन बनाएं.</translation> <translation id="6137767437444130246">उपयोगकर्ता प्रमाणपत्र</translation> <translation id="6138680304137685902">SHA-384 के साथ X9.62 ECDSA हस्ताक्षर</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, नेटवर्क नहीं है</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Chrome OS की सुविधाओं और परफ़ॉर्मेंस को बेहतर बनाने में मदद करें</translation> <translation id="6331818708794917058">साइटें MIDI डिवाइस से कनेक्ट करने के लिए पूछ सकती हैं</translation> <translation id="6333064448949140209">डीबग करने के लिए फ़ाइल Google को भेजी जाएगी</translation> +<translation id="6334444530352320327">आपने जिन Chromebook में इस खाते से साइन इन किया है उनमें आपके ऐप्लिकेशन और ओएस की सेटिंग को सिंक कर दिया जाएगा.<ph name="LINK_BEGIN" />सेटिंग सिंक करें<ph name="LINK_END" /></translation> <translation id="6338981933082930623">सभी साइटें आपको कोई भी विज्ञापन दिखा सकती हैं</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> के लिए एक नया प्रोफ़ाइल बनाएं</translation> <translation id="6340017061976355871">सर्वर से नहीं जुड़ सका. कृपया अपना नेटवर्क कनेक्शन जाँचें और दोबारा कोशिश करें. अगर समस्या बनी रहती है, तो अपना Chromebook फिर से चालू करें.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> के उपयोग से कनेक्ट करें</translation> <translation id="6710213216561001401">पिछला</translation> +<translation id="6713233729292711163">वर्क प्रोफ़ाइल जोड़ें</translation> <translation id="6715803357256707211">आपके Linux ऐप्लिकेशन को इंस्टॉल करते समय कोई गड़बड़ी हुई. जानकारी पाने के लिए, सूचना पर क्लिक करें.</translation> <translation id="671619610707606484">इससे, साइटों के सेव किए गए कुल डेटा में से <ph name="TOTAL_USAGE" /> डेटा मिट जाएगा</translation> <translation id="671928215901716392">लॉक स्क्रीन</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">पता बार मेंअपने-आपपूर्णता और इतिहास को हटाता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकतेे हैं.</translation> <translation id="7121438501124788993">डेवलपर मोड</translation> <translation id="7121728544325372695">Smart Dashes</translation> +<translation id="7122353087820324370">दूसरे खातों में ऐप्लिकेशन और ओएस सेटिंग को सिंक नहीं किया जाता.</translation> <translation id="7123030151043029868">एक से ज़्यादा फ़ाइलों को अपने-आप डाउनलोड करने की अनुमति नहीं है</translation> <translation id="7123360114020465152">अब काम नहीं करता है</translation> <translation id="7125148293026877011">Crostini मिटाएं</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">डाउनलोड फ़ोल्डर खोलें</translation> <translation id="7506093026325926984">यह पासवर्ड इस डिवाइस में सेव किया जाएगा</translation> <translation id="7506130076368211615">नया नेटवर्क सेट अप करें</translation> +<translation id="7506242536428928412">अपनी नई सुरक्षा कुंजी इस्तेमाल करने के लिए एक नया पिन सेट अप करें</translation> <translation id="7506541170099744506">आपका <ph name="DEVICE_TYPE" /> एंटरप्राइज़ प्रबंधन के लिए सफलतापूर्वक नामांकित हो गया है.</translation> <translation id="7507207699631365376">इस सेवा देने वाले की <ph name="BEGIN_LINK" />निजता नीति<ph name="END_LINK" /> देखें</translation> <translation id="7507930499305566459">स्थिति प्रतिसादी प्रमाणपत्र</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">यह सुरक्षा कुंजी रीसेट नहीं हो पा रही है. गड़बड़ी <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini को अपग्रेड करें</translation> <translation id="7696063401938172191">आपके '<ph name="PHONE_NAME" />' पर:</translation> +<translation id="7697166915480294040">स्क्रीन शेयर करने के दौरान सूचना का कॉन्टेंट छिपा रहता है</translation> <translation id="7697598343108519171">क्यूआर कोड स्कैन करने के लिए कैमरा इस्तेमाल करें</translation> <translation id="7699968112832915395">खाता नहीं जोड़ा जा सकता</translation> <translation id="7701040980221191251">कुछ भी नहीं</translation> @@ -6208,6 +6227,8 @@ <translation id="8184472985242519288">एक जैसा</translation> <translation id="8186609076106987817">सर्वर को फ़ाइल नहीं मिल सकी.</translation> <translation id="8188389033983459049">अपनी डिवाइस सेटिंग जांचें और जारी रखने के लिए उसे चालू करें</translation> +<translation id="8189306097519446565">स्कूल वाले खाते</translation> +<translation id="8189750580333936930">निजता सैंडबॉक्स</translation> <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> से कनेक्ट हो रहा है</translation> <translation id="8191230140820435481">अपने ऐप्स , एक्सटेंशन, और थीम प्रबंधित करें</translation> <translation id="8195027750202970175">डिस्क पर आकार</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">भूल जाएं</translation> <translation id="8986494364107987395">इस्तेमाल के आंकड़े और खराबी रिपोर्ट अपने आप Google को भेजें</translation> <translation id="8987927404178983737">माह</translation> +<translation id="8989823300731803443">वहीं से जारी रखें जहां आपने छोड़ा था.</translation> <translation id="8990209962746788689">क्यूआर कोड नहीं बन पा रहा है</translation> <translation id="8991520179165052608">साइट आपके माइक्रोफ़ोन का इस्तेमाल कर सकती है</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 आइटम}one{# आइटम}other{# आइटम}}</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index e4270e1..d2c51a5c 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nema mreža</translation> <translation id="1056898198331236512">Upozorenje</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Unesite novi PIN. PIN mora imati najmanje jedan znak i može sadržavati slova, brojke i druge znakove.}one{Unesite novi PIN. PIN mora imati najmanje # znak i može sadržavati slova, brojke i druge znakove.}few{Unesite novi PIN. PIN mora imati najmanje # znaka i može sadržavati slova, brojke i druge znakove.}other{Unesite novi PIN. PIN mora imati najmanje # znakova i može sadržavati slova, brojke i druge znakove.}}</translation> <translation id="1059944192885972544">Pronađenih kartica za "<ph name="SEARCH_TEXT" />": <ph name="NUM" /></translation> <translation id="1060292118287751956">Određuje učestalost kojom se zaslon ažurira</translation> <translation id="1061904396131502319">Ubrzo je vrijeme za pauzu</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">Upišite slovo</translation> <translation id="168991973552362966">Dodavanje obližnjeg pisača</translation> <translation id="1689945336726856614">Kopiraj &URL</translation> +<translation id="1690248886740053041">Povezivanje s mobilnom mrežom nije uspjelo. Tehničku podršku zatražite od svojeg mobilnog operatera.</translation> <translation id="1692115862433274081">Upotrijebite neki drugi račun</translation> <translation id="1692118695553449118">Sinkronizacija je uključena</translation> <translation id="1692210323591458290">Tamnoljubičasta</translation> +<translation id="169279809881363536">Nije otkriven nijedan profil. Da biste postavili novu mrežu, skenirajte QR kôd pomoću fotoaparata uređaja ili unesite aktivacijski kôd koji ste dobili od mobilnog operatera.</translation> <translation id="1697150536837697295">Umjetnost</translation> <translation id="1697686431566694143">Uredi datoteku</translation> <translation id="1698122934742150150">Samo trenutačna anonimna sesija</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">Ukloni s popisa</translation> <translation id="2770690685823456775">Izvezite zaporke u neku drugu mapu</translation> <translation id="2770929488047004208">Razlučivost monitora</translation> +<translation id="2770954829020464827">Pojedinosti su skrivene dok dijelite zaslon</translation> <translation id="2771268254788431918">Mobilni podaci aktivirani</translation> <translation id="2771816809568414714">Sir</translation> <translation id="2772936498786524345">Podlac</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">Dostupni USB uređaji prikazat će se ovdje.</translation> <translation id="3202131003361292969">Put</translation> <translation id="3202173864863109533">Zvuk ove kartice isključen je.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">Aplikacija</translation> <translation id="3208584281581115441">Provjeri sad</translation> <translation id="3208703785962634733">Nepotvrđeno</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">Da biste omogućili računu pristup Trgovini Google Play, autentificirajte se pri Davatelju identiteta.</translation> <translation id="3462311546193741693">Odjavit ćete se s većine web-lokacija. Ostat ćete prijavljeni na Google račun kako bi se sinkronizirani podaci mogli izbrisati.</translation> <translation id="3462413494201477527">Želite li otkazati izradu računa?</translation> +<translation id="3464145797867108663">Dodaj poslovni profil</translation> <translation id="346431825526753">Ovo je račun za djecu kojim upravlja <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Oznaka</translation> <translation id="3468999815377931311">Android telefon</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">ponuditi nove značajke kad postanu dostupne</translation> <translation id="3602290021589620013">Pregled</translation> <translation id="3603622770190368340">Dobivanje certifikata mreže</translation> +<translation id="3604193429970465812">Sekundarni računi</translation> <translation id="3604713164406837697">Promjena pozadinske slike</translation> <translation id="3605780360466892872">Poslovnjak</translation> <translation id="3608576286259426129">Pregled korisnikove slike</translation> @@ -2607,6 +2614,7 @@ Želite li pokrenuti <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Nije moguće izraditi prečac</translation> +<translation id="3943494825379372497">Želite li vratiti aplikacije i stranice?</translation> <translation id="3943582379552582368">&Natrag</translation> <translation id="3943857333388298514">Zalijepi</translation> <translation id="3948116654032448504">&Traži sliku uz <ph name="SEARCH_ENGINE" /></translation> @@ -2692,6 +2700,7 @@ <translation id="4046013316139505482">Proširenja ne mogu vidjeti ni mijenjati podatke na ovoj web-lokaciji.</translation> <translation id="4046123991198612571">Sljedeća pjesma</translation> <translation id="4047726037116394521">Otvaranje početnog zaslona</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt nije dostupan. Da biste s tim kontaktom koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adresu povezanu s njegovim Google računom.}one{# kontakt nije dostupan. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}few{# kontakta nisu dostupna. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}other{# kontakata nije dostupno. Da biste s tim kontaktima koristili Dijeljenje s Android uređajima, u kontakte dodajte e-adrese povezane s njihovim Google računima.}}</translation> <translation id="4050225813016893843">Način autentifikacije</translation> <translation id="4052120076834320548">Jako mali</translation> <translation id="4056908315660577142">Dosegnuto je vremensko ograničenje koje je tvoj roditelj postavio za Chromeovu aplikaciju <ph name="APP_NAME" />. Sutra je možeš koristiti <ph name="TIME_LIMIT" />.</translation> @@ -3175,7 +3184,6 @@ <translation id="4646675363240786305">Priključci</translation> <translation id="4647090755847581616">&Close Tab (Zatvori karticu)</translation> <translation id="4647283074445570750">Korak <ph name="CURRENT_STEP" />. od <ph name="TOTAL_STEPS" />.</translation> -<translation id="4647420311443994946">{0,select, tablet{Pokrenite aplikaciju kad se prijavite na svoj tablet}computer{Pokrenite aplikaciju kad se prijavite na svoje računalo}other{Pokrenite aplikaciju kad se prijavite na svoj uređaj}}</translation> <translation id="4647697156028544508">Unesite PIN-a za uređaj "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Nedovoljne dozvole</translation> <translation id="4648499713050786492">Otključajte profil da biste mogli dodati osobu.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Izgleda kao <ph name="WIDTH" /> x <ph name="HEIGHT" /> (zadano)</translation> <translation id="4864369630010738180">Prijavljivanje...</translation> <translation id="4864805589453749318">Odaberi roditelja koji daje dopuštenje za dodavanje školskog računa.</translation> +<translation id="4866265760644917470">Profil je uspješno dodan.</translation> <translation id="486635084936119914">Otvaranje određenih vrsta datoteka automatski nakon preuzimanja</translation> <translation id="48704129375571883">Dodajte još značajki</translation> <translation id="4870758487381879312">Unesite zaporku koju ste dobili od administratora da biste dobili podatke o konfiguraciji</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Uspješno ste promijenili ugroženu zaporku. Imate još # ugroženu zaporku. Chrome preporučuje da odmah provjerite tu zaporku.}one{Uspješno ste promijenili ugroženu zaporku. Imate još # ugroženu zaporku. Chrome preporučuje da odmah provjerite te zaporke.}few{Uspješno ste promijenili ugroženu zaporku. Imate još # ugrožene zaporke. Chrome preporučuje da odmah provjerite te zaporke.}other{Uspješno ste promijenili ugroženu zaporku. Imate još # ugroženih zaporki. Chrome preporučuje da odmah provjerite te zaporke.}}</translation> <translation id="5207949376430453814">Istakni znak za umetanje teksta</translation> <translation id="5209320130288484488">Nije pronađen nijedan uređaj</translation> +<translation id="5209572028385096813">Tim korisnikom upravlja Family Link</translation> <translation id="5210365745912300556">Zatvori karticu</translation> <translation id="5213481667492808996">Vaša podatkovna usluga "<ph name="NAME" />" spremna je za upotrebu</translation> <translation id="5213891612754844763">Prikaži postavke proxyja</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Jezik</translation> <translation id="5302932258331363306">Prikaži zamjene</translation> <translation id="5304276686222516262">Preuzimanje popisa kontakata nije uspjelo. Provjerite mrežnu vezu ili <a href="#" id="tryAgainLink">pokušajte ponovo</a>.</translation> +<translation id="5305145881844743843">Ovim računom upravlja <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Nijedan nije instaliran</translation> <translation id="5307030433605830021">Izvor nije podržan</translation> <translation id="5308380583665731573">Povežite se</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Spremi</translation> <translation id="5319359161174645648">Google preporučuje Chrome</translation> <translation id="5320112320661303273">Izgleda da ste već postavili Asistenta na drugom uređaju. Da biste još bolje iskoristili Asistenta, uključite sljedeće značajke.</translation> +<translation id="5320135788267874712">Novi naziv uređaja</translation> <translation id="532247166573571973">Poslužitelj možda nije dostupan. Pokušajte ponovo kasnije.</translation> <translation id="5324300749339591280">Popis aplikacija</translation> <translation id="5324780743567488672">Automatski postavi vremensku zonu pomoću vlastite lokacije</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Koristi tiše slanje poruka (preporučeno)</translation> <translation id="574104302965107104">Zrcaljenje zaslona</translation> <translation id="574209121243317957">Visina glasa</translation> +<translation id="5742505912938664543">Kad dodate sekundarni račun, možete pregledavati web, preuzimati aplikacije, provjeravati Gmail i druge Googleove usluge pomoću tog računa.</translation> <translation id="5746169159649715125">Spremi kao PDF</translation> <translation id="5747552184818312860">Istječe</translation> <translation id="5747785204778348146">Razvojni programer – nestabilno</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Razmak</translation> <translation id="6130692320435119637">Dodaj Wi-Fi</translation> <translation id="6136114942382973861">Zatvori traku preuzimanja</translation> +<translation id="6136287496450963112">Vaš sigurnosni ključ nije zaštićen PIN-om. Za upravljanje otiscima prstiju najprije izradite PIN.</translation> <translation id="6137767437444130246">Korisnički certifikat</translation> <translation id="6138680304137685902">X9.62 ECDSA potpis uz SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nema mreže</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Pomozite poboljšati značajke i izvedbu OS-a Chrome</translation> <translation id="6331818708794917058">Web-lokacije mogu tražiti dopuštenje za povezivanje s MIDI uređajima</translation> <translation id="6333064448949140209">Datoteka će se poslati Googleu radi uklanjanja pogrešaka</translation> +<translation id="6334444530352320327">Vaše aplikacije i postavke OS-a sinkronizirat će se na svim Chromebookovima na koje ste prijavljeni ovim računom.<ph name="LINK_BEGIN" />Postavke sinkronizacije<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Sve vam web-lokacije mogu prikazivati bilo kakve oglase</translation> <translation id="6339668969738228384">Izradi novi profil za <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Povezivanje s poslužiteljem nije moguće. Provjerite mrežnu vezu i pokušajte ponovo. Ako se problem ne riješi, ponovo pokrenite Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Vijesti</translation> <translation id="6709357832553498500">Poveži pomoću proširenja <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Prethodno</translation> +<translation id="6713233729292711163">Dodaj poslovni profil</translation> <translation id="6715803357256707211">Došlo je do pogreške tijekom instalacije Linux aplikacije. Za pojedinosti kliknite obavijest.</translation> <translation id="671619610707606484">Izbrisat će se <ph name="TOTAL_USAGE" /> podataka koje su spremile web-lokacije</translation> <translation id="671928215901716392">Zaključaj zaslon</translation> @@ -5273,6 +5289,7 @@ <translation id="7121362699166175603">Briše povijest i automatska dovršavanja u adresnoj traci. Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Način razvojnog programera</translation> <translation id="7121728544325372695">Pametne crtice</translation> +<translation id="7122353087820324370">Aplikacije i postavke OS-a ne sinkroniziraju se sa sekundarnim računima.</translation> <translation id="7123030151043029868">Dopušteno je automatsko preuzimanje više datoteka</translation> <translation id="7123360114020465152">Više nije podržan</translation> <translation id="7125148293026877011">Brisanje Crostinija</translation> @@ -5587,6 +5604,7 @@ <translation id="750509436279396091">Otvori mapu preuzimanja</translation> <translation id="7506093026325926984">Zaporka će se spremiti na ovom uređaju</translation> <translation id="7506130076368211615">Postavite novu mrežu</translation> +<translation id="7506242536428928412">Za upotrebu novog sigurnosnog ključa postavite novi PIN</translation> <translation id="7506541170099744506">Vaš je <ph name="DEVICE_TYPE" /> uređaj uspješno registriran za poslovno upravljanje.</translation> <translation id="7507207699631365376">Pogledajte <ph name="BEGIN_LINK" />Pravila o privatnosti<ph name="END_LINK" /> tog davatelja usluga</translation> <translation id="7507930499305566459">Certifikat odgovora statusa</translation> @@ -5750,6 +5768,7 @@ <translation id="7691077781194517083">Taj se sigurnosni ključ ne može vratiti na zadano. Pogreška <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Nadogradnja Crostinija</translation> <translation id="7696063401938172191">Na telefonu <ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Pojedinosti su skrivene dok dijelite zaslon</translation> <translation id="7697598343108519171">Fotoaparatom skenirajte QR kôd</translation> <translation id="7699968112832915395">Nije moguće dodati račun</translation> <translation id="7701040980221191251">Nema ih</translation> @@ -6207,6 +6226,8 @@ <translation id="8184472985242519288">Ujednačeno</translation> <translation id="8186609076106987817">Poslužitelj nije mogao pronaći datoteku.</translation> <translation id="8188389033983459049">Pregledajte postavke uređaja i uključite ga da biste nastavili</translation> +<translation id="8189306097519446565">Školski računi</translation> +<translation id="8189750580333936930">Testno okruženje za privatnost</translation> <translation id="8190193592390505034">Povezivanje s mrežom <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">upravljati vašim aplikacijama, proširenjima i temama</translation> <translation id="8195027750202970175">Veličina na disku</translation> @@ -6898,6 +6919,7 @@ <translation id="8986362086234534611">Zaboravi</translation> <translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation> <translation id="8987927404178983737">Mjesec</translation> +<translation id="8989823300731803443">Nastavite tamo gdje ste stali.</translation> <translation id="8990209962746788689">Izrada QR koda nije uspjela</translation> <translation id="8991520179165052608">Web-lokacija može upotrebljavati vaš mikrofon</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 stavke}one{# stavke}few{# stavke}other{# stavki}}</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index c936152..9148955 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nincs hálózat</translation> <translation id="1056898198331236512">Figyelmeztetés</translation> <translation id="1058262162121953039">PUK-kód</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Írja be az új PIN-kódot. A PIN-kódnak legalább egy karakterből kell állnia, és tartalmazhat betűket, számokat és egyéb karaktereket is.}other{Írja be az új PIN-kódot. A PIN-kódnak legalább # karakterből kell állnia, és tartalmazhat betűket, számokat és egyéb karaktereket is.}}</translation> <translation id="1059944192885972544"><ph name="NUM" /> lap található a következőre: „<ph name="SEARCH_TEXT" />”</translation> <translation id="1060292118287751956">Meghatározza a képernyő frissítési gyakoriságát</translation> <translation id="1061904396131502319">Lassan ideje szünetet tartani</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Írja be a kívánt karaktert</translation> <translation id="168991973552362966">Közeli nyomtató hozzáadása</translation> <translation id="1689945336726856614">&URL másolása</translation> +<translation id="1690248886740053041">Nem lehet csatlakozni mobilhálózathoz. Műszaki segítségért forduljon a szolgáltatóhoz.</translation> <translation id="1692115862433274081">Másik fiók használata</translation> <translation id="1692118695553449118">Szinkronizálás bekapcsolva</translation> <translation id="1692210323591458290">Sötétlila</translation> +<translation id="169279809881363536">Nem találhatók profilok. Új hálózat beállításához olvassa be a QR-kódot az eszköz kamerájával, vagy adja meg a szolgáltató által adott aktiválási kódot.</translation> <translation id="1697150536837697295">Művészet</translation> <translation id="1697686431566694143">Fájl szerkesztése</translation> <translation id="1698122934742150150">Csak a jelenlegi inkognitó munkamenet</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Eltávolítás a listából</translation> <translation id="2770690685823456775">Exportálja a jelszavakat egy másik mappába</translation> <translation id="2770929488047004208">Monitor felbontása</translation> +<translation id="2770954829020464827">A részleteket elrejtjük a képernyőmegosztás során</translation> <translation id="2771268254788431918">Mobiladat-forgalom aktiválva</translation> <translation id="2771816809568414714">Sajt</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">A rendelkezésre álló USB-eszközök itt jelennek meg.</translation> <translation id="3202131003361292969">Útvonal</translation> <translation id="3202173864863109533">A lap hangja némítva van.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">Alkalmazás</translation> <translation id="3208584281581115441">Ellenőrzés most</translation> <translation id="3208703785962634733">Nincs megerősítve</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">A Google Play Áruházhoz való hozzáférés engedélyezéséhez hitelesítse fiókját az identitásszolgáltatóján keresztül.</translation> <translation id="3462311546193741693">A rendszer kijelentkezteti a legtöbb webhelyről. Google-fiókjába bejelentkezve marad, hogy lehetséges legyen a szinkronizált adatok törlése.</translation> <translation id="3462413494201477527">Kilép a fiókbeállításból?</translation> +<translation id="3464145797867108663">Munkaprofil hozzáadása</translation> <translation id="346431825526753">Ez a fiók gyerekeknek készült; <ph name="CUSTODIAN_EMAIL" /> felügyelete mellett.</translation> <translation id="3468298837301810372">Címke</translation> <translation id="3468999815377931311">Androidos telefon</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Értesítés az újonnan hozzáférhetővé vált funkciókról</translation> <translation id="3602290021589620013">Előnézet</translation> <translation id="3603622770190368340">Hálózati tanúsítvány beszerzése</translation> +<translation id="3604193429970465812">Másodlagos fiókok</translation> <translation id="3604713164406837697">Háttérkép megváltoztatása</translation> <translation id="3605780360466892872">Üzletember</translation> <translation id="3608576286259426129">Felhasználói kép előnézete</translation> @@ -2605,6 +2612,7 @@ Elindítja a következőt: <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Nem sikerült billentyűparancsot létrehozni</translation> +<translation id="3943494825379372497">Visszaállítja az alkalmazásokat és az oldalakat?</translation> <translation id="3943582379552582368">&Előző</translation> <translation id="3943857333388298514">Beillesztés</translation> <translation id="3948116654032448504">Képkere&sés ezzel: <ph name="SEARCH_ENGINE" /></translation> @@ -2690,6 +2698,7 @@ <translation id="4046013316139505482">Ezeknek a bővítményeknek nincs szükségük az ezen a webhelyen található információk megtekintésére és módosítására.</translation> <translation id="4046123991198612571">Következő szám</translation> <translation id="4047726037116394521">Kezdőképernyő</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# ismerős nem áll rendelkezésre. Ha vele szeretné használni a Közeli megosztás funkciót, adja hozzá a Google-fiókjához tartozó e-mail-címet a névjegyzékhez.}other{# ismerős nem áll rendelkezésre. Ha velük szeretné használni a Közeli megosztás funkciót, adja hozzá a Google-fiókjukhoz tartozó e-mail-címüket a névjegyzékhez.}}</translation> <translation id="4050225813016893843">Hitelesítési mód</translation> <translation id="4052120076834320548">Legkisebb</translation> <translation id="4056908315660577142">Elérted a szülő által beállított időkorlátot a(z) <ph name="APP_NAME" /> Chrome-alkalmazásban. Holnap újra használhatod a megadott ideig (<ph name="TIME_LIMIT" />).</translation> @@ -3173,7 +3182,6 @@ <translation id="4646675363240786305">Portok</translation> <translation id="4647090755847581616">&Lap bezárása</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />/<ph name="CURRENT_STEP" />. lépés</translation> -<translation id="4647420311443994946">{0,select, tablet{Alkalmazás indítása a táblagépen való bejelentkezéskor}computer{Alkalmazás indítása a számítógépen való bejelentkezéskor}other{Alkalmazás indítása az eszközön való bejelentkezéskor}}</translation> <translation id="4647697156028544508">Kérjük, adja meg a(z) "<ph name="DEVICE_NAME" />" PIN kódját:</translation> <translation id="4648491805942548247">Elégtelen engedélyek</translation> <translation id="4648499713050786492">Mielőtt hozzáadna valakit, oldja fel profilját.</translation> @@ -3337,6 +3345,7 @@ <translation id="4863769717153320198">Megjelenés: <ph name="WIDTH" /> × <ph name="HEIGHT" /> (alapértelmezett)</translation> <translation id="4864369630010738180">Bejelentkezés...</translation> <translation id="4864805589453749318">Válaszd ki a szülőt, aki engedélyezi az iskolai fiók hozzáadását.</translation> +<translation id="4866265760644917470">Sikerült a profil hozzáadása.</translation> <translation id="486635084936119914">Bizonyos fájltípusok automatikus megnyitása letöltés után</translation> <translation id="48704129375571883">További funkciók hozzáadása</translation> <translation id="4870758487381879312">A konfigurációs információkhoz adja meg a rendszergazdától kapott jelszót</translation> @@ -3620,6 +3629,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Sikerült a nyilvánosságra került jelszó módosítása. # további jelszava került nyilvánosságra. A Chrome azt javasolja, hogy azonnal ellenőrizze ezt a jelszót.}other{Sikerült a nyilvánosságra került jelszó módosítása. # további jelszava került nyilvánosságra. A Chrome azt javasolja, hogy azonnal ellenőrizze ezeket a jelszavakat.}}</translation> <translation id="5207949376430453814">Szövegbeszúrási pont kiemelése</translation> <translation id="5209320130288484488">Nem találhatók eszközök</translation> +<translation id="5209572028385096813">Ezt a fiókot a Family Linkkel kezelik</translation> <translation id="5210365745912300556">Lap bezárása</translation> <translation id="5213481667492808996">„<ph name="NAME" />” adatszolgáltatása készen áll a használatra</translation> <translation id="5213891612754844763">Proxybeállítások megjelenítése</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Nyelv</translation> <translation id="5302932258331363306">Cserék megjelenítése</translation> <translation id="5304276686222516262">Nem sikerült a névjegylista letöltése. Ellenőrizze a hálózati kapcsolatot, vagy <a href="#" id="tryAgainLink">próbálja újra</a>.</translation> +<translation id="5305145881844743843">A fiók kezelője: <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Nincs telepítve</translation> <translation id="5307030433605830021">A forrás nem támogatott</translation> <translation id="5308380583665731573">Csatlakozás</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Mentés</translation> <translation id="5319359161174645648">A Google a Chrome-ot ajánlja</translation> <translation id="5320112320661303273">Úgy tűnik, hogy egy másik eszközön már beállította a Segédet. Még többet kihozhat Segédjéből, ha bekapcsolja a következő beállítást.</translation> +<translation id="5320135788267874712">Új eszköz neve</translation> <translation id="532247166573571973">Lehet, hogy nem áll rendelkezésre a szerver. Próbálja újra később.</translation> <translation id="5324300749339591280">Alkalmazások listája</translation> <translation id="5324780743567488672">Időzóna automatikus beállítása a tartózkodási hely alapján</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Kevésbé zavaró üzenetek használata (ajánlott)</translation> <translation id="574104302965107104">Kijelző tükrözése</translation> <translation id="574209121243317957">Hangmagasság</translation> +<translation id="5742505912938664543">Ha itt másodlagos fiókot is hozzáad, azzal a fiókkal is böngészhet az interneten, letölthet alkalmazásokat, használhatja Gmail-fiókját és egyéb Google-szolgáltatásait.</translation> <translation id="5746169159649715125">Mentés PDF-ként</translation> <translation id="5747552184818312860">Lejár</translation> <translation id="5747785204778348146">Fejlesztői – nem stabil</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Szóköz</translation> <translation id="6130692320435119637">Wi-Fi hozzáadása</translation> <translation id="6136114942382973861">A letöltéssáv bezárása</translation> +<translation id="6136287496450963112">Biztonsági kulcsát nem védi PIN-kód. Ujjlenyomatok kezeléséhez előbb hozzon létre PIN-kódot.</translation> <translation id="6137767437444130246">Felhasználói tanúsítvány</translation> <translation id="6138680304137685902">X9.62 ECDSA aláírás a következővel: SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nincs hálózat</translation> @@ -4607,6 +4621,7 @@ <translation id="6331566915566907158">Hozzájárulás a Chrome OS funkcióinak és teljesítményének javításához</translation> <translation id="6331818708794917058">A webhelyek engedélyt kérhetnek a MIDI-eszközökhöz való csatlakozásra</translation> <translation id="6333064448949140209">A fájlt elküldjük a Google-nak hibakeresésre</translation> +<translation id="6334444530352320327">Alkalmazásai és rendszerbeállításai szinkronizálódnak minden olyan Chromebookon, amelyen ezzel a fiókkal van bejelentkezve. <ph name="LINK_BEGIN" />Szinkronizálási beállítások<ph name="LINK_END" />.</translation> <translation id="6338981933082930623">Minden webhely megjeleníthet hirdetéseket Önnek</translation> <translation id="6339668969738228384">Új profil létrehozása a következőhöz: <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Nem sikerült csatlakozni a szerverhez. Ellenőrizze a hálózati kapcsolatot, és próbálja újra. Ha a probléma továbbra is fennáll, indítsa újra a Chromebookot.</translation> @@ -4908,6 +4923,7 @@ <translation id="6709133671862442373">Hírek</translation> <translation id="6709357832553498500">Csatlakozás a következővel: <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Előző</translation> +<translation id="6713233729292711163">Munkaprofil hozzáadása</translation> <translation id="6715803357256707211">Hiba történt a Linux-alkalmazás telepítése során. Részletekért kattintson az értesítésre.</translation> <translation id="671619610707606484">Ezzel törli a webhelyek által tárolt összesen <ph name="TOTAL_USAGE" />-nyi adatot</translation> <translation id="671928215901716392">Képernyő lezárása</translation> @@ -5276,6 +5292,7 @@ <translation id="7121362699166175603">Törli a címsávban található előzményeket és automatikus kiegészítéseket. Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webhelyen.</translation> <translation id="7121438501124788993">Fejlesztői mód</translation> <translation id="7121728544325372695">Intelligens kötőjelek</translation> +<translation id="7122353087820324370">A rendszer nem szinkronizálja az alkalmazásokat és az operációs rendszer beállításait a másodlagos fiókokkal.</translation> <translation id="7123030151043029868">Letölthetnek automatikusan egyszerre több fájlt</translation> <translation id="7123360114020465152">Már nem támogatott</translation> <translation id="7125148293026877011">A Crostini törlése</translation> @@ -5590,6 +5607,7 @@ <translation id="750509436279396091">Letöltések mappa megnyitása</translation> <translation id="7506093026325926984">A jelszó mentve lesz ezen az eszközön</translation> <translation id="7506130076368211615">Új hálózat beállítása</translation> +<translation id="7506242536428928412">Az új biztonsági kulcs használatához állítson be új PIN-kódot.</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> eszközének vállalati kezelés céljából történő rögzítése sikerült.</translation> <translation id="7507207699631365376">Olvassa el a szolgáltató <ph name="BEGIN_LINK" />adatvédelmi irányelveit<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Állapotjelentő tanúsítvány</translation> @@ -5753,6 +5771,7 @@ <translation id="7691077781194517083">Nem lehetséges a biztonsági hardverkulcs visszaállítása. Hibakód: <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">A Crostini frissítése</translation> <translation id="7696063401938172191">„<ph name="PHONE_NAME" />” telefonján:</translation> +<translation id="7697166915480294040">A részleteket elrejtjük a képernyőmegosztás során</translation> <translation id="7697598343108519171">Kamera használata a QR-kód beolvasásához</translation> <translation id="7699968112832915395">Nem lehet hozzáadni a fiókot</translation> <translation id="7701040980221191251">Nincs</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Szabványos</translation> <translation id="8186609076106987817">A szerver nem találta a fájlt.</translation> <translation id="8188389033983459049">Ellenőrizze eszköze beállításait, és kapcsolja be a folytatáshoz</translation> +<translation id="8189306097519446565">Iskolai fiókok</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Csatlakozás a következő hálózathoz: <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Alkalmazások, bővítmények és témák kezelése</translation> <translation id="8195027750202970175">Lemezen elfoglalt méret</translation> @@ -6901,6 +6922,7 @@ <translation id="8986362086234534611">Elfelejt</translation> <translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation> <translation id="8987927404178983737">hónap</translation> +<translation id="8989823300731803443">Folytathatja onnan, ahol abbahagyta.</translation> <translation id="8990209962746788689">Nem lehet létrehozni QR-kódot</translation> <translation id="8991520179165052608">A webhely használhatja a mikrofonját</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 elem}other{# elem}}</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index f4a4f353..a4489736c 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -3176,7 +3176,6 @@ <translation id="4646675363240786305">Միացքներ</translation> <translation id="4647090755847581616">&Փակել ներդիրը</translation> <translation id="4647283074445570750">Քայլ <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Միացնել հավելվածը, երբ մտնում եմ հաշիվ իմ պլանշետում}computer{Միացնել հավելվածը, երբ մտնում եմ հաշիվ իմ համակարգչում}other{Միացնել հավելվածը, երբ մտնում եմ հաշիվ իմ սարքում}}</translation> <translation id="4647697156028544508">Մուտքագրեք «<ph name="DEVICE_NAME" />»-ի PIN-ը՝</translation> <translation id="4648491805942548247">Թույլտվությունները բավարար չեն</translation> <translation id="4648499713050786492">Ապակողպեք ձեր պրոֆիլը նախքան որևէ մեկին ավելացնելը:</translation> @@ -3724,6 +3723,7 @@ <translation id="5317780077021120954">Պահել</translation> <translation id="5319359161174645648">Google-ը խորհուրդ է տալիս Chrome դիտարկիչը</translation> <translation id="5320112320661303273">Դուք կարծես արդեն կարգավորել եք Google Օգնականը մեկ այլ սարքում։ Միացրեք այս կարգավորումը՝ Օգնականի ավելի շատ հնարավորություններից օգտվելու համար։</translation> +<translation id="5320135788267874712">Սարքի նոր անվանումը</translation> <translation id="532247166573571973">Սերվերն անհասանելի է: Փորձեք մի փոքր ուշ:</translation> <translation id="5324300749339591280">Հավելվածների ցանկ</translation> <translation id="5324780743567488672">Սահմանել ժամային գոտին ավտոմատ՝ ձեր տեղադրության հիման վրա</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index fb7978c..d637782e 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Port</translation> <translation id="4647090755847581616">&Tutup Tab</translation> <translation id="4647283074445570750">Langkah <ph name="CURRENT_STEP" /> dari <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Mulai aplikasi saat Anda login ke tablet Anda}computer{Mulai aplikasi saat Anda login ke komputer Anda}other{Mulai aplikasi saat Anda login ke perangkat Anda}}</translation> <translation id="4647697156028544508">Masukkan PIN untuk "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Izin tidak mencukupi</translation> <translation id="4648499713050786492">Buka kunci profil sebelum menambahkan orang.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Simpan</translation> <translation id="5319359161174645648">Google merekomendasikan Chrome</translation> <translation id="5320112320661303273">Sepertinya Anda sudah menyiapkan Asisten di perangkat lain. Optimalkan penggunaan Asisten Anda dengan mengaktifkan setelan berikut ini.</translation> +<translation id="5320135788267874712">Nama baru perangkat</translation> <translation id="532247166573571973">Server mungkin tidak dapat dijangkau. Coba lagi nanti.</translation> <translation id="5324300749339591280">Daftar aplikasi</translation> <translation id="5324780743567488672">Setel zona waktu secara otomatis menggunakan lokasi Anda</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index ad42e69..846793d 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -3175,7 +3175,6 @@ <translation id="4646675363240786305">Gáttir</translation> <translation id="4647090755847581616">Loka flipa</translation> <translation id="4647283074445570750">Skref <ph name="CURRENT_STEP" /> af <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Ræsa forrit þegar þú skráir þig inn í spjaldtölvuna þína}computer{Ræsa forrit þegar þú skráir þig inn í tölvuna þína}other{Ræsa forrit þegar þú skráir þig inn í tækið þitt}}</translation> <translation id="4647697156028544508">Sláðu inn PIN-númer fyrir „<ph name="DEVICE_NAME" />“:</translation> <translation id="4648491805942548247">Ekki nægar heimildir</translation> <translation id="4648499713050786492">Opnaðu prófílinn þinn áður en aðila er bætt við.</translation> @@ -3720,6 +3719,7 @@ <translation id="5317780077021120954">Vista</translation> <translation id="5319359161174645648">Google mælir með Chrome</translation> <translation id="5320112320661303273">Þú virðist þegar hafa sett Hjálparann upp í öðru tæki. Fáðu enn meira út úr Hjálparanum með því að kveikja á eftirfarandi stillingu.</translation> +<translation id="5320135788267874712">Nýtt heiti tækis</translation> <translation id="532247166573571973">Hugsanlega er ekki hægt að ná í þjóninn. Reyndu aftur síðar.</translation> <translation id="5324300749339591280">Forritalisti</translation> <translation id="5324780743567488672">Stilla tímabelti sjálfkrafa eftir staðsetningunni þinni</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 5dc9782..61929bb 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">Porte</translation> <translation id="4647090755847581616">&Chiudi scheda</translation> <translation id="4647283074445570750">Passaggio <ph name="CURRENT_STEP" /> di <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Avvia l'app quando accedi al tablet}computer{Avvia l'app quando accedi al computer}other{Avvia l'app quando accedi al dispositivo}}</translation> <translation id="4647697156028544508">Inserisci il codice PIN per "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Autorizzazioni insufficienti</translation> <translation id="4648499713050786492">Sblocca il tuo profilo prima di aggiungere una persona.</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">Salva</translation> <translation id="5319359161174645648">Google consiglia Chrome</translation> <translation id="5320112320661303273">Hai già configurato l'assistente su un altro dispositivo. Ottieni ancora di più dall'assistente attivando la seguente impostazione.</translation> +<translation id="5320135788267874712">Nuovo nome dispositivo</translation> <translation id="532247166573571973">Il server potrebbe non essere raggiungibile. Riprova più tardi.</translation> <translation id="5324300749339591280">Elenco di app</translation> <translation id="5324780743567488672">Imposta automaticamente il fuso orario in base alla posizione</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 6701b07..c5deac1 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">יציאות</translation> <translation id="4647090755847581616">&סגירת כרטיסייה</translation> <translation id="4647283074445570750">שלב <ph name="CURRENT_STEP" /> מתוך <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{הפעלת האפליקציה בכניסה לחשבון בטאבלט}computer{הפעלת האפליקציה בכניסה לחשבון במחשב}other{הפעלת האפליקציה בכניסה לחשבון במכשיר}}</translation> <translation id="4647697156028544508">הזנת קוד אימות עבור "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">הרשאות לא מספיקות</translation> <translation id="4648499713050786492">יש לבטל את נעילת הפרופיל שלך לפני הוספה של משתמש מסוים.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">שמירה</translation> <translation id="5319359161174645648">Google ממליצה על Chrome</translation> <translation id="5320112320661303273">נראה שכבר הגדרת את Assistant במכשיר אחר. אפשר להפיק הרבה יותר תועלת מה-Assistant אם מפעילים את ההגדרות הבאות.</translation> +<translation id="5320135788267874712">השם החדש של המכשיר</translation> <translation id="532247166573571973">ייתכן שהשרת אינו נגיש. יש לנסות שוב מאוחר יותר.</translation> <translation id="5324300749339591280">רשימת האפליקציות</translation> <translation id="5324780743567488672">היעזרות במיקום להגדרה אוטומטית של אזור הזמן</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index b72fceed..d8dba4e4 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">ポート</translation> <translation id="4647090755847581616">タブを閉じる(&C)</translation> <translation id="4647283074445570750">ステップ <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{タブレットにログインしたらアプリを開始する}computer{パソコンにログインしたらアプリを開始する}other{デバイスにログインしたらアプリを開始する}}</translation> <translation id="4647697156028544508">「<ph name="DEVICE_NAME" />」の PIN を入力してください:</translation> <translation id="4648491805942548247">十分な権限がありません</translation> <translation id="4648499713050786492">ユーザーを追加するにはまずプロフィールのロックを解除してください。</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">保存</translation> <translation id="5319359161174645648">Google は Chrome を推奨しています</translation> <translation id="5320112320661303273">別のデバイスですでにアシスタントを設定しているようです。以下の設定をオンにして、アシスタントをもっと活用しましょう。</translation> +<translation id="5320135788267874712">新しいデバイス名</translation> <translation id="532247166573571973">サーバーへのアクセスに問題が起こっている可能性があります。しばらくしてからもう一度お試しください。</translation> <translation id="5324300749339591280">アプリのリスト</translation> <translation id="5324780743567488672">ユーザーの現在地情報を使用して自動的にタイムゾーンを設定する</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index c76f683..931b6365 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">ქსელები არ არის</translation> <translation id="1056898198331236512">გაფრთხილება</translation> <translation id="1058262162121953039">PUK კოდი</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{შეიყვანეთ ახალი PIN-კოდი. PIN-კოდის სიგრძე უნდა იყოს მინიმუმ 1 სიმბოლო და შეიძლება შეიცავდეს ასოებს, ციფრებსა და სხვა სიმბოლოებს.}other{შეიყვანეთ ახალი PIN-კოდი. PIN-კოდის სიგრძე უნდა იყოს მინიმუმ # სიმბოლო და შეიძლება შეიცავდეს ასოებს, ციფრებსა და სხვა სიმბოლოებს.}}</translation> <translation id="1059944192885972544">მოთხოვნაზე „<ph name="SEARCH_TEXT" />“ მოიძებნა <ph name="NUM" /> ჩანართი</translation> <translation id="1060292118287751956">განსაზღვრავს ეკრანის განახლების სიხშირეს</translation> <translation id="1061904396131502319">შესვენების დრო ახლოვდება</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">აკრიფეთ ასო</translation> <translation id="168991973552362966">ახლომდებარე პრინტერის დამატება</translation> <translation id="1689945336726856614">URL-ის &კოპირება</translation> +<translation id="1690248886740053041">მობილურ ქსელთან დაკავშირება ვერ მოხერხდა. ტექნიკური მხარდაჭერისთვის მიმართეთ თქვენს ოპერატორს.</translation> <translation id="1692115862433274081">სხვა ანგარიშის გამოყენება</translation> <translation id="1692118695553449118">სინქრონიზაცია ჩართულია</translation> <translation id="1692210323591458290">მუქი მეწამული</translation> +<translation id="169279809881363536">პროფილების აღმოჩენა ვერ მოხერხდა. ახალი ქსელის დასაყენებლად დაასკანირეთ QR კოდი მოწყობილობის კამერის მეშვეობით, ან შეიყვანეთ თქვენი ოპერატორის მიერ მოწოდებული აქტივაციის კოდი.</translation> <translation id="1697150536837697295">ხელოვნება</translation> <translation id="1697686431566694143">ფაილის რედაქტირება</translation> <translation id="1698122934742150150">მხოლოდ მიმდინარე ინკოგნიტო სესია</translation> @@ -1573,6 +1576,7 @@ <translation id="2770465223704140727">სიიდან ამოშლა</translation> <translation id="2770690685823456775">განახორციელეთ თქვენი პაროლების ექსპორტირება სხვა საქაღალდეში</translation> <translation id="2770929488047004208">მონიტორის გარჩევადობა</translation> +<translation id="2770954829020464827">ეკრანის გაზიარებისას დეტალები დამალულია</translation> <translation id="2771268254788431918">მობილური ინტერნეტი გააქტიურდა</translation> <translation id="2771816809568414714">ყველი</translation> <translation id="2772936498786524345">საძაგელი</translation> @@ -1940,6 +1944,7 @@ <translation id="3201422919974259695">აქ გამოჩნდება ხელმისაწვდომი USB-მოწყობილობები.</translation> <translation id="3202131003361292969">მდებარეობა</translation> <translation id="3202173864863109533">ამ ჩანართის აუდიო გამორთულია.</translation> +<translation id="3202218848974251205">კონფიდენციალურობის დაცული გარემო</translation> <translation id="3208321278970793882">აპი</translation> <translation id="3208584281581115441">ახლავე შემოწმება</translation> <translation id="3208703785962634733">დაუდასტურებელი</translation> @@ -2160,6 +2165,7 @@ <translation id="3459697287128633276">თქვენი ანგარიშისთვის Google Play Store-ზე წვდომის უზრუნველსაყოფად გაიარეთ ავტორიზაცია საიდენტიფიკაციო ინფორმაციის პროვაიდერის მეშვეობით.</translation> <translation id="3462311546193741693">თქვენ გამოხვალთ საიტების უმეტესობიდან, თუმცა დარჩებით შესული თქვენს Google ანგარიშში, რაც აუცილებელია სინქრონიზებული მონაცემების გასასუფთავებლად.</translation> <translation id="3462413494201477527">გსურთ ანგარიშის დაყენების გაუქმება?</translation> +<translation id="3464145797867108663">სამსახურის პროფილის დამატება</translation> <translation id="346431825526753">ეს არის ანგარიში ბავშვებისათვის, რომელიც იმართება <ph name="CUSTODIAN_EMAIL" />-ს მიერ.</translation> <translation id="3468298837301810372">ლეიბლი</translation> <translation id="3468999815377931311">Android ტელეფონი</translation> @@ -2281,6 +2287,7 @@ <translation id="360180734785106144">ახალი ფუნქციების შემოთავაზება მათი ხელმისაწვდომობისთანავე</translation> <translation id="3602290021589620013">გადახედვა</translation> <translation id="3603622770190368340">მიიღეთ ქსელის სერთიფიკატი</translation> +<translation id="3604193429970465812">მეორეული ანგარიშები</translation> <translation id="3604713164406837697">ფონის შეცვლა</translation> <translation id="3605780360466892872">ღილაკის დაჭერა</translation> <translation id="3608576286259426129">მომხმარებლის გამოსახულების გადახედვა</translation> @@ -2605,6 +2612,7 @@ გსურთ გაუშვათ <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">მალსახმობის შექმნა ვერ ხერხდება</translation> +<translation id="3943494825379372497">გსურთ აპებისა და გვერდების აღდგენა?</translation> <translation id="3943582379552582368">&უკან</translation> <translation id="3943857333388298514">ჩასმა</translation> <translation id="3948116654032448504"><ph name="SEARCH_ENGINE" />-ში სურათის ძ&იება</translation> @@ -2690,6 +2698,7 @@ <translation id="4046013316139505482">ამ გაფართოებებს არ სჭირდება ამ საიტზე ინფორმაციის ნახვა და შეცვლა.</translation> <translation id="4046123991198612571">შემდეგი ჩანაწერი</translation> <translation id="4047726037116394521">მთავარ გვერდზე გადასვლა</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# კონტაქტი მიუწვდომელია. მასთან მახლობლად გაზიარება რომ გამოიყენოთ, თქვენს კონტაქტებს დაამატეთ ელფოსტის მისამართი, რომელიც დაკავშირებულია მის Google ანგარიშთან.}other{# კონტაქტი მიუწვდომელია. მათთან მახლობლად გაზიარება რომ გამოიყენოთ, თქვენს კონტაქტებს დაამატეთ ელფოსტის მისამართები, რომელიც დაკავშირებულია მათ Google ანგარიშებთან.}}</translation> <translation id="4050225813016893843">ავტორიზაციის მეთოდი</translation> <translation id="4052120076834320548">ძალიან პატარა</translation> <translation id="4056908315660577142">მიღწეულია მშობლის მიერ <ph name="APP_NAME" />-ის Chrome აპზე დაწესებული დროის ლიმიტი. ხვალ შეგიძლიათ <ph name="TIME_LIMIT" /> გამოიყენოთ ის.</translation> @@ -3173,7 +3182,6 @@ <translation id="4646675363240786305">პორტები</translation> <translation id="4647090755847581616">&დახურეთ ჩანართი</translation> <translation id="4647283074445570750">ნაბიჯი <ph name="CURRENT_STEP" /> / <ph name="TOTAL_STEPS" />-დან</translation> -<translation id="4647420311443994946">{0,select, tablet{აპის გაშვება ტაბლეტში შესვლისას}computer{აპის გაშვება კომპიუტერში შესვლისას}other{აპის გაშვება მოწყობილობაში შესვლისას}}</translation> <translation id="4647697156028544508">გთხოვთ, შეიყვანოთ PIN-ი „<ph name="DEVICE_NAME" />“-სთვის:</translation> <translation id="4648491805942548247">არასაკმარისი ნებართვები</translation> <translation id="4648499713050786492">პიროვნების დამატებამდე, გთხოვთ, განბლოკოთ თქვენი პროფილი.</translation> @@ -3337,6 +3345,7 @@ <translation id="4863769717153320198">როგორც ჩანს, გარჩევადობა არის <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ნაგულისხმევი)</translation> <translation id="4864369630010738180">მიმდინარეობს შესვლა…</translation> <translation id="4864805589453749318">აირჩიეთ მშობელი, რომელიც მოგანიჭებთ სასწავლებლის ანგარიშის ნებართვას.</translation> +<translation id="4866265760644917470">პროფილი წარმატებით დაემატა.</translation> <translation id="486635084936119914">კონკრეტული ტიპის ფაილების ავტომატური გახსნა ჩამოტვირთვის შემდეგ</translation> <translation id="48704129375571883">დამატებითი ფუნქციების დამატება</translation> <translation id="4870758487381879312">კონფიგურაციის ინფორმაციის მისაღებად შეიყვანეთ ადმინისტრატორის მიერ მოწოდებული პაროლი</translation> @@ -3620,6 +3629,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{გატეხილი პაროლები წარმატებით შეიცვალა. დაგრჩათ # გატეხილი პაროლი. Chrome გირჩევთ, ახლავე შეამოწმოთ ეს პაროლი.}other{გატეხილი პაროლები წარმატებით შეიცვალა. დაგრჩათ # გატეხილი პაროლი. Chrome გირჩევთ, ახლავე შეამოწმოთ ეს პაროლები.}}</translation> <translation id="5207949376430453814">ტექსტის კურსორის გამოყოფა</translation> <translation id="5209320130288484488">მოწყობილობა ნაპოვნი არ არის</translation> +<translation id="5209572028385096813">ეს მომხმარებელი იმართება Family Link-ის მეშვეობით</translation> <translation id="5210365745912300556">ჩანართის დახურვა</translation> <translation id="5213481667492808996">„<ph name="NAME" />“-ის მონაცემთა გადაცემის სერვისი გამოსაყენებლად მზად არის</translation> <translation id="5213891612754844763">პროქსი-სერვერის პარამეტრების ჩვენება</translation> @@ -3705,6 +3715,7 @@ <translation id="5302048478445481009">ენა</translation> <translation id="5302932258331363306">ჩანაცვლებების ჩვენება</translation> <translation id="5304276686222516262">კონტაქტების სია ვერ ჩამოიტვირთა. შეამოწმეთ კავშირი ქსელთან ან <a href="#" id="tryAgainLink">ცადეთ ხელახლა</a>.</translation> +<translation id="5305145881844743843">ამ ანგარიშს მართავს <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">არცერთი არ არის დაინსტალირებული</translation> <translation id="5307030433605830021">წყარო მხარდაუჭერელია</translation> <translation id="5308380583665731573">დაკავშირება</translation> @@ -3718,6 +3729,7 @@ <translation id="5317780077021120954">შენახვა</translation> <translation id="5319359161174645648">Google გირჩევთ Chrome-ს</translation> <translation id="5320112320661303273">როგორც ჩანს, ასისტენტი სხვა მოწყობილობაზე უკვე დააყენეთ. ჩართეთ მითითებული პარამეტრი, რომ ასისტენტის მეტი შესაძლებლობა გამოიყენოთ.</translation> +<translation id="5320135788267874712">მოწყობილობის ახალი სახელი</translation> <translation id="532247166573571973">სერვერი შეიძლება მიუწვდომელი იყოს. ცადეთ მოგვიანებით.</translation> <translation id="5324300749339591280">აპების სია</translation> <translation id="5324780743567488672">თქვენი მდებარეობის გამოყენებით, დროის სარტყელის ავტომატური დაყენება</translation> @@ -4084,6 +4096,7 @@ <translation id="5740820643029013514">შეტყობინებების უფრო ჩუმი მიმოცვლის გამოყენება (რეკომენდებული)</translation> <translation id="574104302965107104">ეკრანის გამოსახულების ასლი</translation> <translation id="574209121243317957">სიმაღლე</translation> +<translation id="5742505912938664543">აქ მეორეული ანგარიშის დამატების შემთხვევაში მისი მეშვეობით შეძლებთ ვების დათვალიერებას, აპების ჩამოტვირთვას, ასევე, თქვენი Gmail-ისა და სხვა Google სერვისების შემოწმებას.</translation> <translation id="5746169159649715125">შენახვა PDF-ის სახით</translation> <translation id="5747552184818312860">ვადა</translation> <translation id="5747785204778348146">შემმუშავებელი - არასტაბილური</translation> @@ -4424,6 +4437,7 @@ <translation id="6129953537138746214">ინტერვალი</translation> <translation id="6130692320435119637">Wi-Fi ქსელის დამატება</translation> <translation id="6136114942382973861">ჩამოტვირთვების ზოლის დახურვა</translation> +<translation id="6136287496450963112">თქვენი უსაფრთხოების გასაღები არ არის დაცული PIN-კოდით. თითის ანაბეჭდების სამართავად, პირველ რიგში, შექმენით PIN-კოდი.</translation> <translation id="6137767437444130246">მომხმარებლის სერტიფიკატი</translation> <translation id="6138680304137685902">X9.62 ECDSA ხელმოწერა SHA-384-ით</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, ქსელი არ არის</translation> @@ -4604,6 +4618,7 @@ <translation id="6331566915566907158">Chrome OS-ის ფუნქციებისა და წარმადობის გაუმჯობესების ხელშეწყობა</translation> <translation id="6331818708794917058">საიტებს შეუძლია MIDI-მოწყობილობებთან დაკავშირების თხოვნა</translation> <translation id="6333064448949140209">ფაილი, გამართვის მიზნით, Google-ს გაეგზავნება</translation> +<translation id="6334444530352320327">თქვენი აპები და ოპერაციული სისტემის პარამეტრები სინქრონიზებული იქნება თქვენს ყველა Chromebook-თან, რომელზეც შესული ხართ ამ ანგარიშით. <ph name="LINK_BEGIN" />სინქრონიზაციის პარამეტრები<ph name="LINK_END" /></translation> <translation id="6338981933082930623">ყველა საიტს შეუძლია ნებისმიერი ტიპის რეკლამის ჩვენება</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" />-სთვის ახალი პროფილის შექმნა</translation> <translation id="6340017061976355871">სერვერთან დაკავშირება ვერ მოხერხდა. გთხოვთ, შეამოწმოთ ქსელის კავშირი და ხელახლა ცადოთ. თუ პრობლემა არ მოგვარდება, გადატვირთეთ თქვენი Chromebook.</translation> @@ -4905,6 +4920,7 @@ <translation id="6709133671862442373">ახალი ამბები</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />-ით დაკავშირება</translation> <translation id="6710213216561001401">წინა</translation> +<translation id="6713233729292711163">სამსახურის პროფილის დამატება</translation> <translation id="6715803357256707211">თქვენი Linux აპლიკაციის ინსტალაციისას მოხდა შეცდომა. დეტალური ინფორმაციისთვის დააწკაპუნეთ შეტყობინებაზე.</translation> <translation id="671619610707606484">ამ მოქმედებით გასუფთავდება საიტების მიერ შენახული მონაცემების <ph name="TOTAL_USAGE" /></translation> <translation id="671928215901716392">ჩაკეტილი ეკრანი</translation> @@ -5273,6 +5289,7 @@ <translation id="7121362699166175603">მისამართთა ზოლში გაასუფთავებს ისტორიასა და ავტომატურ დასრულებებს. თქვენს Google ანგარიშში შეიძლება ინახებოდეს სხვა ტიპის დათვალიერების ისტორიაც, რომელიც ხელმისაწვდომია მისამართზე: <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">შემმუშავებლის რეჟიმი</translation> <translation id="7121728544325372695">გონიერი ტირეები</translation> +<translation id="7122353087820324370">აპები და ოპერაციული სისტემის პარამეტრები არ სინქრონიზდება მეორეულ ანგარიშებთან.</translation> <translation id="7123030151043029868">რამდენიმე ფაილის ავტომატურად ჩამოტვირთვა დაშვებულია</translation> <translation id="7123360114020465152">აღარ არის მხარდაჭერილი</translation> <translation id="7125148293026877011">Crostini-ს წაშლა</translation> @@ -5587,6 +5604,7 @@ <translation id="750509436279396091">გახსენით ჩამოტვირთვების ფოლდერი</translation> <translation id="7506093026325926984">ეს პაროლი ამ მოწყობილობაზე შეინახება</translation> <translation id="7506130076368211615">დააყენეთ ახალი ქსელი</translation> +<translation id="7506242536428928412">უსაფრთხოების ახალი გასაღების გამოსაყენებლად დააყენეთ ახალი PIN-კოდი</translation> <translation id="7506541170099744506">თქვენი <ph name="DEVICE_TYPE" /> წარმატებით დარეგისტრირდა კორპორატიული მართვისთვის.</translation> <translation id="7507207699631365376">ამ პროვაიდერის <ph name="BEGIN_LINK" />კონფიდენციალურობის დებულების<ph name="END_LINK" /> ნახვა</translation> <translation id="7507930499305566459">სტატუსის მოპასუხის სერტიფიკატი</translation> @@ -5750,6 +5768,7 @@ <translation id="7691077781194517083">უსაფრთხოების ამ გასაღების გადაყენება ვერ მოხერხდა. შეცდომა: <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini-ს ვერსიის განახლება</translation> <translation id="7696063401938172191">თქვენს „<ph name="PHONE_NAME" />“-ზე:</translation> +<translation id="7697166915480294040">ეკრანის გაზიარებისას დეტალები დამალულია</translation> <translation id="7697598343108519171">QR კოდის სკანირება კამერით</translation> <translation id="7699968112832915395">ანგარიშის დამატება ვერ მოხერხდა</translation> <translation id="7701040980221191251">არცერთი</translation> @@ -6205,6 +6224,8 @@ <translation id="8184472985242519288">ერთგვაროვანი</translation> <translation id="8186609076106987817">სერვერმა ვერ იპოვა ფაილი.</translation> <translation id="8188389033983459049">გასაგრძელებლად შეამოწმეთ თქვენი მოწყობილობის პარამეტრები და ჩართეთ ის</translation> +<translation id="8189306097519446565">სასწავლებლის ანგარიშები</translation> +<translation id="8189750580333936930">კონფიდენციალურობის დაცული გარემო</translation> <translation id="8190193592390505034"><ph name="PROVIDER_NAME" />-თან დაკავშირება</translation> <translation id="8191230140820435481">მართეთ თქვენი პროგრამები, გაფართოებები, და თემები</translation> <translation id="8195027750202970175">ზომა დისკზე</translation> @@ -6896,6 +6917,7 @@ <translation id="8986362086234534611">დავიწყება</translation> <translation id="8986494364107987395">გამოყენების სტატისტიკისა და შეცდომების შესახებ მოხსენებების ავტომატური გაგზავნა Google-ში</translation> <translation id="8987927404178983737">თვე</translation> +<translation id="8989823300731803443">გააგრძელეთ იქიდან, სადაც შეჩერდით.</translation> <translation id="8990209962746788689">QR კოდის შექმნა ვერ მოხერხდა</translation> <translation id="8991520179165052608">საიტს შეუძლია თქვენი მიკროფონის გამოყენება</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 ერთეული}other{# ერთეული}}</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 3788c852..d61debae 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -3171,7 +3171,6 @@ <translation id="4646675363240786305">Порттар</translation> <translation id="4647090755847581616">&Қойындыны жабу</translation> <translation id="4647283074445570750">Қадам: <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Планшетте есептік жазбаға кірген кезде, қолданба іске қосылсын}computer{Компьютерде есептік жазбаға кірген кезде, қолданба іске қосылсын}other{Құрылғыда есептік жазбаға кірген кезде, қолданба іске қосылсын}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" үшін PIN кодын енгізіңіз:</translation> <translation id="4648491805942548247">Рұқсаттар жеткіліксіз</translation> <translation id="4648499713050786492">Адам суретін қосу үшін профиліңіздің құлпын ашыңыз.</translation> @@ -3716,6 +3715,7 @@ <translation id="5317780077021120954">Сақтау</translation> <translation id="5319359161174645648">Google қызметі Chrome браузерін ұсынады</translation> <translation id="5320112320661303273">Assistant қолданбасын басқа құрылғыда реттеген сияқтысыз. Assistant-тің басқа да мүмкіндіктерін пайдалану үшін осы параметрді қосыңыз.</translation> +<translation id="5320135788267874712">Жаңа құрылғы атауы</translation> <translation id="532247166573571973">Сервер қолжетімді емес. Әрекетті кейінірек қайталаңыз.</translation> <translation id="5324300749339591280">Қолданбалар тізімі</translation> <translation id="5324780743567488672">Орныңызды пайдаланып, уақыт белдеуін автоматты орнату</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index ab03db93..8e7a7ea 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">ច្រក</translation> <translation id="4647090755847581616">បិទផ្ទាំង</translation> <translation id="4647283074445570750">ជំហានទី <ph name="CURRENT_STEP" /> នៃ <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{ចាប់ផ្ដើមកម្មវិធី នៅពេលចូលថេប្លេតរបស់អ្នក}computer{ចាប់ផ្ដើមកម្មវិធី នៅពេលចូលកុំព្យូទ័ររបស់អ្នក}other{ចាប់ផ្ដើមកម្មវិធី នៅពេលចូលឧបករណ៍របស់អ្នក}}</translation> <translation id="4647697156028544508">សូមបញ្ចូលលេខសម្គាល់សម្រាប់ "<ph name="DEVICE_NAME" />"។</translation> <translation id="4648491805942548247">ការអនុញ្ញាតមិនគ្រប់គ្រាន់</translation> <translation id="4648499713050786492">សូមដោះសោប្រវត្តិរូបរបស់អ្នកមុនពេលបន្ថែមអ្នកណាម្នាក់</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">រក្សាទុក</translation> <translation id="5319359161174645648">Google ណែនាំ Chrome</translation> <translation id="5320112320661303273">អ្នកហាក់ដូចជាបានរៀបចំជំនួយការនៅលើឧបករណ៍ផ្សេងទៀតរួចហើយ។ ទទួលបានអត្ថប្រយោជន៍កាន់តែច្រើនពីជំនួយការរបស់អ្នក ដោយបើកការកំណត់ខាងក្រោម។</translation> +<translation id="5320135788267874712">ឈ្មោះឧបករណ៍ថ្មី</translation> <translation id="532247166573571973">មិនអាចភ្ជាប់ទៅម៉ាស៊ីនមេបានទេ សូមព្យាយាមម្តងទៀតពេលក្រោយ។</translation> <translation id="5324300749339591280">បញ្ជីកម្មវិធី</translation> <translation id="5324780743567488672">កំណត់តំបន់ពេលវេលាដោយស្វ័យប្រវត្តិដោយប្រើទីតាំងរបស់អ្នក</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 2e24b69..d2cb1364 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3175,7 +3175,6 @@ <translation id="4646675363240786305">ಪೋರ್ಟ್ಗಳು</translation> <translation id="4647090755847581616">&ಟ್ಯಾಬ್ ಅನ್ನು ಮುಚ್ಚಿ</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> ಹಂತಗಳಲ್ಲಿ <ph name="CURRENT_STEP" /> ಹಂತ</translation> -<translation id="4647420311443994946">{0,select, tablet{ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿದ ನಂತರ ಆ್ಯಪ್ ಪ್ರಾರಂಭಿಸಿ}computer{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿದ ನಂತರ ಆ್ಯಪ್ ಪ್ರಾರಂಭಿಸಿ}other{ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸೈನ್ ಇನ್ ಮಾಡಿದ ನಂತರ ಆ್ಯಪ್ ಪ್ರಾರಂಭಿಸಿ}}</translation> <translation id="4647697156028544508">ದಯವಿಟ್ಟು "<ph name="DEVICE_NAME" />" ಗಾಗಿ PIN ಅನ್ನು ನಮೂದಿಸಿ:</translation> <translation id="4648491805942548247">ಸಾಕಷ್ಟಿಲ್ಲದ ಅನುಮತಿಗಳು</translation> <translation id="4648499713050786492">ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ.</translation> @@ -3721,6 +3720,7 @@ <translation id="5317780077021120954">ಉಳಿಸು</translation> <translation id="5319359161174645648">Chrome ಅನ್ನು Google ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ</translation> <translation id="5320112320661303273">ನೀವು ಈಗಾಗಲೇ ಬೇರೆ ಸಾಧನದಲ್ಲಿ Assistant ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿರುವಂತೆ ತೋರುತ್ತಿದೆ. ಕೆಳಗಿನ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡುವ ಮೂಲಕ ನಿಮ್ಮ Assistant ನಿಂದ ಇನ್ನಷ್ಟು ಪ್ರಯೋಜನಗಳನ್ನು ಪಡೆಯಿರಿ.</translation> +<translation id="5320135788267874712">ಹೊಸ ಸಾಧನದ ಹೆಸರು</translation> <translation id="532247166573571973">ಸರ್ವರ್ ತಲುಪಲಾಗದೇ ಇರಬಹುದು. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="5324300749339591280">ಆ್ಯಪ್ಗಳ ಪಟ್ಟಿ</translation> <translation id="5324780743567488672">ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಬಳಸುವ ಮೂಲಕ ಸಮಯ ವಲಯವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 545f1f9..a11544d 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">포트</translation> <translation id="4647090755847581616">탭 닫기(&C)</translation> <translation id="4647283074445570750">총 <ph name="TOTAL_STEPS" />단계 중 <ph name="CURRENT_STEP" />단계</translation> -<translation id="4647420311443994946">{0,select, tablet{태블릿에 로그인할 때 앱 시작}computer{컴퓨터에 로그인할 때 앱 시작}other{기기에 로그인할 때 앱 시작}}</translation> <translation id="4647697156028544508">'<ph name="DEVICE_NAME" />'의 PIN을 입력하세요:</translation> <translation id="4648491805942548247">권한 부족</translation> <translation id="4648499713050786492">프로필을 잠금 해제한 다음 사용자를 추가하세요.</translation> @@ -3717,6 +3716,7 @@ <translation id="5317780077021120954">저장</translation> <translation id="5319359161174645648">Google에서 추천하는 Chrome</translation> <translation id="5320112320661303273">이미 다른 기기에서 어시스턴트를 설정한 것 같습니다. 다음 설정을 켜면 어시스턴트를 더욱 유용하게 활용할 수 있습니다.</translation> +<translation id="5320135788267874712">새 기기 이름</translation> <translation id="532247166573571973">서버 접속이 불가능할 수 있습니다. 나중에 다시 시도해 주세요.</translation> <translation id="5324300749339591280">앱 목록</translation> <translation id="5324780743567488672">사용자 위치를 사용하여 자동으로 시간대 설정</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 544ca8e..ed6f560 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Оюкчалар</translation> <translation id="4647090755847581616">&Өтмөктү жабуу</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> кадамдын ичинен <ph name="CURRENT_STEP" />-кадам</translation> -<translation id="4647420311443994946">{0,select, tablet{Планшетке кирериңиз менен колдонмо автоматтык түрдө иштесин}computer{Компьютерге кирериңиз менен колдонмо автоматтык түрдө иштесин}other{Түзмөккө кирериңиз менен колдонмо автоматтык түрдө иштесин}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" түзмөгүнө PIN кодду киргизиңиз:</translation> <translation id="4648491805942548247">Уруксаттар жетишсиз</translation> <translation id="4648499713050786492">Адамды кошоордон мурун, профилиңиздин кулпусун ачыңыз.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Сактоо</translation> <translation id="5319359161174645648">Google Chrome'ду сунуштайт</translation> <translation id="5320112320661303273">Жардамчыны башка түзмөктө жөндөп алган окшойсуз. Төмөнкү жөндөөнү иштетип, Жардамчыңыздын бардык мүмкүнчүлүктөрүн колдонуңуз.</translation> +<translation id="5320135788267874712">Түзмөктүн жаңы аталышы</translation> <translation id="532247166573571973">Серверге туташуу мүмкүн эмес окшойт. Бир аздан кийин кайталап көрүңүз.</translation> <translation id="5324300749339591280">Колдонмолор тизмеси</translation> <translation id="5324780743567488672">Жайгашкан жериңиз аркылуу убакыт алкагын автоматтык түрдө коюу</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 632017fa..c969321 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">ບໍ່ມີເຄືອຂ່າຍ</translation> <translation id="1056898198331236512">ຄໍາເຕືອນ</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{ປ້ອນ PIN ໃໝ່ຂອງທ່ານ. PIN ຕ້ອງຍາວຢ່າງໜ້ອຍໜຶ່ງຕົວອັກສອນ ແລະ ສາມາດປະກອບມີຕົວໜັງສື, ຕົວເລກ ແລະ ຕົວອັກສອນອື່ນໆ.}other{ປ້ອນ PIN ໃໝ່ຂອງທ່ານ. PIN ຕ້ອງຍາວຢ່າງໜ້ອຍ # ຕົວອັກສອນ ແລະ ສາມາດປະກອບມີຕົວໜັງສື, ຕົວເລກ ແລະ ຕົວອັກສອນອື່ນໆ.}}</translation> <translation id="1059944192885972544">ພົບ <ph name="NUM" /> ແຖບສຳລັບ '<ph name="SEARCH_TEXT" />'</translation> <translation id="1060292118287751956">ກຳນົດຄວາມຖີ່ທີ່ໜ້າຈໍອັບເດດ</translation> <translation id="1061904396131502319">ໃກ້ຮອດເວລາພັກແລ້ວ</translation> @@ -633,9 +634,11 @@ <translation id="1688935057616748272">ພິມຕົວອັກສອນ</translation> <translation id="168991973552362966">ເພີ່ມເຄື່ອງພິມທີ່ຢູ່ໃກ້ຄຽງ</translation> <translation id="1689945336726856614">ສຳເນົາ &URL</translation> +<translation id="1690248886740053041">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍມືຖືໄດ້. ສຳລັບການຊ່ວຍເຫຼືອດ້ານເທັກນິກ, ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການຂອງທ່ານ.</translation> <translation id="1692115862433274081">ໃຊ້ບັນຊີອື່ນ</translation> <translation id="1692118695553449118">ຊິງຄ໌ເປີດຢູ່</translation> <translation id="1692210323591458290">ສີມ່ວງແກ່</translation> +<translation id="169279809881363536">ບໍ່ພົບໂປຣໄຟລ໌ໃດ. ເພື່ອຕັ້ງຄ່າເຄືອຂ່າຍໃໝ່, ກະລຸນາສະແກນລະຫັດ QR ໂດຍໃຊ້ກ້ອງຂອງອຸປະກອນ ຫຼື ປ້ອນລະຫັດການເປີດນຳໃຊ້ທີ່ຜູ້ໃຫ້ບໍລິການຂອງທ່ານສະໜອງໃຫ້</translation> <translation id="1697150536837697295">ສິນລະປະ</translation> <translation id="1697686431566694143">ແກ້ໄຂໄຟລ໌</translation> <translation id="1698122934742150150">ເຊດຊັນແບບບໍ່ເຜີຍຕົວຕົນໃນປັດຈຸບັນເທົ່ານັ້ນ</translation> @@ -1572,6 +1575,7 @@ <translation id="2770465223704140727">ເອົາອອກຈາກລາຍການ</translation> <translation id="2770690685823456775">ສົ່ງລະຫັດຜ່ານຂອງທ່ານອອກໄປໃສ່ໂຟນເດີອື່ນ</translation> <translation id="2770929488047004208">ຄວາມລະອຽດໜ້າຈໍ</translation> +<translation id="2770954829020464827">ເຊື່ອງລາຍລະອຽດໃນຂະນະທີ່ທ່ານແບ່ງປັນໜ້າຈໍ</translation> <translation id="2771268254788431918">ເປີດໃຊ້ອິນເຕີເນັດມືຖືແລ້ວ</translation> <translation id="2771816809568414714">ເນີຍແຂງ</translation> <translation id="2772936498786524345">ລັບໆລີ້ໆ</translation> @@ -1939,6 +1943,7 @@ <translation id="3201422919974259695">ອຸປະກອນ USB ທີ່ສາມາດໃຊ້ໄດ້ຈະປາກົດຢູ່ບ່ອນນີ້.</translation> <translation id="3202131003361292969">ເສັ້ນທາງ</translation> <translation id="3202173864863109533">ສຽງແຖບຂອງນີ້ກໍາລັງຖືກປິດ.</translation> +<translation id="3202218848974251205">ກ່ອງຊາຍຄວາມເປັນສ່ວນຕົວ</translation> <translation id="3208321278970793882">ແອັບ</translation> <translation id="3208584281581115441">ກວດເບິ່ງດຽວນີ້</translation> <translation id="3208703785962634733">ບໍ່ຢືນຢັນ</translation> @@ -2159,6 +2164,7 @@ <translation id="3459697287128633276">ເພື່ອເຮັດໃຫ້ບັນຊີຂອງທ່ານສາມາດເຂົ້າເຖິງ Google Play Store, ກະລຸນາຮັບຮອງຄວາມຖືກຕ້ອງນຳ Identity Provider ຂອງທ່ານ.</translation> <translation id="3462311546193741693">ນຳທ່ານອອກຈາກລະບົບເວັບໄຊສ່ວນໃຫຍ່. ທ່ານຈະສືບຕໍ່ຢູ່ໃນລະບົບບັນຊີ Google ຂອງທ່ານເພື່ອໃຫ້ລະບົບສາມາດລຶບລ້າງຂໍ້ມູນທີ່ຊິ້ງຂອງທ່ານໄດ້.</translation> <translation id="3462413494201477527">ຍົກເລີກການຕັ້ງບັນຊີບໍ?</translation> +<translation id="3464145797867108663">ເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ</translation> <translation id="346431825526753">ອັນນີ້ແມ່ນບັນຊີສຳລັບເດັກນ້ອຍທີ່ຈັດການໂດຍ <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">ປ້າຍກຳກັບ</translation> <translation id="3468999815377931311">ໂທລະສັບ Android</translation> @@ -2280,6 +2286,7 @@ <translation id="360180734785106144">ໃຫ້ຄຸນສົມບັດໃໝ່ເມື່ອພວກມັນມີໃຫ້ນຳໃຊ້</translation> <translation id="3602290021589620013">ເບິ່ງຕົວຢ່າງ</translation> <translation id="3603622770190368340">ຮັບເອົາໃບຢັ້ງຢືນເຄືອຂ່າຍ</translation> +<translation id="3604193429970465812">ບັນຊີສຳຮອງ</translation> <translation id="3604713164406837697">ປ່ຽນພາບພື້ນຫຼັງ</translation> <translation id="3605780360466892872">ປຸ່ມລົງລຸ່ມ</translation> <translation id="3608576286259426129">ຕົວຢ່າງຮູບຂອງຜູ້ໃຊ້</translation> @@ -2604,6 +2611,7 @@ ທ່ານຕ້ອງການເລີ່ມຕົ້ນ <ph name="CONTROL_PANEL_APPLET_NAME" /> ບໍ?</translation> <translation id="394183848452296464">ບໍ່ສາມາດສ້າງທາງລັດໄດ້</translation> +<translation id="3943494825379372497">ກູ້ຄືນແອັບ ແລະ ໜ້າບໍ?</translation> <translation id="3943582379552582368">ກັບຄືນ</translation> <translation id="3943857333388298514">ແປະໃສ່</translation> <translation id="3948116654032448504">&ຊອກຫາ <ph name="SEARCH_ENGINE" /> ຮູບ</translation> @@ -2689,6 +2697,7 @@ <translation id="4046013316139505482">ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ບໍ່ຈຳເປັນຕ້ອງເຫັນ ແລະ ປ່ຽນແປງຂໍ້ມູນໃນເວັບໄຊນີ້.</translation> <translation id="4046123991198612571">ເພງຕໍ່ໄປ</translation> <translation id="4047726037116394521">ໄປຫາໜ້າຫຼັກ</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# ລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ພ້ອມໃຫ້ນຳໃຊ້. ເພື່ອໃຊ້ Nearby Share ກັບເຂົາເຈົ້າ, ໃຫ້ເພີ່ມທີ່ຢູ່ອີເມວທີ່ເຊື່ອມໂຍງກັບບັນຊີ Google ຂອງເຂົາເຈົ້າໃສ່ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານ.}other{# ລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ພ້ອມໃຫ້ນຳໃຊ້. ເພື່ອໃຊ້ການແບ່ງປັນໃກ້ຄຽງກັບພວກມັນ, ກະລຸນາເພີ່ມທີ່ຢູ່ອີເມວທີ່ເຊື່ອມໂຍງກັບບັນຊີ Google ຂອງເຂົາເຈົ້າໃສ່ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານ.}}</translation> <translation id="4050225813016893843">ວິທີການຮອງຮັບຄວາມຖືກຕ້ອງ</translation> <translation id="4052120076834320548">ບາງ</translation> <translation id="4056908315660577142">ທ່ານໄດ້ຮອດຂີດຈຳກັດເວລາທີ່ພໍ່ແມ່ຂອງທ່ານກຳນົດໄວ້ສຳລັບແອັບ Chrome <ph name="APP_NAME" /> ແລ້ວ. ທ່ານສາມາດໃຊ້ມັນເປັນເວລາ <ph name="TIME_LIMIT" /> ໄດ້ໃນມື້ອື່ນ.</translation> @@ -3172,7 +3181,6 @@ <translation id="4646675363240786305">ຜອດ</translation> <translation id="4647090755847581616">ປິດແຖບ</translation> <translation id="4647283074445570750">ຂັ້ນຕອນທີ <ph name="CURRENT_STEP" /> ຈາກທັງໝົດ <ph name="TOTAL_STEPS" /> ຂັ້ນຕອນ</translation> -<translation id="4647420311443994946">{0,select, tablet{ເລີ່ມແອັບເມື່ອທ່ານເຂົ້າສູ່ລະບົບແທັບເລັດຂອງທ່ານ}computer{ເລີ່ມແອັບເມື່ອທ່ານເຂົ້າສູ່ລະບົບຄອມພິວເຕີຂອງທ່ານ}other{ເລີ່ມແອັບເມື່ອທ່ານເຂົ້າສູ່ລະບົບອຸປະກອນຂອງທ່ານ}}</translation> <translation id="4647697156028544508">ກະລຸນາໃສ່ PIN ສໍາລັບ "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">ການອະນຸຍາດບໍ່ພຽງພໍ</translation> <translation id="4648499713050786492">ກະລຸນາປົດລັອກໂປຣໄຟລ໌ຂອງທ່ານກ່ອນທີ່ຈະເພີ່ມບຸກຄົນ.</translation> @@ -3336,6 +3344,7 @@ <translation id="4863769717153320198">ຄວາມລະອຽດ <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ຄ່າເລີ່ມຕົ້ນ)</translation> <translation id="4864369630010738180">ກຳລັງເຂົ້າສູ່ລະບົບ...</translation> <translation id="4864805589453749318">ເລືອກພໍ່ແມ່ທີ່ກຳລັງໃຫ້ການອະນຸຍາດໃຫ້ເພີ່ມບັນຊີໂຮງຮຽນ.</translation> +<translation id="4866265760644917470">ເພີ່ມໂປຣໄຟລ໌ສຳເລັດແລ້ວ.</translation> <translation id="486635084936119914">ເປີດໄຟລ໌ປະເພດສະເພາະໂດຍອັດຕະໂນມັດຫຼັງຈາກດາວໂຫຼດແລ້ວ</translation> <translation id="48704129375571883">ເພີ່ມຄຸນສົມບັດເພີ່ມເຕີມ</translation> <translation id="4870758487381879312">ປ້ອນລະຫັດຜ່ານທີ່ຜູ້ເບິ່ງແຍງລະບົບສະໜອງໃຫ້ເພື່ອຮັບຂໍ້ມູນການກຳນົດຄ່າ</translation> @@ -3619,6 +3628,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{ປ່ຽນລະຫັດຜ່ານທີ່ຖືກລະເມີດສຳເລັດແລ້ວ. ທ່ານມີລະຫັດຜ່ານທີ່ຖືກລະເມີດອີກ # ລາຍການ. Chrome ແນະນຳໃຫ້ກວດເບິ່ງລະຫັດຜ່ານນີ້ໃນຕອນນີ້ເລີຍ.}other{ປ່ຽນລະຫັດຜ່ານທີ່ຖືກລະເມີດສຳເລັດແລ້ວ. ທ່ານມີລະຫັດຜ່ານທີ່ຖືກລະເມີດອີກ # ລາຍການ. Chrome ແນະນຳໃຫ້ກວດເບິ່ງລະຫັດຜ່ານເຫຼົ່ານີ້ໃນຕອນນີ້ເລີຍ.}}</translation> <translation id="5207949376430453814">ໝາຍເຄື່ອງໝາຍກຸບຂໍ້ຄວາມ</translation> <translation id="5209320130288484488">ບໍ່ພົບອຸປະກອນ</translation> +<translation id="5209572028385096813">ຜູ້ໃຊ້ນີ້ຖືກຈັດການໂດຍ Family Link</translation> <translation id="5210365745912300556">ປິດແຖບ</translation> <translation id="5213481667492808996">ການບໍລິການອິນເຕີເນັດ '<ph name="NAME" />' ຂອງທ່ານພ້ອມນຳໃຊ້ແລ້ວ</translation> <translation id="5213891612754844763">ສະແດງການຕັ້ງຄ່າພຣັອກຊີ</translation> @@ -3704,6 +3714,7 @@ <translation id="5302048478445481009">ພາສາ</translation> <translation id="5302932258331363306">ສະແດງການແທນທີ່</translation> <translation id="5304276686222516262">ບໍ່ສາມາດດາວໂຫຼດລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້. ກະລຸນາກວດເບິ່ງການເຊື່ອມຕໍ່ເຄືອຂ່າຍຂອງທ່ານ ຫຼື <a href="#" id="tryAgainLink">ລອງອີກຄັ້ງ</a>.</translation> +<translation id="5305145881844743843">ບັນຊີນີ້ຖືກຈັດການໂດຍ <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">ບໍ່ອັນໃດຖືກຕິດຕັ້ງ</translation> <translation id="5307030433605830021">ບໍ່ຮອງຮັບແຫຼ່ງທີ່ມາ</translation> <translation id="5308380583665731573">ເຊື່ອມຕໍ່</translation> @@ -3717,6 +3728,7 @@ <translation id="5317780077021120954">ບັນທຶກ</translation> <translation id="5319359161174645648">Google ແນະນຳໃຫ້ໃຊ້ Chrome</translation> <translation id="5320112320661303273">ປາກົດວ່າທ່ານໄດ້ຕັ້ງຄ່າຜູ້ຊ່ວຍໃນອຸປະກອນອື່ນແລ້ວ. ໄດ້ປະໂຫຍດຫຼາຍຍິ່ງຂຶ້ນຈາກຜູ້ຊ່ວຍຂອງທ່ານໂດຍການເປີດການຕັ້ງຄ່າຕໍ່ໄປນີ້.</translation> +<translation id="5320135788267874712">ຊື່ອຸປະກອນໃໝ່</translation> <translation id="532247166573571973">ເຊີບເວີອາດຈະບໍ່ສາມາດຕິດຕໍ່ຫາໄດ້. ລອງໃໝ່ໃນພາຍຫຼັງ.</translation> <translation id="5324300749339591280">ລາຍຊື່ແອັບ</translation> <translation id="5324780743567488672">ຕັ້ງເຂດເວລາອັດຕະໂນມັດດ້ວຍການໃຊ້ທີ່ຕັ້ງຂອງທ່ານ</translation> @@ -4083,6 +4095,7 @@ <translation id="5740820643029013514">ໃຊ້ການຮັບສົ່ງຂໍ້ຄວາມແບບມິດງຽບກວ່າ (ແນະນຳ)</translation> <translation id="574104302965107104">ການສາຍພາບຈໍສະແດງຜົນ</translation> <translation id="574209121243317957">ລະດັບສຽງ</translation> +<translation id="5742505912938664543">ເມື່ອທ່ານເພີ່ມບັນຊີສຳຮອງຢູ່ບ່ອນນີ້, ທ່ານສາມາດທ່ອງເວັບ, ດາວໂຫຼດແອັບ, ກວດ Gmail ຂອງທ່ານ ແລະ ການບໍລິການອື່ນຂອງ Google ໂດຍໃຊ້ບັນຊີນັ້ນໄດ້.</translation> <translation id="5746169159649715125">ບັນທຶກເປັນ PDF</translation> <translation id="5747552184818312860">ໝົດອາຍຸ</translation> <translation id="5747785204778348146">ຜູ້ພັດທະນາ - ບໍ່ໝັ້ນຄົງ</translation> @@ -4423,6 +4436,7 @@ <translation id="6129953537138746214">ຍະຫວ່າງ</translation> <translation id="6130692320435119637">ເພີ່ມ Wi-Fi</translation> <translation id="6136114942382973861">ປິດແຖບການດາວໂຫຼດ</translation> +<translation id="6136287496450963112">ກະແຈຄວາມປອດໄພຂອງທ່ານບໍ່ໄດ້ຮັບການປົກປ້ອງດ້ວຍ PIN. ເພື່ອຈັດການລາຍນິ້ວມື, ກ່ອນອື່ນໃຫ້ສ້າງ PIN.</translation> <translation id="6137767437444130246">ໃບຮັບຮອງຜູ້ໃຊ້</translation> <translation id="6138680304137685902">ລາຍເຊັນ X9.62 ECDSA ທີ່ມີ SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, ບໍ່ມີເຄືອຂ່າຍ</translation> @@ -4603,6 +4617,7 @@ <translation id="6331566915566907158">ຊ່ວຍປັບປຸງຄຸນສົມບັດ ແລະ ປະສິດທິພາບຂອງ Chrome OS</translation> <translation id="6331818708794917058">ເວັບໄຊສາມາດຂໍເຊື່ອມຕໍ່ກັບອຸປະກອນ MIDI ໄດ້</translation> <translation id="6333064448949140209">ໄຟລ໌ຈະຖືກສົ່ງຫາ Google ສຳລັບການດີບັກ</translation> +<translation id="6334444530352320327">ແອັບ ແລະ ການຕັ້ງຄ່າລະບົບປະຕິບັດການຂອງທ່ານຈະຊິ້ງຂໍ້ມູນໃນທົ່ວ Chromebook ທີ່ທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີນີ້.<ph name="LINK_BEGIN" />ການຕັ້ງຄ່າ Sync<ph name="LINK_END" /></translation> <translation id="6338981933082930623">ເວັບໄຊທັງໝົດສາມາດສະແດງໂຄສະນາຕ່າງໆໃຫ້ທ່ານເຫັນໄດ້</translation> <translation id="6339668969738228384">ສ້າງໂປຣໄຟລ໌ໃໝ່ສຳລັບ <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບເຊີບເວີໄດ້. ກະລຸນາກວດເບິ່ງການເຊື່ອມຕໍ່ເຄືອຂ່າຍຂອງທ່ານ ແລະ ລອງອີກຄັ້ງ. ຖ້າບັນຫາຍັງຢູ່, ໃຫ້ປິດເປີດ Chromebook ຂອງທ່ານຄືນໃໝ່.</translation> @@ -4904,6 +4919,7 @@ <translation id="6709133671862442373">ຂ່າວ</translation> <translation id="6709357832553498500">ເຊື່ອມຕໍ່ດ້ວຍການໃຊ້ <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">ຜ່ານມາ</translation> +<translation id="6713233729292711163">ເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ</translation> <translation id="6715803357256707211">ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການຕິດຕັ້ງແອັບພລິເຄຊັນ Linux ຂອງທ່ານ. ຄລິກໃສ່ການແຈ້ງເຕືອນສຳລັບລາຍລະອຽດ.</translation> <translation id="671619610707606484">ນີ້ຈະລຶບລ້າງຂໍ້ມູນ <ph name="TOTAL_USAGE" /> ທີ່ເກັບໄວ້ໂດຍເວັບໄຊ</translation> <translation id="671928215901716392">ຫນ້າຈໍລັອກ</translation> @@ -5272,6 +5288,7 @@ <translation id="7121362699166175603">ລຶບລ້າງປະຫວັດ ແລະ ການປະກອບຂໍ້ມູນອັດຕະໂນມັດໃນແຖບທີ່ຢູ່. ບັນຊີ Google ຂອງທ່ານອາດຈະມີຮູບແບບອື່ນຂອງປະຫວັດການທ່ອງເວັບຢູ່ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">ໂໝດຜູ້ພັດທະນາ</translation> <translation id="7121728544325372695">ເຄື່ອງໝາຍຂີດກາງອັດສະລິຍະ</translation> +<translation id="7122353087820324370">ການຕັ້ງຄ່າແອັບ ແລະ ລະບົບປະຕິບັດການບໍ່ຊິ້ງຂໍ້ມູນກັບບັນຊີສຳຮອງ.</translation> <translation id="7123030151043029868">ໄດ້ຮັບອະນຸຍາດໃຫ້ດາວໂຫຼດຫຼາຍໄຟລ໌ໂດຍອັດຕະໂນມັດ</translation> <translation id="7123360114020465152">ບໍ່ຮອງຮັບອີກຕໍ່ໄປ</translation> <translation id="7125148293026877011">ລຶບ Crostini</translation> @@ -5586,6 +5603,7 @@ <translation id="750509436279396091">ເປີດໂຟລເດີດາວໂຫຼດ</translation> <translation id="7506093026325926984">ລະຫັດຜ່ານນີ້ຈະຖືກບັນທຶກໄວ້ໃນອຸປະກອນນີ້</translation> <translation id="7506130076368211615">ຕັ້ງຄ່າເຄືອຂ່າຍໃໝ່</translation> +<translation id="7506242536428928412">ເພື່ອໃຊ້ກະແຈຄວາມປອດໄພໃໝ່ຂອງທ່ານ, ກະລຸນາຕັ້ງຄ່າ PIN ໃໝ່</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> ຂອງທ່ານໄດ້ຖືກຈົດທະບຽນສຳລັບການຈັດການວິສາຫະກິດສຳເລັດແລ້ວ.</translation> <translation id="7507207699631365376">ເບິ່ງ <ph name="BEGIN_LINK" />ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ<ph name="END_LINK" /> ຂອງຜູ້ໃຫ້ບໍລິການ</translation> <translation id="7507930499305566459">ໃບຢັ້ງຢືນຜູ້ຕອບຮັບສະຖານະ</translation> @@ -5749,6 +5767,7 @@ <translation id="7691077781194517083">ບໍ່ສາມາດຣີເຊັດກະແຈຄວາມປອດໄພນີ້ໄດ້. ຂໍ້ຜິດພາດ <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">ການອັບເກຣດ Crostini</translation> <translation id="7696063401938172191">ໃນ '<ph name="PHONE_NAME" />' ຂອງທ່ານ:</translation> +<translation id="7697166915480294040">ເຊື່ອງລາຍລະອຽດໃນຂະນະທີ່ທ່ານແບ່ງປັນໜ້າຈໍ</translation> <translation id="7697598343108519171">ໃຊ້ກ້ອງເພື່ອສະແກນລະຫັດ QR</translation> <translation id="7699968112832915395">ບໍ່ສາມາດເພີ່ມບັນຊີໄດ້</translation> <translation id="7701040980221191251">ບໍ່ມີ</translation> @@ -6204,6 +6223,8 @@ <translation id="8184472985242519288">ແບບດຽວກັນ</translation> <translation id="8186609076106987817">ເຊີບເວີບໍ່ສາມາດຊອກຫາໄຟລ໌ໄດ້.</translation> <translation id="8188389033983459049">ກວດເບິ່ງການຕັ້ງຄ່າອຸປະກອນຂອງທ່ານ ແລະ ເປີດມັນເພື່ອສືບຕໍ່</translation> +<translation id="8189306097519446565">ບັນຊີໂຮງຮຽນ</translation> +<translation id="8189750580333936930">ກ່ອງຊາຍຄວາມເປັນສ່ວນຕົວ</translation> <translation id="8190193592390505034">ກໍາລັງເຊື່ອມຕໍ່ກັບ <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">ຈັດການແອັບ, ສ່ວນຂະຫຍາຍ, ແລະເທມຂອງທ່ານ</translation> <translation id="8195027750202970175">ຂະໜາດໃນດິສ</translation> @@ -6895,6 +6916,7 @@ <translation id="8986362086234534611">ລືມ</translation> <translation id="8986494364107987395">ສົ່ງສະຖິຕິການໃຊ້ ແລະລາຍງານການຂັດຂ້ອງໄປຫາ Google ໂດຍອັດຕະໂນມັດ</translation> <translation id="8987927404178983737">ເດືອນ</translation> +<translation id="8989823300731803443">ສືບຕໍ່ຈາກບ່ອນທີ່ທ່ານຄ້າງໄວ້.</translation> <translation id="8990209962746788689">ບໍ່ສາມາດສ້າງລະຫັດ QR ໄດ້</translation> <translation id="8991520179165052608">ເວັບໄຊສາມາດໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານໄດ້</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 ລາຍການ}other{# ລາຍການ}}</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 8c5807f..9c4766786 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3177,7 +3177,6 @@ <translation id="4646675363240786305">Prievadai</translation> <translation id="4647090755847581616">&Uždaryti skirtuką</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" /> veiksmas iš <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Paleisti programą prisijungus prie planšetinio kompiuterio}computer{Paleisti programą prisijungus prie kompiuterio}other{Paleisti programą prisijungus prie įrenginio}}</translation> <translation id="4647697156028544508">Įveskite „<ph name="DEVICE_NAME" />“ PIN kodą:</translation> <translation id="4648491805942548247">Nepakankami leidimai</translation> <translation id="4648499713050786492">Prieš pridėdami asmenį atrakinkite savo profilį.</translation> @@ -3722,6 +3721,7 @@ <translation id="5317780077021120954">Išsaugoti</translation> <translation id="5319359161174645648">„Google“ rekomenduoja „Chrome“</translation> <translation id="5320112320661303273">Panašu, kad jau nustatėte Padėjėją kitame įrenginyje. Dar geriau išnaudokite Padėjėjo galimybes įjungę tolesnį nustatymą.</translation> +<translation id="5320135788267874712">Naujas įrenginio pavadinimas</translation> <translation id="532247166573571973">Serveris gali būti nepasiekiamas. Vėliau bandykite dar kartą.</translation> <translation id="5324300749339591280">Programų sąrašas</translation> <translation id="5324780743567488672">Automatiškai nustatyti laiko juostą pagal jūsų vietovę</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 0f621de7..eb3e601 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nav tīklu</translation> <translation id="1056898198331236512">Brīdinājums</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Ievadiet jauno PIN kodu. PIN kodā var būt burti, cipari un citas rakstzīmes, un tajā ir jābūt vismaz vienai rakstzīmei.}zero{Ievadiet jauno PIN kodu. PIN kodā ir jābūt ietvertām vismaz # rakstzīmēm. Tajā var būt burti, cipari un citas rakstzīmes.}one{Ievadiet jauno PIN kodu. PIN kodā ir jābūt ietvertai vismaz # rakstzīmei. Tajā var būt burti, cipari un citas rakstzīmes.}other{Ievadiet jauno PIN kodu. PIN kodā ir jābūt ietvertām vismaz # rakstzīmēm. Tajā var būt burti, cipari un citas rakstzīmes.}}</translation> <translation id="1059944192885972544">Atrastas vairākas cilnes, kas atbilst vaicājumam “<ph name="SEARCH_TEXT" />” (kopā <ph name="NUM" />)</translation> <translation id="1060292118287751956">Nosaka frekvenci, kādā ekrāns veic atjauninājumus.</translation> <translation id="1061904396131502319">Tūlīt būs pārtraukums</translation> @@ -637,9 +638,11 @@ <translation id="1688935057616748272">Ierakstiet kādu burtu.</translation> <translation id="168991973552362966">Tuvumā esoša printera pievienošana</translation> <translation id="1689945336726856614">Kopēt &URL</translation> +<translation id="1690248886740053041">Nevar izveidot savienojumu ar mobilo tīklu. Lai saņemtu tehnisko atbalstu, sazinieties ar mobilo sakaru operatoru.</translation> <translation id="1692115862433274081">Izmantot citu kontu</translation> <translation id="1692118695553449118">Sinhronizācija ieslēgta</translation> <translation id="1692210323591458290">Tumši violeta</translation> +<translation id="169279809881363536">Netika atrasts neviens profils. Lai iestatītu jaunu tīklu, skenējiet ātrās atbildes kodu, izmantojot ierīces kameru, vai ievadiet no sava mobilo sakaru operatora iegūto aktivizācijas kodu.</translation> <translation id="1697150536837697295">Māksla</translation> <translation id="1697686431566694143">Rediģēt failu</translation> <translation id="1698122934742150150">Tikai pašreizējā inkognito sesijā</translation> @@ -1576,6 +1579,7 @@ <translation id="2770465223704140727">Noņemt no saraksta</translation> <translation id="2770690685823456775">Eksportējiet paroles citā mapē.</translation> <translation id="2770929488047004208">Monitora izšķirtspēja</translation> +<translation id="2770954829020464827">Detalizēta informācija ir paslēpta uz ekrāna kopīgošanas laiku</translation> <translation id="2771268254788431918">Aktivizēti mobilie dati</translation> <translation id="2771816809568414714">Siers</translation> <translation id="2772936498786524345">Ninzja</translation> @@ -1943,6 +1947,7 @@ <translation id="3201422919974259695">Šeit tiks rādītas pieejamās USB ierīces.</translation> <translation id="3202131003361292969">Ceļš</translation> <translation id="3202173864863109533">Šīs cilnes skaņa ir izslēgta.</translation> +<translation id="3202218848974251205">Privacy Sandbox</translation> <translation id="3208321278970793882">Lietotne</translation> <translation id="3208584281581115441">Pārbaudīt tūlīt</translation> <translation id="3208703785962634733">Neapstiprināts</translation> @@ -2163,6 +2168,7 @@ <translation id="3459697287128633276">Lai ar jūsu kontu varētu piekļūt Google Play veikalam, nepieciešams autentificēties, izmantojot identitātes nodrošinātāju.</translation> <translation id="3462311546193741693">Jūs tiksiet izrakstīts no lielākās daļas vietņu. Jūs paliksiet pierakstījies Google kontā, lai varētu notīrīt sinhronizētos datus.</translation> <translation id="3462413494201477527">Vai atcelt konta iestatīšanu?</translation> +<translation id="3464145797867108663">Pievienot darba profilu</translation> <translation id="346431825526753">Šis ir bērniem paredzēts konts, ko pārvalda <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Iezīme</translation> <translation id="3468999815377931311">Android tālrunis</translation> @@ -2284,6 +2290,7 @@ <translation id="360180734785106144">Piedāvāt jaunas funkcijas, kad tās kļūst pieejamas</translation> <translation id="3602290021589620013">Priekšskatīt</translation> <translation id="3603622770190368340">Tīkla sertifikāta iegūšana</translation> +<translation id="3604193429970465812">Sekundārie konti</translation> <translation id="3604713164406837697">Fona tapetes mainīšana</translation> <translation id="3605780360466892872">Biznesmenis</translation> <translation id="3608576286259426129">Lietotāja attēla priekšskatījums</translation> @@ -2608,6 +2615,7 @@ Vai vēlaties palaist rīku <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Nevar izveidot saīsni</translation> +<translation id="3943494825379372497">Vai atjaunot lietotnes un lapas?</translation> <translation id="3943582379552582368">Atpakaļ</translation> <translation id="3943857333388298514">Ielīmēt</translation> <translation id="3948116654032448504">Meklēt attēlu <ph name="SEARCH_ENGINE" /> tīklā</translation> @@ -2693,6 +2701,7 @@ <translation id="4046013316139505482">Šiem paplašinājumiem nav nepieciešams skatīt un mainīt informāciju šajā vietnē.</translation> <translation id="4046123991198612571">Nākamais ieraksts</translation> <translation id="4047726037116394521">Doties uz sākuma ekrānu</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontaktpersona nav pieejama. Lai veiktu kopīgošanu tuvumā ar šo kontaktpersonu, pievienojiet kontaktpersonu sarakstam šīs personas e-pasta adresi, kas saistīta ar tās Google kontu.}zero{# kontaktpersonas nav pieejamas. Lai veiktu kopīgošanu tuvumā ar šīm kontaktpersonām, pievienojiet kontaktpersonu sarakstam šo personu e-pasta adreses, kas saistītas ar viņu Google kontiem.}one{# kontaktpersona nav pieejama. Lai veiktu kopīgošanu tuvumā ar šīm kontaktpersonām, pievienojiet kontaktpersonu sarakstam šo personu e-pasta adreses, kas saistītas ar viņu Google kontiem.}other{# kontaktpersonas nav pieejamas. Lai veiktu kopīgošanu tuvumā ar šīm kontaktpersonām, pievienojiet kontaktpersonu sarakstam šo personu e-pasta adreses, kas saistītas ar viņu Google kontiem.}}</translation> <translation id="4050225813016893843">Autentifikācijas metode</translation> <translation id="4052120076834320548">Niecīgs</translation> <translation id="4056908315660577142">Ir sasniegts laika ierobežojums, ko jūsu vecāki iestatīja Chrome lietotnes <ph name="APP_NAME" /> izmantošanai. Rīt to varēsiet izmantot <ph name="TIME_LIMIT" />.</translation> @@ -3176,7 +3185,6 @@ <translation id="4646675363240786305">Porti</translation> <translation id="4647090755847581616">&Aizvērt cilni</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. darbība no <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Palaist lietotni, kad pierakstāties savā planšetdatorā}computer{Palaist lietotni, kad pierakstāties savā datorā}other{Palaist lietotni, kad pierakstāties savā ierīcē}}</translation> <translation id="4647697156028544508">Ievadiet PIN ierīcei <ph name="DEVICE_NAME" />:</translation> <translation id="4648491805942548247">Nav pietiekamu atļauju.</translation> <translation id="4648499713050786492">Pirms kādas personas pievienošanas, lūdzu, atbloķējiet savu profilu.</translation> @@ -3340,6 +3348,7 @@ <translation id="4863769717153320198">Noteiktā izšķirtspēja: <ph name="WIDTH" /> x <ph name="HEIGHT" /> (noklusējuma)</translation> <translation id="4864369630010738180">Pierakstīšanās...</translation> <translation id="4864805589453749318">Atlasiet vienu no vecākiem, kurš piešķir atļauju pievienot mācību iestādes kontu.</translation> +<translation id="4866265760644917470">Profils ir sekmīgi pievienots.</translation> <translation id="486635084936119914">Automātiski atvērt noteikta veida failus pēc to lejupielādes</translation> <translation id="48704129375571883">Pievienot papildu funkcijas</translation> <translation id="4870758487381879312">Ievadiet administratora piešķirto paroli, lai iegūtu konfigurācijas informāciju</translation> @@ -3623,6 +3632,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Uzlauztā parole tika sekmīgi nomainīta. Jums ir vēl # uzlauzta parole. Chrome ieteikums: nekavējoties pārbaudiet šo paroli.}zero{Uzlauztā parole tika sekmīgi nomainīta. Jums ir vēl # uzlauztu paroļu. Chrome ieteikums: nekavējoties pārbaudiet šīs paroles.}one{Uzlauztā parole tika sekmīgi nomainīta. Jums ir vēl # uzlauzta parole. Chrome ieteikums: nekavējoties pārbaudiet šīs paroles.}other{Uzlauztā parole tika sekmīgi nomainīta. Jums ir vēl # uzlauztas paroles. Chrome ieteikums: nekavējoties pārbaudiet šīs paroles.}}</translation> <translation id="5207949376430453814">Izcelt teksta ievietošanas punktu</translation> <translation id="5209320130288484488">Ierīces nav atrastas</translation> +<translation id="5209572028385096813">Šī lietotāja konts tiek pārvaldīts, izmantojot lietotni Family Link</translation> <translation id="5210365745912300556">Aizvērt cilni</translation> <translation id="5213481667492808996">Jūsu <ph name="NAME" /> datu pakalpojums ir gatavs lietošanai</translation> <translation id="5213891612754844763">Rādīt starpniekservera iestatījumus</translation> @@ -3708,6 +3718,7 @@ <translation id="5302048478445481009">Valoda</translation> <translation id="5302932258331363306">Rādīt aizstājējus</translation> <translation id="5304276686222516262">Nevar lejupielādēt kontaktpersonu sarakstu. Lūdzu, pārbaudiet tīkla savienojumu vai <a href="#" id="tryAgainLink">mēģiniet vēlreiz</a>.</translation> +<translation id="5305145881844743843">Šo kontu pārvalda <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Nav instalēts</translation> <translation id="5307030433605830021">Avots netiek atbalstīts</translation> <translation id="5308380583665731573">Pievienošana</translation> @@ -3721,6 +3732,7 @@ <translation id="5317780077021120954">Saglabāt</translation> <translation id="5319359161174645648">Google iesaka pārlūku Chrome</translation> <translation id="5320112320661303273">Šķiet, ka jau esat iestatījis Asistentu citā ierīcē. Lai efektīvāk izmantotu Asistentu, ieslēdziet tālāk norādīto iestatījumu.</translation> +<translation id="5320135788267874712">Jaunais ierīces nosaukums</translation> <translation id="532247166573571973">Iespējams, serveris nav sasniedzams. Vēlāk mēģiniet vēlreiz.</translation> <translation id="5324300749339591280">Lietotņu saraksts</translation> <translation id="5324780743567488672">Automātiski iestatīt laika joslu, izmantojot atrašanās vietu</translation> @@ -4088,6 +4100,7 @@ <translation id="5740820643029013514">Izmantot neuzkrītošākus paziņojumus (ieteicams)</translation> <translation id="574104302965107104">Displeja spoguļošana</translation> <translation id="574209121243317957">Tonis</translation> +<translation id="5742505912938664543">Ja šeit pievienosiet sekundāro kontu, varēsiet to lietot, lai pārlūkotu tīmekļa saturu, lejupielādētu lietotnes, skatītu Gmail iesūtni un izmantotu citus Google pakalpojumus.</translation> <translation id="5746169159649715125">Saglabāt kā PDF failu</translation> <translation id="5747552184818312860">Termiņš</translation> <translation id="5747785204778348146">Izstrādātāju — nav stabila</translation> @@ -4428,6 +4441,7 @@ <translation id="6129953537138746214">Atstarpe</translation> <translation id="6130692320435119637">Pievienot Wi-Fi tīklu</translation> <translation id="6136114942382973861">Aizvērt lejupielāžu joslu</translation> +<translation id="6136287496450963112">Jūsu drošības atslēga nav aizsargāta ar PIN kodu. Lai pārvaldītu pirkstu nospiedumus, vispirms izveidojiet PIN kodu.</translation> <translation id="6137767437444130246">Lietotāja sertifikāts</translation> <translation id="6138680304137685902">X9.62 ECDSA paraksts ar SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nav tīkla</translation> @@ -4608,6 +4622,7 @@ <translation id="6331566915566907158">Palīdzēt uzlabot Chrome OS funkcijas un veiktspēju</translation> <translation id="6331818708794917058">Atļaut vietnēm pieprasīt atļauju veidot savienojumu ar MIDI ierīcēm</translation> <translation id="6333064448949140209">Fails tiks nosūtīts Google serveriem atkļūdošanai</translation> +<translation id="6334444530352320327">Lietotnes un OS iestatījumi tiks sinhronizēti Chromebook datoros, kuros esat pierakstījies ar šo kontu. <ph name="LINK_BEGIN" />Sinhronizācijas iestatījumi<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Atļaut visām vietnēm rādīt jebkādas reklāmas</translation> <translation id="6339668969738228384">Izveidot profilu kontam <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Nevarēja izveidot savienojumu ar serveri. Pārbaudiet tīkla savienojumu un mēģiniet vēlreiz. Ja problēma joprojām pastāv, restartējiet Chromebook datoru.</translation> @@ -4909,6 +4924,7 @@ <translation id="6709133671862442373">Ziņas</translation> <translation id="6709357832553498500">Izveidot savienojumu, izmantojot paplašinājumu <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Iepriekšējais</translation> +<translation id="6713233729292711163">Pievienot darba profilu</translation> <translation id="6715803357256707211">Linux lietojumprogrammas instalēšanas laikā radās kļūda. Noklikšķiniet uz paziņojuma, lai iegūtu detalizētu informāciju.</translation> <translation id="671619610707606484">Tādējādi tiks notīrīti <ph name="TOTAL_USAGE" /> datu, kas tiek glabāti vietnēs.</translation> <translation id="671928215901716392">Bloķēt ekrānu</translation> @@ -5277,6 +5293,7 @@ <translation id="7121362699166175603">Notīra vēsturi un automātiskās pabeigšanas datus adreses joslā. Jūsu Google kontam var būt cita veida pārlūkošanas vēstures dati vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Izstrādātāja režīms</translation> <translation id="7121728544325372695">Viedās defises</translation> +<translation id="7122353087820324370">Lietotnes un OS iestatījumi netiek sinhronizēti ar sekundārajiem kontiem.</translation> <translation id="7123030151043029868">Drīkst automātiski lejupielādēt vairākus failus</translation> <translation id="7123360114020465152">Vairs netiek atbalstīts</translation> <translation id="7125148293026877011">Crostini dzēšana</translation> @@ -5591,6 +5608,7 @@ <translation id="750509436279396091">Atvērt lejupielāžu mapi</translation> <translation id="7506093026325926984">Šī parole tiks saglabāta šajā ierīcē</translation> <translation id="7506130076368211615">Jauna tīkla iestatīšana</translation> +<translation id="7506242536428928412">Lai izmantotu jauno drošības atslēgu, iestatiet jaunu PIN kodu</translation> <translation id="7506541170099744506">Jūsu <ph name="DEVICE_TYPE" /> ierīce ir sekmīgi reģistrēta uzņēmuma pārvaldībai.</translation> <translation id="7507207699631365376">Skatīt šī pakalpojumu sniedzēja <ph name="BEGIN_LINK" />konfidencialitātes politiku<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Statusa atbildētāja sertifikāts</translation> @@ -5754,6 +5772,7 @@ <translation id="7691077781194517083">Nevar atiestatīt šo drošības atslēgu. Kļūda: <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini jaunināšana</translation> <translation id="7696063401938172191">Jūsu tālrunī “<ph name="PHONE_NAME" />”:</translation> +<translation id="7697166915480294040">Detalizēta informācija ir paslēpta uz ekrāna kopīgošanas laiku</translation> <translation id="7697598343108519171">Skenēt QR kodu, izmantojot kameru</translation> <translation id="7699968112832915395">Nevar pievienot kontu</translation> <translation id="7701040980221191251">Nav</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Vienota</translation> <translation id="8186609076106987817">Serveris nevarēja atrast failu.</translation> <translation id="8188389033983459049">Lai turpinātu, pārbaudiet ierīces iestatījumus un ieslēdziet to.</translation> +<translation id="8189306097519446565">Mācību iestāžu konti</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Savienojas ar <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Pārvaldīt jūsu lietotnes, paplašinājumus un motīvus</translation> <translation id="8195027750202970175">Lielums diskā</translation> @@ -6903,6 +6924,7 @@ <translation id="8986362086234534611">Aizmirst</translation> <translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation> <translation id="8987927404178983737">Mēnesis</translation> +<translation id="8989823300731803443">Turpiniet iesākto.</translation> <translation id="8990209962746788689">Nevar izveidot QR kodu</translation> <translation id="8991520179165052608">Vietne var izmantot jūsu mikrofonu.</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 vienums}zero{# vienumu}one{# vienums}other{# vienumi}}</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 59074c1b..40c74742 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Нема мрежи</translation> <translation id="1056898198331236512">Предупредување</translation> <translation id="1058262162121953039">Личен код за деблокирање (PUK)</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Внесете го новиот PIN-код. PIN-кодот мора да содржи најмалку еден знак, а може да содржи букви, бројки и други знаци.}one{Внесете го новиот PIN-код. PIN-кодот мора да содржи најмалку # знак, а може да содржи букви, бројки и други знаци.}other{Внесете го новиот PIN-код. PIN-кодот мора да содржи најмалку # знака, а може да содржи букви, бројки и други знаци.}}</translation> <translation id="1059944192885972544">Најдени се <ph name="NUM" /> картички за „<ph name="SEARCH_TEXT" />“</translation> <translation id="1060292118287751956">Ја одредува фреквенцијата на освежување на екранот</translation> <translation id="1061904396131502319">Речиси е време за пауза</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">Напишете буква</translation> <translation id="168991973552362966">Додај печатач во близина</translation> <translation id="1689945336726856614">Копирај &URL</translation> +<translation id="1690248886740053041">Не може да се поврзе на мобилна мрежа. За техничка поддршка, контактирајте со операторот.</translation> <translation id="1692115862433274081">Користете друга сметка</translation> <translation id="1692118695553449118">Синхронизацијата е вклучена</translation> <translation id="1692210323591458290">Темновиолетова</translation> +<translation id="169279809881363536">Не се откриени профили. За да поставите нова мрежа, скенирајте го QR-кодот со камерата на уредот или внесете го кодот за активација од операторот.</translation> <translation id="1697150536837697295">Уметност</translation> <translation id="1697686431566694143">Измени датотека</translation> <translation id="1698122934742150150">Само тековната инкогнито сесија</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">Отстрани од список</translation> <translation id="2770690685823456775">Извезете ги лозинките во друга папка</translation> <translation id="2770929488047004208">Резолуција на мониторот</translation> +<translation id="2770954829020464827">Деталите се сокриени додека го споделувате екранот</translation> <translation id="2771268254788431918">Мобилниот интернет е активиран</translation> <translation id="2771816809568414714">Сирење</translation> <translation id="2772936498786524345">Нинџа</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">Достапните USB-уреди ќе се појават тука.</translation> <translation id="3202131003361292969">Патека</translation> <translation id="3202173864863109533">Звукот на оваа картичка е исклучен.</translation> +<translation id="3202218848974251205">Sandbox за приватност</translation> <translation id="3208321278970793882">Апликација</translation> <translation id="3208584281581115441">Провери сега</translation> <translation id="3208703785962634733">Непотврдена</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">За да овозможите сметката да пристапува до Google Play Store, извршете проверка со вашиот oбезбедувач на идентитет.</translation> <translation id="3462311546193741693">Ќе ве одјави од повеќето сајтови. Ќе останете најавени на вашата сметка на Google за да може да ги избришете синхронизираните податоци.</translation> <translation id="3462413494201477527">Откажи го поставувањето на сметка?</translation> +<translation id="3464145797867108663">Додајте работен профил</translation> <translation id="346431825526753">Ова е сметка за деца управувана од <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Ознака</translation> <translation id="3468999815377931311">Телефон со Android</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">Да ви нуди нови функции кога ќе станат достапни</translation> <translation id="3602290021589620013">Преглед</translation> <translation id="3603622770190368340">Набави сертификат на мрежа</translation> +<translation id="3604193429970465812">Секундарни сметки</translation> <translation id="3604713164406837697">Менување тапет</translation> <translation id="3605780360466892872">Закопчан</translation> <translation id="3608576286259426129">Преглед на слика на корисник</translation> @@ -2607,6 +2614,7 @@ Дали сакате да стартувате <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Не може да се создаде кратенка</translation> +<translation id="3943494825379372497">Да се вратат апликациите и страниците?</translation> <translation id="3943582379552582368">&Назад</translation> <translation id="3943857333388298514">Залепи</translation> <translation id="3948116654032448504">&Пребарувај слика на <ph name="SEARCH_ENGINE" /></translation> @@ -2692,6 +2700,7 @@ <translation id="4046013316139505482">Екстензииве не треба да гледаат и менуваат податоци на сајтов.</translation> <translation id="4046123991198612571">Следна песна</translation> <translation id="4047726037116394521">Одете на почетната страница</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# контакт не е достапен. За да користите „Споделување во близина“ со него, додајте ја адресата на е-пошта поврзана со неговата сметка на Google во вашите контакти.}one{# контакт не е достапен. За да користите „Споделување во близина“ со нив, додајте ги адресите на е-пошта поврзани со нивните сметки на Google во вашите контакти.}other{# контакти не се достапни. За да користите „Споделување во близина“ со нив, додајте ги адресите на е-пошта поврзани со нивните сметки на Google во вашите контакти.}}</translation> <translation id="4050225813016893843">Метод на проверка</translation> <translation id="4052120076834320548">Ситен</translation> <translation id="4056908315660577142">Го достигна временското ограничување што твојот родител го поставил за апликацијата <ph name="APP_NAME" /> на Chrome. Ќе може да ја користиш <ph name="TIME_LIMIT" /> утре.</translation> @@ -3175,7 +3184,6 @@ <translation id="4646675363240786305">Порти</translation> <translation id="4647090755847581616">&Затвори ја картичката</translation> <translation id="4647283074445570750">Чекор <ph name="CURRENT_STEP" /> од <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Стартувај ја апликацијата кога ќе се најавам на таблетот}computer{Стартувај ја апликацијата кога ќе се најавам на компјутерот}other{Стартувај ја апликацијата кога ќе се најавам на уредот}}</translation> <translation id="4647697156028544508">Внесете PIN за „<ph name="DEVICE_NAME" />“.</translation> <translation id="4648491805942548247">Недоволно дозволи</translation> <translation id="4648499713050786492">Отклучете го профилот пред да додадете некого.</translation> @@ -3339,6 +3347,7 @@ <translation id="4863769717153320198">Изгледа како <ph name="WIDTH" /> x <ph name="HEIGHT" /> (стандардна)</translation> <translation id="4864369630010738180">Се најавува…</translation> <translation id="4864805589453749318">Изберете го родителот што дава дозвола за да додадете училишна сметка.</translation> +<translation id="4866265760644917470">Профилот е успешно додаден.</translation> <translation id="486635084936119914">Отворај одредени типови датотеки автоматски по преземањето</translation> <translation id="48704129375571883">Додајте дополнителни функции</translation> <translation id="4870758487381879312">Внесете лозинка што ви ја обезбедил администраторот за да добиете информации за конфигурацијата</translation> @@ -3622,6 +3631,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Успешно ја променивте компромитираната лозинка. Имате уште # компромитирана лозинка. Chrome препорачува веднаш да ја проверите лозинкава.}one{Успешно ја променивте компромитираната лозинка. Имате уште # компромитирана лозинка. Chrome препорачува веднаш да ги проверите лозинкиве.}other{Успешно ја променивте компромитираната лозинка. Имате уште # компромитирани лозинки. Chrome препорачува веднаш да ги проверите лозинкиве.}}</translation> <translation id="5207949376430453814">Нагласи го каретот за текст</translation> <translation id="5209320130288484488">Не се пронајдени уреди</translation> +<translation id="5209572028385096813">Family Link управува со овој корисник</translation> <translation id="5210365745912300556">Затвори ја картичката</translation> <translation id="5213481667492808996">Услугата за мобилен интернет од <ph name="NAME" /> е спремна за употреба</translation> <translation id="5213891612754844763">Покажи ги поставките за прокси</translation> @@ -3707,6 +3717,7 @@ <translation id="5302048478445481009">Јазик</translation> <translation id="5302932258331363306">Прикажи ги замените</translation> <translation id="5304276686222516262">Не може да се преземе списокот со контакти. Проверете ја мрежната врска или <a href="#" id="tryAgainLink">обидете се повторно</a>.</translation> +<translation id="5305145881844743843"><ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /> управува со сметкава</translation> <translation id="5305688511332277257">Нема инсталирано</translation> <translation id="5307030433605830021">Изворот не е поддржан</translation> <translation id="5308380583665731573">Поврзи</translation> @@ -3720,6 +3731,7 @@ <translation id="5317780077021120954">Зачувај</translation> <translation id="5319359161174645648">Google го препорачува Chrome</translation> <translation id="5320112320661303273">Се чини дека веќе сте го поставиле „Помошникот“ на друг уред. Добијте уште повеќе од вашиот „Помошник“ со вклучување на следнава поставка.</translation> +<translation id="5320135788267874712">Ново име на уредот</translation> <translation id="532247166573571973">Серверот може да е недостапен. Обидете се повторно подоцна.</translation> <translation id="5324300749339591280">Список со апликации</translation> <translation id="5324780743567488672">Автоматско поставување на часовната зона преку вашата локација</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Користи потивка размена на пораки (препорачано)</translation> <translation id="574104302965107104">Отсликување на екранот</translation> <translation id="574209121243317957">Висина</translation> +<translation id="5742505912938664543">Кога ќе додадете секундарна сметка тука, може да прелистувате на интернет, да преземате апликации, да ја проверувате вашата Gmail и другите услуги на Google со таа сметка.</translation> <translation id="5746169159649715125">Зачувај како ПДФ</translation> <translation id="5747552184818312860">Истекува на</translation> <translation id="5747785204778348146">Програмер - нестабилен</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Празно место</translation> <translation id="6130692320435119637">Додај Wi-Fi</translation> <translation id="6136114942382973861">Затвори ја лентата за преземања</translation> +<translation id="6136287496450963112">Вашиот безбедносен клуч не е заштитен со PIN. За да управувате со отпечатоците, прво создајте PIN.</translation> <translation id="6137767437444130246">Сертификат на корисник</translation> <translation id="6138680304137685902">X9.62 ECDSA потпис со SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, нема мрежа</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Помогнете да се подобрат функциите и изведбата на Chrome OS</translation> <translation id="6331818708794917058">Сајтовите може да прашуваат дали да се поврзат со MIDI-уредите</translation> <translation id="6333064448949140209">Датотеката ќе се испрати во Google за да се отстранат грешките</translation> +<translation id="6334444530352320327">Вашите поставки за апликациите и OS ќе се синхронизираат на сите уреди Chromebook каде што сте најавени со сметкава.<ph name="LINK_BEGIN" />Поставки за синхронизација<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Сите сајтови може да ви прикажуваат секакви реклами</translation> <translation id="6339668969738228384">Создавање нов профил за <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Не може да се поврзе со серверот. Проверете ја мрежната врска и обидете се повторно. Ако сѐ уште имате проблем, рестартирајте го вашиот Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Вести</translation> <translation id="6709357832553498500">Поврзете се повторно користејќи <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Претходно</translation> +<translation id="6713233729292711163">Додајте работен профил</translation> <translation id="6715803357256707211">Грешка при инсталирањето на Linux. Кликнете на известувањето за детали.</translation> <translation id="671619610707606484">Ова ќе ги избрише податоците (<ph name="TOTAL_USAGE" />) складирани од сајтовите</translation> <translation id="671928215901716392">Заклучување на екранот</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Ја чисти историјата и автоматските довршувања во лентата за адреси. Вашата сметка на Google можеби има други видови историја на прелистување на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Режим на програмер</translation> <translation id="7121728544325372695">Паметни цртички</translation> +<translation id="7122353087820324370">Поставките за апликации и OS не се синхронизираат со секундарните сметки.</translation> <translation id="7123030151043029868">Дозволено им е автоматски да преземаат повеќе датотеки</translation> <translation id="7123360114020465152">Веќе не е поддржано</translation> <translation id="7125148293026877011">Бришење на Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Отвори папка на преземања</translation> <translation id="7506093026325926984">Лозинкава ќе се зачува на уредов</translation> <translation id="7506130076368211615">Поставете нова мрежа</translation> +<translation id="7506242536428928412">За да го користите новиот безбедносен клуч, поставете нов PIN</translation> <translation id="7506541170099744506">Вашиот <ph name="DEVICE_TYPE" /> е успешно запишан за управување на компанијата.</translation> <translation id="7507207699631365376">Погледнете ја <ph name="BEGIN_LINK" />Политиката за приватност<ph name="END_LINK" /> на операторов</translation> <translation id="7507930499305566459">Сертификат за статус на одговарач</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Безбедносниов клуч не може да се ресетира. Грешка <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Надградба за Crostini</translation> <translation id="7696063401938172191">На вашиот <ph name="PHONE_NAME" />:</translation> +<translation id="7697166915480294040">Деталите се сокриени додека го споделувате екранот</translation> <translation id="7697598343108519171">Користете ја камерата за да го скенирате QR-кодот</translation> <translation id="7699968112832915395">Не може да се додаде сметка</translation> <translation id="7701040980221191251">Нема</translation> @@ -6208,6 +6227,8 @@ <translation id="8184472985242519288">Унифициран</translation> <translation id="8186609076106987817">Серверот не може да ја најде датотеката.</translation> <translation id="8188389033983459049">Проверете ги поставките на уредот и вклучете го за да продолжите</translation> +<translation id="8189306097519446565">Училишни сметки</translation> +<translation id="8189750580333936930">Sandbox за приватност</translation> <translation id="8190193592390505034">Се поврзува на <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Управувајте со вашите апликации, наставки и теми</translation> <translation id="8195027750202970175">Големина на диск</translation> @@ -6903,6 +6924,7 @@ <translation id="8986362086234534611">Заборави</translation> <translation id="8986494364107987395">Автоматски испрати статистика за користење и извештаи за падови до Google</translation> <translation id="8987927404178983737">Месец</translation> +<translation id="8989823300731803443">Продолжете таму каде што сте застанале.</translation> <translation id="8990209962746788689">Не може да се создаде QR-код</translation> <translation id="8991520179165052608">Сајтот може да го користи микрофонот</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 ставка}one{# ставка}other{# ставки}}</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 627b67e..7d7b110f 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -3170,7 +3170,6 @@ <translation id="4646675363240786305">പോർട്ടുകൾ</translation> <translation id="4647090755847581616">ടാബ് &അടയ്ക്കുക</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />-ൽ <ph name="CURRENT_STEP" />-ാം ഘട്ടം</translation> -<translation id="4647420311443994946">{0,select, tablet{നിങ്ങളുടെ ടാബ്ലെറ്റിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ ആപ്പ് ആരംഭിക്കുക}computer{നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ ആപ്പ് ആരംഭിക്കുക}other{നിങ്ങളുടെ ഉപകരണത്തിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ ആപ്പ് ആരംഭിക്കുക}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" എന്നതിനായി PIN നൽകുക:</translation> <translation id="4648491805942548247">അപര്യാപ്തമായ അനുമതികൾ</translation> <translation id="4648499713050786492">ഒരാളെ ചേർക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ പ്രൊഫൈൽ അൺലോക്ക് ചെയ്യുക.</translation> @@ -3715,6 +3714,7 @@ <translation id="5317780077021120954">സംരക്ഷിക്കുക</translation> <translation id="5319359161174645648">Google ശുപാർശചെയ്യുന്നത് Chrome ആണ്</translation> <translation id="5320112320661303273">നിങ്ങൾ മറ്റൊരു ഉപകരണത്തിൽ മുമ്പേ Assistant സജ്ജീകരിച്ചതായി തോന്നുന്നു. ഇനിപ്പറയുന്ന ക്രമീകരണം ഓണാക്കി നിങ്ങളുടെ Assistant പരമാവധി പ്രയോജനപ്പെടുത്തൂ.</translation> +<translation id="5320135788267874712">ഉപകരണത്തിന്റെ പുതിയ പേര്</translation> <translation id="532247166573571973">സെർവർ ലഭ്യമല്ലായിരിക്കാം. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="5324300749339591280">ആപ്പുകളുടെ ലിസ്റ്റ്</translation> <translation id="5324780743567488672">നിങ്ങളുടെ ലൊക്കേഷൻ ഉപയോഗിച്ച് സമയ മേഖല സ്വയമേവ സജ്ജമാക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 43bde925..b5c81cea 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Сүлжээ алга</translation> <translation id="1056898198331236512">Анхааруулга</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Шинэ ПИН-ээ оруулна уу. ПИН хамгийн багадаа нэг тэмдэгттэй байх ёстой бөгөөд үсэг, тоо болон бусад тэмдэгтийг агуулж болно.}other{Шинэ ПИН-ээ оруулна уу. ПИН хамгийн багадаа # тэмдэгттэй байх ёстой бөгөөд үсэг, тоо болон бусад тэмдэгтийг агуулж болно.}}</translation> <translation id="1059944192885972544">'<ph name="SEARCH_TEXT" />'-д <ph name="NUM" /> таб оллоо</translation> <translation id="1060292118287751956">Дэлгэцийг шинэчлэх давтамжийг тодорхойлно</translation> <translation id="1061904396131502319">Завсарлах цаг ойртож байна</translation> @@ -631,9 +632,11 @@ <translation id="1688935057616748272">Үсэг бичих</translation> <translation id="168991973552362966">Ойролцоох хэвлэгчийг нэмэх</translation> <translation id="1689945336726856614">Хуулах &URL</translation> +<translation id="1690248886740053041">Мобайл сүлжээтэй холбогдох боломжгүй. Техникийн тусламж авах бол оператор компанитайгаа холбоо барина уу.</translation> <translation id="1692115862433274081">Өөр бүртгэл ашиглах</translation> <translation id="1692118695553449118">Тохиргоо асаалттай байна.</translation> <translation id="1692210323591458290">Бараан ягаан</translation> +<translation id="169279809881363536">Ямар ч профайл олдсонгүй. Шинэ сүлжээ тохируулахын тулд төхөөрөмжийн камерыг ашиглан QR кодыг скан хийнэ үү эсвэл таны оператор компаниас өгсөн идэвхжүүлэх кодыг оруулна уу.</translation> <translation id="1697150536837697295">Урлаг</translation> <translation id="1697686431566694143">Файлыг засах</translation> <translation id="1698122934742150150">Зөвхөн одоогийн нууцлалын горимын тов</translation> @@ -1569,6 +1572,7 @@ <translation id="2770465223704140727">Жагсаалтаас устгах</translation> <translation id="2770690685823456775">Нууц үгээ өөр фолдерт экспортлох</translation> <translation id="2770929488047004208">Мониторын нягтрал</translation> +<translation id="2770954829020464827">Таныг дэлгэцээ хуваалцах үед дэлгэрэнгүйг нууна</translation> <translation id="2771268254788431918">Мобайл датаг идэвхжүүлсэн</translation> <translation id="2771816809568414714">Бяслаг</translation> <translation id="2772936498786524345">Sneaky</translation> @@ -1936,6 +1940,7 @@ <translation id="3201422919974259695">Боломжтой USB төхөөрөмжүүд энд харагдана.</translation> <translation id="3202131003361292969">Зам</translation> <translation id="3202173864863109533">Энэ табны дууг хаасан байна.</translation> +<translation id="3202218848974251205">Нууцлалын sandbox</translation> <translation id="3208321278970793882">Апп</translation> <translation id="3208584281581115441">Одоо шалгах</translation> <translation id="3208703785962634733">Баталгаажуулаагүй</translation> @@ -2156,6 +2161,7 @@ <translation id="3459697287128633276">Бүртгэлийнхээ Google Play Дэлгүүрийн хандалтыг идэвхжүүлэхийн тулд Таниулбар өгөгчөөр баталгаажуулна уу.</translation> <translation id="3462311546193741693">Таныг ихэнх сайтаас гаргана. Та Google Бүртгэлдээ нэвтэрсэн хэвээр үлдэх бөгөөд ингэснээр таны синк хийсэн өгөгдлийг устгаж чадна.</translation> <translation id="3462413494201477527">Бүртгэлийн тохиргоог цуцлах уу?</translation> +<translation id="3464145797867108663">Ажлын профайл нэмэх</translation> <translation id="346431825526753">Энэхүү хүүхдэд зориулсан хаягийг <ph name="CUSTODIAN_EMAIL" /> удирдан ажиллаж байна.</translation> <translation id="3468298837301810372">Шошго</translation> <translation id="3468999815377931311">Android утас</translation> @@ -2277,6 +2283,7 @@ <translation id="360180734785106144">Шинэ онцлогуудыг боломжтой болмогц санал болгох</translation> <translation id="3602290021589620013">Мэдээллийг урьдчилж харах</translation> <translation id="3603622770190368340">Сүлжээний сертификат авах</translation> +<translation id="3604193429970465812">Хоёрдогч бүртгэлүүд</translation> <translation id="3604713164406837697">Ханын зураг солих</translation> <translation id="3605780360466892872">Buttondown</translation> <translation id="3608576286259426129">Хэрэглэгчийн зургийг урьдчилан үзэх</translation> @@ -2600,6 +2607,7 @@ Та <ph name="CONTROL_PANEL_APPLET_NAME" />-ийг эхлүүлэхийг хүсэж байна уу?</translation> <translation id="394183848452296464">Товчлол үүсгэх боломжгүй</translation> +<translation id="3943494825379372497">Аппууд болон хуудаснуудыг сэргээх үү?</translation> <translation id="3943582379552582368">& Буцах</translation> <translation id="3943857333388298514">Хуулан буулгах</translation> <translation id="3948116654032448504">&Зураг харахын тулд <ph name="SEARCH_ENGINE" />-г хайна уу</translation> @@ -2685,6 +2693,7 @@ <translation id="4046013316139505482">Эдгээр өргөтгөлд энэ сайт дээрх мэдээллийг харах болон өөрчлөх хэрэггүй.</translation> <translation id="4046123991198612571">Дараагийн бичлэг</translation> <translation id="4047726037116394521">Нүүр хуудас руу очих</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# харилцагч боломжгүй байна. Ойролцоо хуваалцах онцлогийг тэдэнтэй ашиглахын тулд тэдний Google Бүртгэлтэй холбоотой имэйл хаягийг харилцагчдадаа нэмнэ үү.}other{# харилцагч боломжгүй байна. Ойролцоо хуваалцах онцлогийг тэдэнтэй ашиглахын тулд тэдний Google Бүртгэлтэй холбоотой имэйл хаягуудыг харилцагчдадаа нэмнэ үү.}}</translation> <translation id="4050225813016893843">Баталгаажуулах арга</translation> <translation id="4052120076834320548">Өчүүхэн</translation> <translation id="4056908315660577142">Та <ph name="APP_NAME" /> Chrome апп дээр таны эцэг эхийн тохируулсан цагийн хязгаарт хүрсэн байна. Та түүнийг маргааш <ph name="TIME_LIMIT" />-н турш ашиглах боломжтой.</translation> @@ -3168,7 +3177,6 @@ <translation id="4646675363240786305">Портууд</translation> <translation id="4647090755847581616">Цонхыг хаах</translation> <translation id="4647283074445570750">Алхам <ph name="TOTAL_STEPS" />-н <ph name="CURRENT_STEP" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Таблетдаа нэвтрэх үед аппыг эхлүүлэх}computer{Компьютертоо нэвтрэх үед аппыг эхлүүлэх}other{Төхөөрөмждөө нэвтрэх үед аппыг эхлүүлэх}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />": - ийн PIN кодыг оруулна уу.</translation> <translation id="4648491805942548247">Хангалтгүй зөвшөөрөл</translation> <translation id="4648499713050786492">Хүн нэмэхээсээ өмнө профайлынхаа түгжээг тайлна уу.</translation> @@ -3332,6 +3340,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> юм шиг харагдаж байна (Өгөгдмөл)</translation> <translation id="4864369630010738180">Нэвтэрч байна…</translation> <translation id="4864805589453749318">Сургуулийн бүртгэл нэмэх зөвшөөрөл олгож буй эцэг эхээ сонгоно уу.</translation> +<translation id="4866265760644917470">Профайлыг амжилттай нэмлээ.</translation> <translation id="486635084936119914">Татаж авсны дараа тодорхой файлын хэлбэрийг автоматаар нээх</translation> <translation id="48704129375571883">Нэмэлт онцлог нэмэх</translation> <translation id="4870758487381879312">Тохируулгын мэдээллийг авахын тулд админы өгсөн нууц үгийг оруулна уу</translation> @@ -3615,6 +3624,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Алдагдсан нууц үгийг амжилттай өөрчиллөө. Танд бусад # алдагдсан нууц үг байна. Chrome энэ нууц үгийг одоо шалгахыг зөвлөж байна.}other{Алдагдсан нууц үгийг амжилттай өөрчиллөө. Танд бусад # алдагдсан нууц үг байна. Chrome эдгээр нууц үгийг одоо шалгахыг зөвлөж байна.}}</translation> <translation id="5207949376430453814">Текст оруулах тэмдгийг тодруулах</translation> <translation id="5209320130288484488">Төхөөрөмж олдсонгүй</translation> +<translation id="5209572028385096813">Энэ хэрэглэгчийг Family Link-р удирддаг</translation> <translation id="5210365745912300556">Цонхыг хаа</translation> <translation id="5213481667492808996">Таны '<ph name="NAME" />'-н дата үйлчилгээ ашиглахад бэлэн байна</translation> <translation id="5213891612754844763">Прокси тохиргоог харуулах</translation> @@ -3700,6 +3710,7 @@ <translation id="5302048478445481009">Хэл</translation> <translation id="5302932258331363306">Солилцоог харуулах</translation> <translation id="5304276686222516262">Харилцагчийн жагсаалтийг татах боломжгүй. Сүлжээний холболтоо шалргах эсвэл <a href="#" id="tryAgainLink">дахин оролдоно уу</a>.</translation> +<translation id="5305145881844743843">Энэ бүртгэлийг <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" />-с удирддаг</translation> <translation id="5305688511332277257">Юу ч суугдаагүй байна.</translation> <translation id="5307030433605830021">Эх сурвалжийг дэмжээгүй байна</translation> <translation id="5308380583665731573">Холбо</translation> @@ -3713,6 +3724,7 @@ <translation id="5317780077021120954">Хадгалах</translation> <translation id="5319359161174645648">Google нь Chrome-г санал болгож байна</translation> <translation id="5320112320661303273">Та Туслахыг өөр төхөөрөмж дээр аль хэдийн тохируулсан бололтой. Дараах тохиргоог асааж, Туслахаа илүү их ашиглаарай.</translation> +<translation id="5320135788267874712">Шинэ төхөөрөмжийн нэр</translation> <translation id="532247166573571973">Энэ серверт холбогдох боломжгүй байна. Дараа дахин оролдоно уу.</translation> <translation id="5324300749339591280">Аппын жагсаалт</translation> <translation id="5324780743567488672">Таны байршлын мэдээллийг ашиглан цагийн бүсийг автоматаар тохируулах</translation> @@ -4080,6 +4092,7 @@ <translation id="5740820643029013514">Чимээгүй мессежийг ашиглах (санал болгосон)</translation> <translation id="574104302965107104">Дэлгэцийн тусгал үүсгэх</translation> <translation id="574209121243317957">Авиа</translation> +<translation id="5742505912938664543">Та энд хоёрдогч бүртгэл нэмснээр тухайн бүртгэлийг ашиглан веб үзэх, апп татах, өөрийн Gmail болон Google-н бусад үйлчилгээг шалгаж болно.</translation> <translation id="5746169159649715125">PDF хэлбэрээр хадгалах</translation> <translation id="5747552184818312860">Дуусах хугацаа</translation> <translation id="5747785204778348146">Хөгжүүлэгч - тогтворгүй</translation> @@ -4419,6 +4432,7 @@ <translation id="6129953537138746214">Space</translation> <translation id="6130692320435119637">Wi-Fi нэмэх</translation> <translation id="6136114942382973861">Татаж авсан файл хадгалах эсвэл нээх хэсгийг хаах</translation> +<translation id="6136287496450963112">Таны аюулгүй байдлын түлхүүрийг ПИН-р хамгаалаагүй байна. Хурууны хээг удирдахын тулд эхлээд ПИН үүсгэнэ үү.</translation> <translation id="6137767437444130246">Хэрэглэгчийн сертификат</translation> <translation id="6138680304137685902">X9.62 ECDSA SHA-384-тэй гарын үсэг</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, сүлжээ алга байна</translation> @@ -4599,6 +4613,7 @@ <translation id="6331566915566907158">Chrome үйлдлийн системийн онцлогууд болон гүйцэтгэлийг сайжруулахад туслах</translation> <translation id="6331818708794917058">Сайтууд MIDI төхөөрөмжүүдэд холбогдохыг хүсэх боломжтой</translation> <translation id="6333064448949140209">Файлыг дебаг хийхээр Google-д илгээж байна</translation> +<translation id="6334444530352320327">Таны аппууд болон үйлдлийн системийн тохиргоог таныг энэ бүртгэлээр нэвтэрсэн Chromebook дээр синк хийнэ.<ph name="LINK_BEGIN" />Синк хийх тохиргоо<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Бүх сайт танд дурын зар харуулах боломжтой</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" />-д шинэ профайл үүсгэх</translation> <translation id="6340017061976355871">Серверт холбогдож чадсангүй. Сүлжээний холболтоо шалгаад дахин оролдоно уу. Асуудал үргэлжилсээр байвал Chromebook-г дахин эхлүүлнэ үү.</translation> @@ -4900,6 +4915,7 @@ <translation id="6709133671862442373">Мэдээ</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />-ыг ашиглан холбогдоно уу</translation> <translation id="6710213216561001401">Өмнөх</translation> +<translation id="6713233729292711163">Ажлын профайл нэмэх</translation> <translation id="6715803357256707211">Таны Linux аппликэйшнийг суулгах явцад алдаа гарлаа. Дэлгэрэнгүй мэдээлэл авах бол мэдэгдэл дээр товшино уу.</translation> <translation id="671619610707606484">Энэ нь сайтуудын хадгалсан <ph name="TOTAL_USAGE" />-н өгөгдлийг арилгана</translation> <translation id="671928215901716392">Дэлгэцийг түгжих</translation> @@ -5268,6 +5284,7 @@ <translation id="7121362699166175603">Tүүх болон хаяг оруулах хэсгийн автомат гүйцээлтийг устгана. Таны Google бүртгэл <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />-д хайлтын түүхийн өөр хэлбэртэй байж болзошгүй.</translation> <translation id="7121438501124788993">Хөгжүүлэгч горим</translation> <translation id="7121728544325372695">Ухаалаг зураас</translation> +<translation id="7122353087820324370">Аппууд болон үйлдлийн системийн тохиргоог хоёрдогч бүртгэлүүдтэй синк хийхгүй.</translation> <translation id="7123030151043029868">Автоматаар олон файл татахыг зөвшөөрсөн</translation> <translation id="7123360114020465152">Дэмжихээ больсон байна</translation> <translation id="7125148293026877011">Crostini-г устгах</translation> @@ -5582,6 +5599,7 @@ <translation id="750509436279396091">Татаж авсан файлуудын хавтсыг нээ</translation> <translation id="7506093026325926984">Энэ нууц үгийг энэ төхөөрөмж дээр хадгална</translation> <translation id="7506130076368211615">Шинэ сүлжээ тохируулах</translation> +<translation id="7506242536428928412">Та аюулгүй байдлын шинэ түлхүүрээ ашиглахын тулд шинэ ПИН тохируулна уу</translation> <translation id="7506541170099744506">Таны <ph name="DEVICE_TYPE" />-г байгууллагын удирдлагад амжилттай бүртгэлээ.</translation> <translation id="7507207699631365376">Энэ хангагчийн <ph name="BEGIN_LINK" />нууцлалын бодлогыг<ph name="END_LINK" /> харах</translation> <translation id="7507930499305566459">Статусд хариулагч сертификат</translation> @@ -5745,6 +5763,7 @@ <translation id="7691077781194517083">Энэ аюулгүй байдлын түлхүүрийг шинэчлэх боломжгүй байна. Алдаа <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini-н сайжруулалт</translation> <translation id="7696063401938172191">Tаны '<ph name="PHONE_NAME" />'-д:</translation> +<translation id="7697166915480294040">Таныг дэлгэцээ хуваалцах үед дэлгэрэнгүйг нууна</translation> <translation id="7697598343108519171">QR кодыг скан хийхийн тулд камерыг ашиглана уу</translation> <translation id="7699968112832915395">Бүртгэл нэмэх боломжгүй байна</translation> <translation id="7701040980221191251">Тодорхойгүй</translation> @@ -6198,6 +6217,8 @@ <translation id="8184472985242519288">Нэгэн жигд</translation> <translation id="8186609076106987817">Сервер файлыг олж чадсангүй.</translation> <translation id="8188389033983459049">Төхөөрөмжийнхөө тохиргоог шалгаад үргэлжлүүлэх бол асаана уу</translation> +<translation id="8189306097519446565">Сургуулийн бүртгэлүүд</translation> +<translation id="8189750580333936930">Нууцлалын sandbox</translation> <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> руу холбогдож байна</translation> <translation id="8191230140820435481">Програм, өргөтгөл, theme-дээ тохиргоо хийх</translation> <translation id="8195027750202970175">Дискийн хэмжээ</translation> @@ -6887,6 +6908,7 @@ <translation id="8986362086234534611">Мартах</translation> <translation id="8986494364107987395">Google рүү хэрэглээний статистик мэдээ болон алдаа ослын тайланг автоматаар илгээ</translation> <translation id="8987927404178983737">Сар</translation> +<translation id="8989823300731803443">Орхисон хэсгээсээ үргэлжлүүлнэ үү.</translation> <translation id="8990209962746788689">QR код үүсгэх боломжгүй байна</translation> <translation id="8991520179165052608">Сайт таны микрофоныг ашиглах боломжтой</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 зүйл}other{# зүйл}}</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index eeedc16..56df91d9 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -3171,7 +3171,6 @@ <translation id="4646675363240786305">पोर्ट</translation> <translation id="4647090755847581616">टॅब &बंद करा</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> पैकी <ph name="CURRENT_STEP" /> पायरी</translation> -<translation id="4647420311443994946">{0,select, tablet{तुम्ही तुमच्या टॅबलेटवर साइन इन कराल तेव्हा ॲप सुरू करा}computer{तुम्ही तुमच्या कॉंप्युटरवर साइन इन कराल तेव्हा ॲप सुरू करा}other{तुम्ही तुमच्या डिव्हाइसवर साइन इन कराल तेव्हा ॲप सुरू करा}}</translation> <translation id="4647697156028544508">कृपया "<ph name="DEVICE_NAME" />" साठी पिन प्रविष्ट करा:</translation> <translation id="4648491805942548247">अपुर्या परवानग्या</translation> <translation id="4648499713050786492">कृपया एखाद्या व्यक्तीस जोडण्यापूर्वी तुमचे प्रोफाईल अनलॉक करा.</translation> @@ -3716,6 +3715,7 @@ <translation id="5317780077021120954">सेव्ह करा</translation> <translation id="5319359161174645648">Google Chrome ची शिफारस करते</translation> <translation id="5320112320661303273">तुम्ही आधीपासून Assistant एका वेगळ्या डिव्हाइसवर सेट केले आहे असे दिसते. पुढील सेटिंग सुरू करून Assistant चा पुरेपूर वापर करा.</translation> +<translation id="5320135788267874712">नवीन डिव्हाइसचे नाव</translation> <translation id="532247166573571973">सर्व्हर कदाचित आवाक्याबाहेर असू शकते. नंतर पुन्हा प्रयत्न करा.</translation> <translation id="5324300749339591280">अॅप्स सूची</translation> <translation id="5324780743567488672">तुमचे स्थान वापरून स्वयंचलितपणे टाइम झोन सेट करा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index cf49501..bfa9204 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">0 rangkaian</translation> <translation id="1056898198331236512">Amaran</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Masukkan PIN baharu anda. Panjang PIN mesti sekurang-kurangnya satu aksara dan boleh mengandungi huruf, nombor dan aksara lain.}other{Masukkan PIN baharu anda. Panjang PIN mesti sekurang-kurangnya # aksara dan boleh mengandungi huruf, nombor dan aksara lain.}}</translation> <translation id="1059944192885972544"><ph name="NUM" /> Tab untuk '<ph name="SEARCH_TEXT" />' Ditemukan</translation> <translation id="1060292118287751956">Menentukan kekerapan skrin dikemas kini</translation> <translation id="1061904396131502319">Masa rehat hampir tiba</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Taip huruf</translation> <translation id="168991973552362966">Tambahkan pencetak berdekatan</translation> <translation id="1689945336726856614">Salin &URL</translation> +<translation id="1690248886740053041">Tidak dapat menyambung kepada rangkaian mudah alih. Untuk mendapatkan sokongan teknikal, sila hubungi pembawa anda.</translation> <translation id="1692115862433274081">Gunakan akaun lain</translation> <translation id="1692118695553449118">Penyegerakan dihidupkan</translation> <translation id="1692210323591458290">Ungu gelap</translation> +<translation id="169279809881363536">Tiada profil dijumpai. Untuk menyediakan rangkaian baharu, imbas kod QR menggunakan kamera peranti atau masukkan kod pengaktifan yang disediakan oleh pembawa anda.</translation> <translation id="1697150536837697295">Seni</translation> <translation id="1697686431566694143">Edit fail</translation> <translation id="1698122934742150150">Sesi inkognito semasa sahaja</translation> @@ -1574,6 +1577,7 @@ <translation id="2770465223704140727">Buang dari senarai</translation> <translation id="2770690685823456775">Eksport kata laluan anda ke folder lain</translation> <translation id="2770929488047004208">Peleraian monitor</translation> +<translation id="2770954829020464827">Butiran disembunyikan semasa anda berkongsi skrin anda</translation> <translation id="2771268254788431918">Data mudah alih diaktifkan</translation> <translation id="2771816809568414714">Keju</translation> <translation id="2772936498786524345">Licik</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Peranti USB yang tersedia akan dipaparkan di sini.</translation> <translation id="3202131003361292969">Laluan</translation> <translation id="3202173864863109533">Audio bagi tab ini sedang diredam.</translation> +<translation id="3202218848974251205">Kotak Pasir Privasi</translation> <translation id="3208321278970793882">Apl</translation> <translation id="3208584281581115441">Semak sekarang</translation> <translation id="3208703785962634733">Tidak disahkan</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Untuk membolehkan akaun anda mengakses Gedung Google Play, sila sahkan dengan Pembekal Pengenalan anda.</translation> <translation id="3462311546193741693">Mengelog anda keluar daripada kebanyakan tapak. Anda akan kekal dilog masuk ke Akaun Google supaya data tersegerak anda dapat dikosongkan.</translation> <translation id="3462413494201477527">Batalkan penetapan akaun?</translation> +<translation id="3464145797867108663">Tambah profil kerja</translation> <translation id="346431825526753">Ini ialah akaun untuk kanak-kanak yang diurus oleh <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Label</translation> <translation id="3468999815377931311">Telefon Android</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Tawarkan ciri baharu apabila tersedia</translation> <translation id="3602290021589620013">Pratonton</translation> <translation id="3603622770190368340">Dapatkan sijil rangkaian</translation> +<translation id="3604193429970465812">Akaun sekunder</translation> <translation id="3604713164406837697">Tukar kertas dinding</translation> <translation id="3605780360466892872">Buttondown</translation> <translation id="3608576286259426129">Pratonton imej pengguna</translation> @@ -2606,6 +2613,7 @@ Adakah anda ingin memulakan <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Tidak dapat membuat pintasan</translation> +<translation id="3943494825379372497">Pulihkan apl & halaman?</translation> <translation id="3943582379552582368">&Kembali</translation> <translation id="3943857333388298514">Tampal</translation> <translation id="3948116654032448504">&Cari Imej di <ph name="SEARCH_ENGINE" /></translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">Sambungan ini tidak perlu melihat dan menukar maklumat di tapak ini.</translation> <translation id="4046123991198612571">Lagu seterusnya</translation> <translation id="4047726037116394521">Layari laman utama</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kenalan tidak tersedia. Untuk menggunakan Kongsi Berdekatan dengan mereka, tambahkan alamat e-mel yang dikaitkan dengan Akaun Google mereka pada kenalan anda.}other{# kenalan tidak tersedia. Untuk menggunakan Kongsi Berdekatan dengan mereka, tambahkan alamat e-mel yang dikaitkan dengan Akaun Google mereka pada kenalan anda.}}</translation> <translation id="4050225813016893843">Kaedah pengesahan</translation> <translation id="4052120076834320548">Sangat Kecil</translation> <translation id="4056908315660577142">Anda telah mencapai had masa yang ditetapkan oleh ibu/bapa anda untuk apl Chrome <ph name="APP_NAME" />. Anda boleh menggunakan apl tersebut selama <ph name="TIME_LIMIT" /> esok.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Port</translation> <translation id="4647090755847581616">&Tutup Tab</translation> <translation id="4647283074445570750">Langkah <ph name="CURRENT_STEP" /> daripada <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Mulakan apl apabila anda log masuk ke tablet anda}computer{Mulakan apl apabila anda log masuk ke komputer anda}other{Mulakan apl apabila anda log masuk ke peranti anda}}</translation> <translation id="4647697156028544508">Sila masukkan PIN untuk "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Kebenaran tidak mencukupi</translation> <translation id="4648499713050786492">Sila buka kunci profil anda sebelum menambahkan seseorang.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Kelihatan seperti <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Lalai)</translation> <translation id="4864369630010738180">Sedang log masuk...</translation> <translation id="4864805589453749318">Pilih ibu/bapa yang memberikan kebenaran untuk menambah akaun sekolah.</translation> +<translation id="4866265760644917470">Profil telah berjaya ditambahkan.</translation> <translation id="486635084936119914">Buka jenis fail tertentu secara automatik selepas memuat turun</translation> <translation id="48704129375571883">Tambah ciri tambahan</translation> <translation id="4870758487381879312">Masukkan kata laluan yang disediakan oleh pentadbir untuk mendapatkan maklumat konfigurasi</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Berjaya menukar kata laluan yang terjejas. Anda mempunyai # lagi kata laluan yang terjejas. Chrome mengesyorkan agar anda menyemak kata laluan ini sekarang.}other{Berjaya menukar kata laluan yang terjejas. Anda mempunyai # lagi kata laluan yang terjejas. Chrome mengesyorkan agar anda menyemak kata laluan ini sekarang.}}</translation> <translation id="5207949376430453814">Serlahkan karet teks</translation> <translation id="5209320130288484488">Tiada peranti ditemui</translation> +<translation id="5209572028385096813">Pengguna ini diurus oleh Family Link</translation> <translation id="5210365745912300556">Tutup tab</translation> <translation id="5213481667492808996">Perkhidmatan data '<ph name="NAME" />' anda sedia untuk digunakan</translation> <translation id="5213891612754844763">Tunjukkan tetapan proksi</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Bahasa</translation> <translation id="5302932258331363306">Tunjukkan Penggantian</translation> <translation id="5304276686222516262">Tidak dapat memuat turun senarai kenalan. Sila semak sambungan rangkaian anda atau <a href="#" id="tryAgainLink">cuba lagi</a>.</translation> +<translation id="5305145881844743843">Akaun ini diurus oleh <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Tiada yang dipasang</translation> <translation id="5307030433605830021">Sumber tidak disokong</translation> <translation id="5308380583665731573">Sambung</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Simpan</translation> <translation id="5319359161174645648">Google mengesyorkan Chrome</translation> <translation id="5320112320661303273">Nampaknya anda telah pun menyediakan Assistant pada peranti lain. Dapatkan pelbagai lagi manfaat daripada Assistant anda dengan menghidupkan tetapan berikut.</translation> +<translation id="5320135788267874712">Nama peranti baharu</translation> <translation id="532247166573571973">Pelayan mungkin tidak dapat dihubungi. Cuba sebentar lagi.</translation> <translation id="5324300749339591280">Senarai apl</translation> <translation id="5324780743567488672">Tetapkan zon waktu secara automatik menggunakan lokasi anda</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Gunakan pemesejan yang lebih senyap (disyorkan)</translation> <translation id="574104302965107104">Pencerminan paparan</translation> <translation id="574209121243317957">Nada</translation> +<translation id="5742505912938664543">Apabila anda menambah akaun sekunder di sini, anda boleh menyemak imbas web, memuat turun apl, menyemak Gmail dan menggunakan perkhidmatan Google lain dengan akaun itu.</translation> <translation id="5746169159649715125">Simpan sebagai PDF</translation> <translation id="5747552184818312860">Tamat tempoh</translation> <translation id="5747785204778348146">Pembangun - tidak stabil</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Ruang</translation> <translation id="6130692320435119637">Tambah Wi-Fi</translation> <translation id="6136114942382973861">Tutup bar muat turun</translation> +<translation id="6136287496450963112">Kunci keselamatan anda tidak dilindungi dengan PIN. Untuk mengurus cap jari, buat PIN dahulu.</translation> <translation id="6137767437444130246">Sijil pengguna</translation> <translation id="6138680304137685902">Tandatangan X9.62 ECDSA dengan SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, tiada rangkaian</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Bantu kami mempertingkat ciri dan prestasi OS Chrome</translation> <translation id="6331818708794917058">Tapak boleh meminta untuk menyambung kepada peranti MIDI</translation> <translation id="6333064448949140209">Fail akan dihantar kepada Google untuk dinyahpepijat</translation> +<translation id="6334444530352320327">Tetapan apl dan OS anda akan disegerakkan pada semua Chromebook yang anda gunakan untuk log masuk dengan akaun ini.<ph name="LINK_BEGIN" />Tetapan Penyegerakan<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Semua tapak boleh memaparkan sebarang iklan kepada anda</translation> <translation id="6339668969738228384">Buat profil baharu untuk <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Tidak dapat menyambung ke pelayan. Sila semak sambungan rangkaian anda dan cuba lagi. Sekiranya masalah ini berterusan, mulakan semula Chromebook anda.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Berita</translation> <translation id="6709357832553498500">Sambung menggunakan <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Sebelumnya</translation> +<translation id="6713233729292711163">Tambah Profil Kerja</translation> <translation id="6715803357256707211">Ralat telah berlaku semasa pemasangan aplikasi Linux anda. Klik pemberitahuan untuk mendapatkan butiran.</translation> <translation id="671619610707606484">Tindakan ini akan mengosongkan <ph name="TOTAL_USAGE" /> daripada data yang disimpan oleh tapak</translation> <translation id="671928215901716392">Kunci skrin</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Mengosongkan sejarah dan autoselesai dalam bar alamat. Akaun Google anda mungkin mempunyai sejarah penyemakan imbas dalam bentuk lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Mod Pembangun</translation> <translation id="7121728544325372695">Sengkang Pintar</translation> +<translation id="7122353087820324370">Tetapan apl dan OS tidak disegerakkan ke akaun sekunder.</translation> <translation id="7123030151043029868">Dibenarkan untuk memuat turun berbilang fail secara automatik</translation> <translation id="7123360114020465152">Tidak disokong lagi</translation> <translation id="7125148293026877011">Padamkan Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Buka folder muat turun</translation> <translation id="7506093026325926984">Kata laluan ini akan disimpan pada peranti ini</translation> <translation id="7506130076368211615">Sediakan rangkaian baharu</translation> +<translation id="7506242536428928412">Untuk menggunakan kunci keselamatan baharu anda, tetapkan PIN baharu</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> anda berjaya didaftarkan untuk pengurusan perusahaan.</translation> <translation id="7507207699631365376">Lihat <ph name="BEGIN_LINK" />dasar privasi<ph name="END_LINK" /> penyedia ini</translation> <translation id="7507930499305566459">Status Pembalas Sijil</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Tidak dapat menetapkan semula kunci keselamatan ini. Ralat <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Peningkatan Crostini</translation> <translation id="7696063401938172191">Pada '<ph name="PHONE_NAME" />' anda:</translation> +<translation id="7697166915480294040">Butiran disembunyikan semasa anda berkongsi skrin anda</translation> <translation id="7697598343108519171">Gunakan kamera untuk mengimbas kod QR</translation> <translation id="7699968112832915395">Tidak dapat menambahkan akaun</translation> <translation id="7701040980221191251">Tiada</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Seragam</translation> <translation id="8186609076106987817">Pelayan tidak dapat mencari fail.</translation> <translation id="8188389033983459049">Semak tetapan peranti anda dan hidupkannya untuk meneruskan</translation> +<translation id="8189306097519446565">Akaun sekolah</translation> +<translation id="8189750580333936930">Kotak Pasir Privasi</translation> <translation id="8190193592390505034">Disambungkan ke <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Uruskan apl, sambungan dan tema anda</translation> <translation id="8195027750202970175">Saiz pada cakera</translation> @@ -6901,6 +6922,7 @@ <translation id="8986362086234534611">Lupa</translation> <translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation> <translation id="8987927404178983737">Bulan</translation> +<translation id="8989823300731803443">Sambung semula dari tempat anda berhenti.</translation> <translation id="8990209962746788689">Tidak dapat membuat kod QR</translation> <translation id="8991520179165052608">Tapak boleh menggunakan mikrofon anda</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 item}other{# item}}</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index bb3e6ea3..9bd3749c 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">ကွန်ရက် မရှိပါ</translation> <translation id="1056898198331236512">သတိပေးချက်</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{သင့်ပင်နံပါတ်အသစ်ကို ထည့်ပါ။ ပင်နံပါတ်တစ်ခုသည် အနည်းဆုံး အက္ခရာတစ်လုံး ရှိရမည်ဖြစ်ပြီး စာလုံးများ၊ ဂဏန်းများနှင့် အခြားအက္ခရာများ ပါဝင်နိုင်သည်။}other{သင့်ပင်နံပါတ်အသစ်ကို ထည့်ပါ။ ပင်နံပါတ်တစ်ခုသည် အနည်းဆုံး အက္ခရာ # လုံး ရှိရမည်ဖြစ်ပြီး စာလုံးများ၊ ဂဏန်းများနှင့် အခြားအက္ခရာများ ပါဝင်နိုင်သည်။}}</translation> <translation id="1059944192885972544">'<ph name="SEARCH_TEXT" />' အတွက် တဘ် <ph name="NUM" /> ခု တွေ့သည်</translation> <translation id="1060292118287751956">ဖန်သားပြင်အပ်ဒိတ်လုပ်သည့် ကြိမ်နှုန်းကို သတ်မှတ်ပေးသည်</translation> <translation id="1061904396131502319">ခေတ္တနားချိန် ရောက်တော့မည်</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">စာလုံးတစ်လုံး ရိုက်ရန်</translation> <translation id="168991973552362966">အနီးတဝိုက်ရှိ ပုံနှိပ်စက်ကို ထည့်ရန်</translation> <translation id="1689945336726856614">&URL ကို မိတ္တူကူးခြင်း</translation> +<translation id="1690248886740053041">မိုဘိုင်းကွန်ရက်သို့ ချိတ်ဆက်၍မရပါ။ နည်းပညာအကူအညီအတွက် သင့်ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ပါ။</translation> <translation id="1692115862433274081">အခြားအကောင့်ကို သုံးရန်</translation> <translation id="1692118695553449118">စင့်က်ကို ဖွင့်ထား</translation> <translation id="1692210323591458290">ခရမ်းရင့်</translation> +<translation id="169279809881363536">ပရိုဖိုင်များ ရှာမတွေ့ပါ။ ကွန်ရက်အသစ် စနစ်ထည့်သွင်းရန် စက်ကင်မရာကိုသုံး၍ QR ကုဒ်ကို စကင်ဖတ်ပါ (သို့) သင်၏ဝန်ဆောင်မှုပေးသူက ပို့ထားသည့် စသုံးရန်ကုဒ်ကို ထည့်ပါ။</translation> <translation id="1697150536837697295">အနုပညာ</translation> <translation id="1697686431566694143">ဖိုင်တည်းဖြတ်ရန်</translation> <translation id="1698122934742150150">လက်ရှိ လျှို့ဝှက်သုံး သတ်မှတ်ချိန်သာ</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">စာရင်းထဲမှ ဖယ်ပစ်ရန်</translation> <translation id="2770690685823456775">သင့်စကားဝှက်များကို အခြားအကန့်သို့ တင်ပို့ပါ</translation> <translation id="2770929488047004208">မော်နီတာ ပုံရိပ်ပြတ်သားကိန်း</translation> +<translation id="2770954829020464827">သင်၏ဖန်သားပြင်ကို မျှဝေနေစဉ် အသေးစိတ်ကို ဖျောက်ထားသည်</translation> <translation id="2771268254788431918">မိုဘိုင်းဒေတာကို စဖွင့် အသုံးပြုလိုက်ခြင်း</translation> <translation id="2771816809568414714">ဒိန်ခဲ</translation> <translation id="2772936498786524345">အတို့ထောင်လုပ်ခြင်း</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">အသုံးပြုနိုင်သော USB စက်ပစ္စည်းများကို ဤနေရာတွင် တွေ့ရပါမည်။</translation> <translation id="3202131003361292969">လမ်းကြောင်း</translation> <translation id="3202173864863109533">ဤ တဘ်၏ အသံကို ပိတ်ထား၏။</translation> +<translation id="3202218848974251205">ကိုယ်ရေးလုံခြုံမှု သဲဖြည့်ပုံး</translation> <translation id="3208321278970793882">အက်ပ်</translation> <translation id="3208584281581115441">ယခု စစ်ကြည့်ရန်</translation> <translation id="3208703785962634733">အတည်မပြုသေး</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">သင့်အကောင့်ဖြင့် Google Play စတိုးကို အသုံးပြုခြင်းကို ဖွင့်ရန် သင်၏ အထောက်အထား ဝန်ဆောင်မှုပေးသူဖြင့် အထောက်အထားစိစစ်ပါ။</translation> <translation id="3462311546193741693">ဝဘ်ဆိုက်အများစုမှနေ၍ ထွက်လိုက်ပါမည်။ သင့် Google အကောင့်သို့ လက်မှတ်ထိုးဝင်ထားဦးမည်ဖြစ်၍ သင်စင့်ခ်လုပ်ထားသော ဒေတာများကို ရှင်းထုတ်နိုင်ပါသည်။</translation> <translation id="3462413494201477527">အကောင့် ပြင်ဆင်သတ်မှတ်ခြင်းအား ပယ်ဖျက်မည်လား?</translation> +<translation id="3464145797867108663">အလုပ်ပရိုဖိုင်ကို ထည့်ရန်</translation> <translation id="346431825526753">၄င်းသည် <ph name="CUSTODIAN_EMAIL" /> မှ စီမံသော ကလေးများအတွက် အကောင့်တစ်ခုဖြစ်သည်။</translation> <translation id="3468298837301810372">အညွှန်း</translation> <translation id="3468999815377931311">Android ဖုန်း</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">ဝန်ဆောင်မှုအသစ်များ ရရှိပါက ကမ်းလှမ်းပါ</translation> <translation id="3602290021589620013">ကြိုကြည့်ရန်</translation> <translation id="3603622770190368340">ကွန်ရက် အသိမှတ်ပြုလက်မှတ် ရယူမည်</translation> +<translation id="3604193429970465812">အရန်အကောင့်များ</translation> <translation id="3604713164406837697">နောက်ခံပုံ ပြောင်းရန်</translation> <translation id="3605780360466892872">အမည်သစ်</translation> <translation id="3608576286259426129">အသုံးပြုသူ ပုံအစမ်းကြည့်</translation> @@ -2606,6 +2613,7 @@ သင်သည် <ph name="CONTROL_PANEL_APPLET_NAME" />ကို စတင်လိုပါသလား?</translation> <translation id="394183848452296464">ဖြတ်လမ်းလင့်ခ် ပြုလုပ်၍မရပါ</translation> +<translation id="3943494825379372497">အက်ပ်နှင့် စာမျက်နှာများ ပြန်ယူမလား။</translation> <translation id="3943582379552582368">&နောက်သို့</translation> <translation id="3943857333388298514">ကူးဖြည့်ရန်</translation> <translation id="3948116654032448504">ပုံကို <ph name="SEARCH_ENGINE" />ဖြင့် ရှာရန်</translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">ဤနောက်ဆက်တွဲများက ယခုဝဘ်ဆိုက်ပေါ်ရှိ အချက်အလက်များကို ကြည့်ရှုပြီး ပြောင်းလဲရန်မလိုအပ်ပါ။</translation> <translation id="4046123991198612571">နောက်တစ်ပုဒ်</translation> <translation id="4047726037116394521">ပင်မ စာမျက်နှာသို့ သွားရန်</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{အဆက်အသွယ် # ဦးကို ချိတ်ဆက်၍မရပါ။ ၎င်းနှင့် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကိုသုံးရန် ၎င်း၏ Google Account နှင့် ဆက်စပ်သော အီးမေးလ်လိပ်စာကို သင့်အဆက်အသွယ်များသို့ ထည့်ပါ။}other{အဆက်အသွယ် # ဦးကို ချိတ်ဆက်၍မရပါ။ ၎င်းတို့နှင့် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကိုသုံးရန် ၎င်းတို့၏ Google Account များနှင့် ဆက်စပ်သော အီးမေးလ်လိပ်စာများကို သင့်အဆက်အသွယ်များသို့ ထည့်ပါ။}}</translation> <translation id="4050225813016893843">အထောက်အထားစိစစ်ခြင်း နည်းလမ်း</translation> <translation id="4052120076834320548">သေး</translation> <translation id="4056908315660577142"><ph name="APP_NAME" /> Chrome အက်ပ်အတွက် သင့်မိဘကသတ်မှတ်ထားသည့် အချိန်ကန့်သတ်ချက် ပြည့်သွားပါပြီ။ မနက်ဖြန် <ph name="TIME_LIMIT" /> ကြာ အသုံးပြုနိုင်ပါမည်။</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">ပို့တ်များ</translation> <translation id="4647090755847581616">&တဘ် ပိတ်ရန်</translation> <translation id="4647283074445570750">အဆင့် <ph name="TOTAL_STEPS" /> ဆင့် အနက်မှ <ph name="CURRENT_STEP" /></translation> -<translation id="4647420311443994946">{0,select, tablet{သင့်တက်ဘလက်သို့ လက်မှတ်ထိုးဝင်သည့်အခါ အက်ပ်ကိုစတင်ရန်}computer{သင့်ကွန်ပျူတာသို့ လက်မှတ်ထိုးဝင်သည့်အခါ အက်ပ်ကိုစတင်ရန်}other{သင့်စက်သို့ လက်မှတ်ထိုးဝင်သည့်အခါ အက်ပ်ကိုစတင်ရန်}}</translation> <translation id="4647697156028544508">ကျေးဇူးပြု၍ "<ph name="DEVICE_NAME" />" အတွက် ပင်နံပါတ်ရိုက်ထည့်ပါ:</translation> <translation id="4648491805942548247">ခွင့်ပြုချက်များ မလုံလောက်</translation> <translation id="4648499713050786492">လူတစ်ဦးကို ထည့်သွင်းခြင်းခြင်းမပြုမီ သင့်ပရိုဖိုင်ကို လော့ခ်ဖြုတ်ပါ။</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (မူရင်း) ဟု ယူဆရသည်</translation> <translation id="4864369630010738180">လက်မှတ်ထိုးဝင်နေသည်...</translation> <translation id="4864805589453749318">ကျောင်းအကောင့်ထည့်ရန် ခွင့်ပြုချက်ပေးသည့် မိဘကို ရွေးပါ။</translation> +<translation id="4866265760644917470">ပရိုဖိုင်ကို ထည့်ပြီးပြီ။</translation> <translation id="486635084936119914">ဒေါင်းလုဒ်လုပ်ပြီးနောက် အချို့ဖိုင်အမျိုးအစားများကို အလိုအလျောက်ဖွင့်ပါ</translation> <translation id="48704129375571883">နောက်ထပ်ဝန်ဆောင်မှုများ ထည့်ပါ</translation> <translation id="4870758487381879312">စီစဉ်သတ်မှတ်ရေး အချက်အလက် ရယူရန် စီမံခန့်ခွဲသူ ပေးထားသော စကားဝှက် ထည့်ပါ</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{ကျိုးပေါက်ထားသည့် စကားဝှက်ကို ပြောင်းပြီးပါပြီ။ သင့်တွင် ကျိုးပေါက်ထားသည့် စကားဝှက် နောက် # ခု ရှိပါသည်။ ဤစကားဝှက်ကို ယခု စစ်ဆေးရန် Chrome က အကြံပြုပါသည်။}other{ကျိုးပေါက်ထားသည့် စကားဝှက်ကို ပြောင်းပြီးပါပြီ။ သင့်တွင် ကျိုးပေါက်ထားသည့် စကားဝှက် နောက် # ခု ရှိပါသည်။ ဤစကားဝှက်များကို ယခု စစ်ဆေးရန် Chrome က အကြံပြုပါသည်။}}</translation> <translation id="5207949376430453814">စာရိုက်ထည့်ရန်အကွက်ကို မြင်သာထင်သာဖြစ်အောင်ပြုလုပ်ရန်</translation> <translation id="5209320130288484488">ကိရိယာများ မတွေ့ရ</translation> +<translation id="5209572028385096813">ဤအသုံးပြုသူကို Family Link က စီမံသည်</translation> <translation id="5210365745912300556">တဘ် ပိတ်ရန်</translation> <translation id="5213481667492808996">သင်၏ '<ph name="NAME" />' ဒေတာ ဝန်ဆောင်မှုက အသုံးပြုရန် အသင့်ဖြစ်ပါပြီ</translation> <translation id="5213891612754844763">ပရောက်စီ ဆက်တင်များကို ပြရန်</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">ဘာသာစကား</translation> <translation id="5302932258331363306">အစားထိုးခြင်းများကို ပြရန်</translation> <translation id="5304276686222516262">အဆက်အသွယ်စာရင်းကို ဒေါင်းလုဒ်လုပ်၍မရပါ။ သင်၏ ကွန်ရက်ချိတ်ဆက်မှုကို စစ်ဆေးပါ သို့မဟုတ် <a href="#" id="tryAgainLink">ထပ်စမ်းကြည့်ပါ</a>။</translation> +<translation id="5305145881844743843">ဤအကောင့်ကို <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /> က စီမံသည်</translation> <translation id="5305688511332277257">ဘာမှ မသွင်းထား</translation> <translation id="5307030433605830021">ရင်းမြစ်ကို ပံ့ပိုးမထားပါ</translation> <translation id="5308380583665731573">ချိတ်ဆက်ရန်</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">သိမ်းရန်</translation> <translation id="5319359161174645648">Google က Chrome ကို အသုံးပြုရန် အကြံပြုထားပါသည်</translation> <translation id="5320112320661303273">အခြားစက်တစ်ခုတွင် Assistant ကို စနစ်ထည့်သွင်းပြီးပုံရပါသည်။ အောက်ပါဆက်တင်ကို ဖွင့်ခြင်းဖြင့် Assistant ကို အကောင်းဆုံးအသုံးပြုလိုက်ပါ။</translation> +<translation id="5320135788267874712">စက်ပစ္စည်းအသစ်အမည်</translation> <translation id="532247166573571973">ဆာဗာကိုဆက်သွယ်၍မရသေးပါ။ နောက်မှထပ်စမ်းကြည့်ပါ။</translation> <translation id="5324300749339591280">အက်ပ်စာရင်း</translation> <translation id="5324780743567488672">သင့်တည်နေရာကို အသုံးပြု၍ စံတော်ချိန်ကို အလိုအလျောက်သတ်မှတ်မည်</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">ပိုညင်သာသော မက်ဆေ့ဂျ်ပို့ခြင်းကို အသုံးပြုရန် (အကြံပြုထားသည်)</translation> <translation id="574104302965107104">ဖန်သားပြင်ပြသမှု စကရင်ပွားခြင်း</translation> <translation id="574209121243317957">အသံအနိမ့်အမြင့်</translation> +<translation id="5742505912938664543">ဤနေရာတွင် အရန်အကောင့်ထည့်လိုက်ပါက ထိုအကောင့်အသုံးပြု၍ ဝဘ်ဖွင့်ကြည့်ခြင်း၊ အက်ပ်များဒေါင်းလုဒ်လုပ်ခြင်း၊ သင့် Gmail နှင့် အခြား Google ဝန်ဆောင်မှုများ စစ်ဆေးခြင်းတို့ကို ပြုလုပ်နိုင်သည်။</translation> <translation id="5746169159649715125">PDF အဖြစ်သိမ်း</translation> <translation id="5747552184818312860">သက်တမ်းကုန်ဆုံးချိန်</translation> <translation id="5747785204778348146">ပြုစုသူ - မတည်ငြိမ်</translation> @@ -4424,6 +4437,7 @@ <translation id="6129953537138746214">နေရာခြား</translation> <translation id="6130692320435119637">Wi-Fi ထည့်ရန်</translation> <translation id="6136114942382973861">ဒေါင်းလုဒ်ဘား ပိတ်ရန်</translation> +<translation id="6136287496450963112">သင့်လုံခြုံရေးကီးကို ပင်နံပါတ်ဖြင့် ကာကွယ်မထားပါ။ လက်ဗွေများစီမံရန် ဦးစွာ ပင်နံပါတ်တစ်ခု သတ်မှတ်ပါ။</translation> <translation id="6137767437444130246">အသုံးပြုသူ အသိအမှတ်ပြုလက်မှတ်</translation> <translation id="6138680304137685902">SHA-384 ဖြင့် X9.62 ECDSA လက်မှတ်</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />၊ ကွန်ရက်မရှိပါ</translation> @@ -4605,6 +4619,7 @@ <translation id="6331566915566907158">Chrome OS ဝန်ဆောင်မှုနှင့် စွမ်းဆောင်ရည် ပိုကောင်းလာစေရန် ကူညီပါ</translation> <translation id="6331818708794917058">ဝဘ်ဆိုက်များက MIDI ကိရိယာများသို့ ချိတ်ဆက်လိုပါက ခွင့်တောင်းနိုင်သည်</translation> <translation id="6333064448949140209">အမှားရှာဖွေရန် ဖိုင်ကို Google သို့ ပို့လိုက်ပါမည်</translation> +<translation id="6334444530352320327">ဤအကောင့်ဖြင့် လက်မှတ်ထိုးဝင်ထားသော Chromebook များတွင် သင်၏အက်ပ်နှင့် OS ဆက်တင်များကို စင့်ခ်လုပ်ပါမည်။<ph name="LINK_BEGIN" />ဆက်တင်များ စင့်ခ်လုပ်ရန်<ph name="LINK_END" /></translation> <translation id="6338981933082930623">ဝဘ်ဆိုက်အားလုံးက ကြော်ငြာမှန်သမျှကို သင့်အား ပြနိုင်သည်</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> အတွက် ပရိုဖိုင်အသစ် ပြုလုပ်ရန်</translation> <translation id="6340017061976355871">ဆာဗာသို့ ချိတ်ဆက်မရပါ။ သင့်ကွန်ရက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး နောက်တစ်ကြိမ် ထပ်စမ်းကြည့်ပါ။ ပြဿနာဆက်လက်ရှိနေပါက သင်၏ Chromebook ကို ပြန်လည်စတင်ပါ။</translation> @@ -4904,6 +4919,7 @@ <translation id="6709133671862442373">သတင်းများ</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> သုံး၍ ချိတ်ဆက်ပါ</translation> <translation id="6710213216561001401">အရင်</translation> +<translation id="6713233729292711163">အလုပ်ပရိုဖိုင်ကို ထည့်ရန်</translation> <translation id="6715803357256707211">သင်၏ Linux အပလီကေးရှင်းကို ထည့်သွင်းနေစဉ် အမှားအယွင်း ဖြစ်ပေါ်ခဲ့သည်။ အသေးစိတ်အချက်အလက်များအတွက် အကြောင်းကြားချက်များပေါ်တွင် နှိပ်ပါ။</translation> <translation id="671619610707606484">ဤလုပ်ဆောင်ချက်က ဝဘ်ဆိုက်များ သိမ်းထားသည့် ဒေတာ <ph name="TOTAL_USAGE" /> ကို ရှင်းထုတ်လိုက်ပါမည်</translation> <translation id="671928215901716392">သော့ချထားသော မျက်နှာပြင်</translation> @@ -5272,6 +5288,7 @@ <translation id="7121362699166175603">လိပ်စာဘားရှိ မှတ်တမ်းနှင့် အလိုအလျောက်ဖြည့်ပေးခြင်းများကို ဖျက်လိုက်ပါလိမ့်မည်။ သင့် Google အကောင့်က ဖွင့်ကြည့်ထားသောမှတ်တမ်းသည် <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> တွင် အခြားပုံစံများဖြင့် ရှိနေနိုင်ပါသည်။</translation> <translation id="7121438501124788993">တီထွင်သူမုဒ်</translation> <translation id="7121728544325372695">အဆင့်မြင့် တုံးတိုများ</translation> +<translation id="7122353087820324370">အက်ပ်နှင့် OS ဆက်တင်များကို အရန်အကောင့်များသို့ စင့်ခ်မလုပ်ပါ။</translation> <translation id="7123030151043029868">ဖိုင်အများအပြားကို အလိုအလျောက်ဒေါင်းလုဒ်လုပ်ရန် ခွင့်ပြုထားသည်</translation> <translation id="7123360114020465152">ပံ့ပိုးထားခြင်း မရှိတော့ပါ</translation> <translation id="7125148293026877011">Crostini ကို ဖျက်ရန်</translation> @@ -5586,6 +5603,7 @@ <translation id="750509436279396091">ဒေါင်းလုဒ်များ၏ ဖိုလ်ဒါကို ဖွင့်ပေးရန်</translation> <translation id="7506093026325926984">ဤစကားဝှက်ကို ဤစက်တွင်သိမ်းထားပါမည်</translation> <translation id="7506130076368211615">ကွန်ရက်အသစ် စနစ်ထည့်သွင်းရန်</translation> +<translation id="7506242536428928412">သင်၏လုံခြုံရေးကီးအသစ် အသုံးပြုရန် ပင်နံပါတ်အသစ် သတ်မှတ်ပါ</translation> <translation id="7506541170099744506">သင့် <ph name="DEVICE_TYPE" /> ကို လုပ်ငန်းစီမံခန့်ခွဲမှုအတွက် အောင်မြင်စွာ လျှောက်ထားပြီးပါပြီ။</translation> <translation id="7507207699631365376">ဤဝန်ဆောင်မှုပေးသူ၏ <ph name="BEGIN_LINK" />ပုဂ္ဂိုလ်ရေးဆိုင်ရာ မူဝါဒ<ph name="END_LINK" /> ကို ကြည့်ရန်</translation> <translation id="7507930499305566459">အခြေနေ တုံ့ပြန်သူ အသိမှတ်ပြုလက်မှတ်</translation> @@ -5749,6 +5767,7 @@ <translation id="7691077781194517083">ဤလုံခြုံရေးကီးကို ပြင်ဆင်သတ်မှတ်၍ မရပါ။ အမှား <ph name="ERROR_CODE" />။</translation> <translation id="7691698019618282776">Crostini အဆင့်မြှင့်ရန်</translation> <translation id="7696063401938172191">သင့် '<ph name="PHONE_NAME" />' ပေါ်တွင်−</translation> +<translation id="7697166915480294040">သင်၏ဖန်သားပြင်ကို မျှဝေနေစဉ် အသေးစိတ်ကို ဖျောက်ထားသည်</translation> <translation id="7697598343108519171">QR ကုဒ် စကင်ဖတ်ရန် ကင်မရာကို အသုံးပြုပါ</translation> <translation id="7699968112832915395">အကောင့် ထည့်၍မရခြင်း</translation> <translation id="7701040980221191251">မရှိ</translation> @@ -6205,6 +6224,8 @@ <translation id="8184472985242519288">တညီတညာတည်း</translation> <translation id="8186609076106987817">ဆာဗာမှ ဖိုင်ကိုရှာမတွေ့ပါ။</translation> <translation id="8188389033983459049">ဆက်လုပ်ရန် သင့်စက်ပစ္စည်း ဆက်တင်များကို စစ်ဆေးပြီး ဖွင့်ပါ</translation> +<translation id="8189306097519446565">ကျောင်းအကောင့်များ</translation> +<translation id="8189750580333936930">ကိုယ်ရေးလုံခြုံမှု သဲဖြည့်ပုံး</translation> <translation id="8190193592390505034"><ph name="PROVIDER_NAME" />သို့ ချိတ်ဆက်နေ</translation> <translation id="8191230140820435481">သင်၏ အက်ပ်များ၊ တိုးချဲ့မှုများ၊ နှင့် အပြင်အဆင်များကို စီမံကွပ်ကဲရန်</translation> <translation id="8195027750202970175">ဖိုင်အရွယ်အစား</translation> @@ -6896,6 +6917,7 @@ <translation id="8986362086234534611">မေ့ပစ်လိုက်ပါ</translation> <translation id="8986494364107987395">Google ထံသို့ သုံးစွဲမှု စာရင်းအင်းများ နှင့် ပျက်စီးမှု အစီရင်ခံစာများကို အလိုအလျောက် ပို့ပေးရန်</translation> <translation id="8987927404178983737">လ</translation> +<translation id="8989823300731803443">သင်ရပ်ထားခဲ့သည့်နေရာမှ ဆက်လုပ်မည်။</translation> <translation id="8990209962746788689">QR ကုဒ် ဖန်တီး၍မရပါ</translation> <translation id="8991520179165052608">ဝဘ်ဆိုက်က သင့်မိုက်ခရိုဖုန်းကို အသုံးပြုနိုင်သည်</translation> <translation id="8992117551007229513">{COUNT,plural, =1{ဖိုင် 1 ဖိုင်}other{ဖိုင် # ဖိုင်}}</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 0aa65a9..df87d41 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -3170,7 +3170,6 @@ <translation id="4646675363240786305">पोर्टहरू</translation> <translation id="4647090755847581616">ट्याब &बन्द गर्नुहोस्</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> मध्ये <ph name="CURRENT_STEP" /> औँ चरण</translation> -<translation id="4647420311443994946">{0,select, tablet{मैले आफ्नो ट्याब्लेटमा साइन इन गर्दा यो एप खोलियोस्}computer{मैले आफ्नो कम्प्युटरमा साइन इन गर्दा यो एप खोलियोस्}other{मैले आफ्नो यन्त्रमा साइन इन गर्दा यो एप खोलियोस्}}</translation> <translation id="4647697156028544508">कृपया "<ph name="DEVICE_NAME" />" का लागि पिन प्रविष्ट गर्नुहोस्ः</translation> <translation id="4648491805942548247">अपर्याप्त अनुमतिहरू</translation> <translation id="4648499713050786492">कृपया कुनै व्यक्तिलाई थप्नु अघि आफ्नो प्रोफाइललाई अनलक गर्नुहोस्।</translation> @@ -3715,6 +3714,7 @@ <translation id="5317780077021120954">बचत गर्नुहोस्</translation> <translation id="5319359161174645648">Google ले Chrome प्रयोग गर्ने सुझाव दिन्छ</translation> <translation id="5320112320661303273">तपाईंले कुनै अर्को यन्त्रमा सहायक सेटअप गरिसक्नुभएको छ जस्तो देखिन्छ। निम्न सेटिङ अन गरी आफ्नो सहायकबाट अझ बढी फाइदा लिनुहोस्।</translation> +<translation id="5320135788267874712">यन्त्रको नयाँ नाम</translation> <translation id="532247166573571973">सर्भर पहुँचयोग्य नहुन सक्छ। पछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="5324300749339591280">एपको सूची</translation> <translation id="5324780743567488672">तपाईँको स्थान प्रयोग गरेर समय क्षेत्र सेट गर्नुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index b4c238f..3e9d8d73 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Poorten</translation> <translation id="4647090755847581616">&Tabblad sluiten</translation> <translation id="4647283074445570750">Stap <ph name="CURRENT_STEP" /> van <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Start de app als je inlogt op je tablet}computer{Start de app als je inlogt op je computer}other{Start de app als je inlogt op je apparaat}}</translation> <translation id="4647697156028544508">Geef de pincode op voor '<ph name="DEVICE_NAME" />':</translation> <translation id="4648491805942548247">Onvoldoende rechten</translation> <translation id="4648499713050786492">Ontgrendel je profiel voordat je een persoon toevoegt.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Opslaan</translation> <translation id="5319359161174645648">Google beveelt Chrome aan</translation> <translation id="5320112320661303273">Zo te zien heb je de Assistent al ingesteld op een ander apparaat. Haal nog meer uit de Assistent door de volgende instelling in te schakelen.</translation> +<translation id="5320135788267874712">Nieuwe apparaatnaam</translation> <translation id="532247166573571973">De server is mogelijk niet bereikbaar. Probeer het later opnieuw.</translation> <translation id="5324300749339591280">Lijst met apps</translation> <translation id="5324780743567488672">Tijdzone automatisch instellen op basis van je locatie</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 7687157..2a3159c 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Ingen nettverk</translation> <translation id="1056898198331236512">Advarsel</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Skriv inn den nye PIN-koden. PIN-koden må bestå av minst ett tegn og kan inneholde bokstaver, tall og andre tegn.}other{Skriv inn den nye PIN-koden. PIN-koden må bestå av minst # tegn og kan inneholde bokstaver, tall og andre tegn.}}</translation> <translation id="1059944192885972544">Fant <ph name="NUM" /> faner for «<ph name="SEARCH_TEXT" />»</translation> <translation id="1060292118287751956">Bestemmer frekvensen for skjermoppdateringer</translation> <translation id="1061904396131502319">Snart tid for en pause</translation> @@ -632,9 +633,11 @@ <translation id="1688935057616748272">Skriv inn en bokstav</translation> <translation id="168991973552362966">Legg til en skriver i nærheten</translation> <translation id="1689945336726856614">Kopiér &nettadresse</translation> +<translation id="1690248886740053041">Kunne ikke koble til noe mobilnettverk. Kontakt operatøren din om du trenger teknisk støtte.</translation> <translation id="1692115862433274081">Bruk en annen konto</translation> <translation id="1692118695553449118">Synkronisering er slått på.</translation> <translation id="1692210323591458290">Mørk lilla</translation> +<translation id="169279809881363536">Fant ingen profiler. For å konfigurere et nytt nettverk, skann QR-koden med kameraet på enheten, eller skriv inn aktiveringskoden du har fått av operatøren din.</translation> <translation id="1697150536837697295">Kunst</translation> <translation id="1697686431566694143">Rediger filen</translation> <translation id="1698122934742150150">Bare denne inkognitoøkten</translation> @@ -1571,6 +1574,7 @@ <translation id="2770465223704140727">Fjern fra listen</translation> <translation id="2770690685823456775">Eksportér passordene dine til en annen mappe</translation> <translation id="2770929488047004208">Skjermoppløsning</translation> +<translation id="2770954829020464827">Detaljene skjules mens du deler skjermen</translation> <translation id="2771268254788431918">Mobildata er aktivert</translation> <translation id="2771816809568414714">Ost</translation> <translation id="2772936498786524345">Skyggen</translation> @@ -1938,6 +1942,7 @@ <translation id="3201422919974259695">Tilgjengelige USB-enheter vises her.</translation> <translation id="3202131003361292969">Bane</translation> <translation id="3202173864863109533">Lyden er slått av for denne fanen.</translation> +<translation id="3202218848974251205">The Privacy Sandbox</translation> <translation id="3208321278970793882">App</translation> <translation id="3208584281581115441">Sjekk nå</translation> <translation id="3208703785962634733">Ikke bekreftet</translation> @@ -2158,6 +2163,7 @@ <translation id="3459697287128633276">For å få tilgang til Google Play Butikken med kontoen din, bekreft hvem du er, hos identitetsleverandøren din.</translation> <translation id="3462311546193741693">Logger deg av de fleste sider. Du forblir logget inn på Google-kontoen din, så synkroniserte data kan slettes.</translation> <translation id="3462413494201477527">Vil du avbryte kontokonfigurasjonen?</translation> +<translation id="3464145797867108663">Legg til en jobbprofil</translation> <translation id="346431825526753">Dette er en konto for barn, som administreres av <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etikett</translation> <translation id="3468999815377931311">Android-telefon</translation> @@ -2279,6 +2285,7 @@ <translation id="360180734785106144">tilby nye funksjoner etter hvert som de blir tilgjengelige</translation> <translation id="3602290021589620013">Forhåndsvisning</translation> <translation id="3603622770190368340">Hent nettverkssertifikat</translation> +<translation id="3604193429970465812">Sekundærkontoer</translation> <translation id="3604713164406837697">Endre bakgrunn</translation> <translation id="3605780360466892872">Businessmann</translation> <translation id="3608576286259426129">Forhåndsvisning av brukerbilde</translation> @@ -2601,6 +2608,7 @@ <translation id="3941565636838060942">Hvis du vil skjule tilgangen til dette programmet, må du avinstallere det ved hjelp av <ph name="CONTROL_PANEL_APPLET_NAME" /> i kontrollpanelet. Vil du starte <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Kan ikke opprette snarvei</translation> +<translation id="3943494825379372497">Vil du gjenopprette apper og sider?</translation> <translation id="3943582379552582368">Til&bake</translation> <translation id="3943857333388298514">Lim inn</translation> <translation id="3948116654032448504">&Søk etter bilder i <ph name="SEARCH_ENGINE" /></translation> @@ -2686,6 +2694,7 @@ <translation id="4046013316139505482">Disse utvidelsene trenger ikke å se og endre informasjonen på dette nettstedet.</translation> <translation id="4046123991198612571">Neste spor</translation> <translation id="4047726037116394521">Gå til startskjermen</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt er ikke tilgjengelig. For å bruke nærdeling med vedkommende må du legge til e-postadressen som er knyttet til vedkommendes Google-konto, i kontaktene dine.}other{# kontakter er ikke tilgjengelige. For å bruke nærdeling med dem må du legge til e-postadressene som er knyttet til Google-kontoene deres, i kontaktene dine.}}</translation> <translation id="4050225813016893843">Autentiseringsmetode</translation> <translation id="4052120076834320548">Bitteliten</translation> <translation id="4056908315660577142">Du har nådd tidsgrensen som forelderen din har angitt for Chrome-appen <ph name="APP_NAME" />. Du kan bruke den i <ph name="TIME_LIMIT" /> i morgen.</translation> @@ -3169,7 +3178,6 @@ <translation id="4646675363240786305">Porter</translation> <translation id="4647090755847581616">&Lukk fane</translation> <translation id="4647283074445570750">Trinn <ph name="CURRENT_STEP" /> av <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Start appen når du logger på nettbrettet}computer{Start appen når du logger på datamaskinen}other{Start appen når du logger på enheten}}</translation> <translation id="4647697156028544508">Skriv inn PIN-koden for «<ph name="DEVICE_NAME" />»:</translation> <translation id="4648491805942548247">Utilstrekkelige tillatelser</translation> <translation id="4648499713050786492">Du må låse opp profilen din før du kan legge til en person.</translation> @@ -3333,6 +3341,7 @@ <translation id="4863769717153320198">Ser ut som <ph name="WIDTH" /> x <ph name="HEIGHT" /> (standard)</translation> <translation id="4864369630010738180">Logger på ...</translation> <translation id="4864805589453749318">Velg den forelderen som gir tillatelse til å legge til en skolekonto.</translation> +<translation id="4866265760644917470">Profilen er lagt til.</translation> <translation id="486635084936119914">Åpne visse filtyper automatisk når de lastes ned</translation> <translation id="48704129375571883">Legg til flere funksjoner</translation> <translation id="4870758487381879312">Skriv inn passordet du fikk fra administratoren, for å få informasjon om oppsett</translation> @@ -3616,6 +3625,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Passordet som var utsatt for sikkerhetsbrudd, ble endret. Du har # passord til som er utsatt for sikkerhetsbrudd. Chrome anbefaler at du sjekker dette passordet nå.}other{Passordet som var utsatt for sikkerhetsbrudd, ble endret. Du har # passord til som er utsatt for sikkerhetsbrudd. Chrome anbefaler at du sjekker disse passordene nå.}}</translation> <translation id="5207949376430453814">Fremhev tekstinnsettingspunktet</translation> <translation id="5209320130288484488">Finner ingen enheter</translation> +<translation id="5209572028385096813">Denne brukeren administreres av Family Link</translation> <translation id="5210365745912300556">Lukk fanen</translation> <translation id="5213481667492808996">Datatjenesten «<ph name="NAME" />» er klar for bruk</translation> <translation id="5213891612754844763">Vis innstillingene for proxy-tjener</translation> @@ -3701,6 +3711,7 @@ <translation id="5302048478445481009">Språk</translation> <translation id="5302932258331363306">Vis erstatninger</translation> <translation id="5304276686222516262">Kunne ikke laste ned kontaktlisten. Sjekk nettverkstilkoblingen, eller <a href="#" id="tryAgainLink">prøv på nytt</a>.</translation> +<translation id="5305145881844743843">Denne kontoen administreres av <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Ingen installert</translation> <translation id="5307030433605830021">Kilden støttes ikke</translation> <translation id="5308380583665731573">Koble til</translation> @@ -3714,6 +3725,7 @@ <translation id="5317780077021120954">Lagre</translation> <translation id="5319359161174645648">Google anbefaler Chrome</translation> <translation id="5320112320661303273">Ser ut til at du allerede har konfigurert assistenten på en annen enhet. Få enda mer ut av assistenten ved å slå på denne innstillingen.</translation> +<translation id="5320135788267874712">Nytt enhetsnavn</translation> <translation id="532247166573571973">Det kan hende tjeneren ikke er tilgjengelig. Prøv igjen senere.</translation> <translation id="5324300749339591280">App-liste</translation> <translation id="5324780743567488672">Angi tidssonen automatisk ved hjelp av posisjonen din</translation> @@ -4081,6 +4093,7 @@ <translation id="5740820643029013514">Bruk stillere meldinger (anbefales)</translation> <translation id="574104302965107104">Skjermspeiling</translation> <translation id="574209121243317957">Stemmeleie</translation> +<translation id="5742505912938664543">Når du legger til en sekundærkonto her, kan du bruke den til å surfe på nettet, laste ned apper og sjekke Gmail og andre Google-tjenester.</translation> <translation id="5746169159649715125">Lagre som PDF</translation> <translation id="5747552184818312860">Utløper</translation> <translation id="5747785204778348146">Utvikler – ustabil</translation> @@ -4421,6 +4434,7 @@ <translation id="6129953537138746214">Mellomrom</translation> <translation id="6130692320435119637">Legg til Wi-Fi</translation> <translation id="6136114942382973861">Lukk nedlastingsraden</translation> +<translation id="6136287496450963112">Sikkerhetsnøkkelen din er ikke beskyttet med PIN-kode. For å administrere fingeravtrykk må du opprette en PIN-kode først.</translation> <translation id="6137767437444130246">Brukersertifikat</translation> <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" /> – ingen nettverk</translation> @@ -4601,6 +4615,7 @@ <translation id="6331566915566907158">Bidra til å gjøre funksjonene og ytelsen til Chrome OS bedre</translation> <translation id="6331818708794917058">Nettsteder kan be om å få koble til MIDI-enheter</translation> <translation id="6333064448949140209">Filen sendes til Google for feilsøking</translation> +<translation id="6334444530352320327">Appene og OS-innstillingene dine synkroniseres på Chromebook-enheter der du er pålogget med denne kontoen.<ph name="LINK_BEGIN" />Innstillinger for synkronisering<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Alle nettsteder kan vise deg alle slags annonser</translation> <translation id="6339668969738228384">Opprett en ny profil for <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Kunne ikke koble til tjeneren. Kontrollér nettverkstilkoblingen din, og prøv igjen. Start Chromebooken på nytt hvis problemet vedvarer.</translation> @@ -4902,6 +4917,7 @@ <translation id="6709133671862442373">Nyheter</translation> <translation id="6709357832553498500">Koble til med <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Forrige</translation> +<translation id="6713233729292711163">Legg til en jobbprofil</translation> <translation id="6715803357256707211">Det oppsto en feil under installasjon av Linux-programmet. Klikk på varselet for mer informasjon.</translation> <translation id="671619610707606484">Dette sletter <ph name="TOTAL_USAGE" /> data som er lagret av nettsteder</translation> <translation id="671928215901716392">Lås skjerm</translation> @@ -5270,6 +5286,7 @@ <translation id="7121362699166175603">Tømmer loggen og fjerner autofullføringer i adressefeltet. Det kan hende Google-kontoen din har andre typer nettleserlogger på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Utviklermodus</translation> <translation id="7121728544325372695">Smarte tankestreker</translation> +<translation id="7122353087820324370">Apper og OS-innstillinger synkroniseres ikke med sekundærkontoer.</translation> <translation id="7123030151043029868">Nettsteder som har lov til å laste ned flere filer automatisk</translation> <translation id="7123360114020465152">Støttes ikke lenger</translation> <translation id="7125148293026877011">Slett Crostini</translation> @@ -5584,6 +5601,7 @@ <translation id="750509436279396091">Åpne nedlastingsmappen</translation> <translation id="7506093026325926984">Dette passordet blir lagret på denne enheten</translation> <translation id="7506130076368211615">Konfigurer nytt nettverk</translation> +<translation id="7506242536428928412">For å bruke den nye sikkerhetsnøkkelen, angi en ny PIN-kode</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" />-enheten din er nå registrert for bedriftsadministrering.</translation> <translation id="7507207699631365376">Se denne leverandørens <ph name="BEGIN_LINK" />personvernerklæring<ph name="END_LINK" /></translation> <translation id="7507930499305566459">Sertifikat for statussvar</translation> @@ -5747,6 +5765,7 @@ <translation id="7691077781194517083">Kan ikke tilbakestille denne sikkerhetsnøkkelen. Feil <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Crostini-oppgradering</translation> <translation id="7696063401938172191">På «<ph name="PHONE_NAME" />»:</translation> +<translation id="7697166915480294040">Detaljene skjules mens du deler skjermen</translation> <translation id="7697598343108519171">Bruk kameraet for å skanne QR-koden</translation> <translation id="7699968112832915395">Kan ikke legge til kontoen</translation> <translation id="7701040980221191251">Ingen</translation> @@ -6204,6 +6223,8 @@ <translation id="8184472985242519288">Helhetlig</translation> <translation id="8186609076106987817">Tjeneren fant ikke filen.</translation> <translation id="8188389033983459049">Sjekk enhetsinnstillingene dine og slå det på for å fortsette</translation> +<translation id="8189306097519446565">Skolekontoer</translation> +<translation id="8189750580333936930">Privacy Sandbox</translation> <translation id="8190193592390505034">Kobler til <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Administrering av programmer, utvidelser og temaer</translation> <translation id="8195027750202970175">Lagringsstørrelse</translation> @@ -6895,6 +6916,7 @@ <translation id="8986362086234534611">Glem</translation> <translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation> <translation id="8987927404178983737">Måned</translation> +<translation id="8989823300731803443">Fortsett der du slapp.</translation> <translation id="8990209962746788689">Kan ikke opprette QR-kode</translation> <translation id="8991520179165052608">Nettstedet kan bruke mikrofonen din</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 element}other{# elementer}}</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 8402628..e1cf4a8 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -3165,7 +3165,6 @@ <translation id="4646675363240786305">ପୋର୍ଟଗୁଡ଼ିକ</translation> <translation id="4647090755847581616">&ଟାବ୍ ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" />ର <ph name="CURRENT_STEP" /> ଷ୍ଟେପ୍</translation> -<translation id="4647420311443994946">{0,select, tablet{ଆପଣ ଆପଣଙ୍କ ଟାବଲେଟରେ ସାଇନ୍ ଇନ୍ କରିବା ବେଳେ ଆପ୍ ଆରମ୍ଭ କରନ୍ତୁ}computer{ଆପଣ ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ ସାଇନ୍ ଇନ୍ କରିବା ବେଳେ ଆପ୍ ଆରମ୍ଭ କରନ୍ତୁ}other{ଆପଣ ଆପଣଙ୍କ ଡିଭାଇସରେ ସାଇନ୍ ଇନ୍ କରିବା ବେଳେ ଆପ୍ ଆରମ୍ଭ କରନ୍ତୁ}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" ପାଇଁ ଦୟାକରି ପିନ୍ ଲେଖନ୍ତୁ:</translation> <translation id="4648491805942548247">ପର୍ଯ୍ୟାପ୍ତ ଅନୁମତି ନାହିଁ</translation> <translation id="4648499713050786492">ଜଣେ ବ୍ୟକ୍ତିଙ୍କୁ ଯୋଗ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କର ପ୍ରୋଫାଇଲ୍ ଅନ୍ଲକ୍ କରନ୍ତୁ।</translation> @@ -3710,6 +3709,7 @@ <translation id="5317780077021120954">ସଞ୍ଚୟ</translation> <translation id="5319359161174645648">Google Chromeକୁ ସୁପାରିଶ କରୁଛି</translation> <translation id="5320112320661303273">ଏପରି ଜଣାପଡୁଛି ଯେ, ଆପଣ ପୂର୍ବରୁ ଏକ ଭିନ୍ନ ଡିଭାଇସରେ Assistant ସେଟ୍ ଅପ୍ କରିସାରିଛନ୍ତି। ନିମ୍ନୋକ୍ତ ସେଟିଂକୁ ଚାଲୁ କରି ଆପଣଙ୍କ Assistantରୁ ଆହୁରି ଅଧିକ ସୁବିଧା ପାଆନ୍ତୁ।</translation> +<translation id="5320135788267874712">ନୂଆ ଡିଭାଇସର ନାମ</translation> <translation id="532247166573571973">ସର୍ଭର୍ ହୁଏତ ପହଞ୍ଚଯୋଗ୍ୟ ନୁହେଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="5324300749339591280">ଆପଗୁଡ଼ିକର ତାଲିକା</translation> <translation id="5324780743567488672">ଆପଣଙ୍କର ଲୋକେସନ୍ ବ୍ୟବହାର କରି ସ୍ୱଚାଳିତ ଭାବେ ସମୟ କ୍ଷେତ୍ର ସେଟ୍ କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index a15607c..3ed574b 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">ਪੋਰਟ</translation> <translation id="4647090755847581616">&ਟੈਬ ਬੰਦ ਕਰੋ</translation> <translation id="4647283074445570750"><ph name="TOTAL_STEPS" /> ਵਿੱਚੋਂ <ph name="CURRENT_STEP" /> ਪੜਾਅ</translation> -<translation id="4647420311443994946">{0,select, tablet{ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ ਟੈਬਲੈੱਟ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਦੇ ਹੋ ਤਾਂ ਐਪ ਸ਼ੁਰੂ ਕਰੋ}computer{ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ ਕੰਪਿਊਟਰ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਦੇ ਹੋ ਤਾਂ ਐਪ ਸ਼ੁਰੂ ਕਰੋ}other{ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਦੇ ਹੋ ਤਾਂ ਐਪ ਸ਼ੁਰੂ ਕਰੋ}}</translation> <translation id="4647697156028544508">ਕਿਰਪਾ ਕਰਕੇ "<ph name="DEVICE_NAME" />" ਲਈ PIN ਦਰਜ ਕਰੋ:</translation> <translation id="4648491805942548247">ਨਾਕਾਫ਼ੀ ਅਨੁਮਤੀਆਂ</translation> <translation id="4648499713050786492">ਕਿਰਪਾ ਕਰਕੇ ਕਿਸੇ ਵਿਅਕਤੀ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਅਣਲਾਕ ਕਰੋ।</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">ਰੱਖਿਅਤ ਕਰੋ</translation> <translation id="5319359161174645648">Google, Chrome ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕਰਦਾ ਹੈ</translation> <translation id="5320112320661303273">ਇੰਝ ਲੱਗਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ 'ਤੇ Assistant ਦਾ ਸੈੱਟਅੱਪ ਕਰ ਲਿਆ ਹੈ। ਅੱਗੇ ਦਿੱਤੀ ਗਈ ਸੈਟਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰਕੇ ਆਪਣੀ Assistant ਦਾ ਹੋਰ ਜ਼ਿਆਦਾ ਲਾਹਾ ਲਓ।</translation> +<translation id="5320135788267874712">ਡੀਵਾਈਸ ਦਾ ਨਵਾਂ ਨਾਮ</translation> <translation id="532247166573571973">ਸਰਵਰ ਸ਼ਾਇਦ ਪਹੁੰਚਯੋਗ ਨਹੀਂ ਹੈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="5324300749339591280">ਐਪ ਸੂਚੀ</translation> <translation id="5324780743567488672">ਆਪਣਾ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਵਰਤਦੇ ਹੋਏ ਆਟੋਮੈਟਿਕਲੀ ਸਮਾਂ ਜ਼ੋਨ ਸੈੱਟ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 7681f2e4..ac42d25 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">Porty</translation> <translation id="4647090755847581616">&Zamknij kartę</translation> <translation id="4647283074445570750">Krok <ph name="CURRENT_STEP" /> z <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Uruchom aplikację po zalogowaniu się na tablecie}computer{Uruchom aplikację po zalogowaniu się na komputerze}other{Uruchom aplikację po zalogowaniu się na urządzeniu}}</translation> <translation id="4647697156028544508">Wpisz PIN urządzenia „<ph name="DEVICE_NAME" />”:</translation> <translation id="4648491805942548247">Niewystarczające uprawnienia</translation> <translation id="4648499713050786492">Aby dodać osobę, odblokuj swój profil.</translation> @@ -3717,6 +3716,7 @@ <translation id="5317780077021120954">Zapisz</translation> <translation id="5319359161174645648">Google zaleca Chrome</translation> <translation id="5320112320661303273">Wygląda na to, że masz już skonfigurowanego Asystenta na innym urządzeniu. Wykorzystaj go jeszcze lepiej, włączając poniższe ustawienie.</translation> +<translation id="5320135788267874712">Nowa nazwa urządzenia</translation> <translation id="532247166573571973">Serwer może być niedostępny. Spróbuj ponownie później.</translation> <translation id="5324300749339591280">Lista aplikacji</translation> <translation id="5324780743567488672">Ustaw strefę czasową automatycznie na podstawie lokalizacji</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 80b2ea8c..bb5d6cc 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -3176,7 +3176,6 @@ <translation id="4646675363240786305">Portas</translation> <translation id="4647090755847581616">&Fechar guia</translation> <translation id="4647283074445570750">Etapa <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Iniciar o app ao fazer login no tablet}computer{Iniciar o app ao fazer login no computador}other{Iniciar o app ao fazer login no dispositivo}}</translation> <translation id="4647697156028544508">Insira o PIN para "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permissões insuficientes</translation> <translation id="4648499713050786492">Desbloqueie seu perfil antes de adicionar uma pessoa.</translation> @@ -3721,6 +3720,7 @@ <translation id="5317780077021120954">Salvar</translation> <translation id="5319359161174645648">O Google recomenda o Chrome</translation> <translation id="5320112320661303273">Parece que você já configurou o Assistente em outro dispositivo. Ative a configuração a seguir para aproveitar ainda mais seu Assistente.</translation> +<translation id="5320135788267874712">Novo nome do dispositivo</translation> <translation id="532247166573571973">É possível que o servidor esteja inacessível. Tente novamente mais tarde.</translation> <translation id="5324300749339591280">Lista de apps</translation> <translation id="5324780743567488672">Define o fuso horário automaticamente utilizando seu local</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 276cc9cb..f92c38a 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nenhuma rede</translation> <translation id="1056898198331236512">Aviso</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Introduza o novo PIN. Um PIN tem de ter, pelo menos, um caráter e pode incluir letras, números e outros carateres.}other{Introduza o novo PIN. Um PIN tem de ter pelo menos # carateres e pode incluir letras, números e outros carateres.}}</translation> <translation id="1059944192885972544"><ph name="NUM" /> separadores encontrados para "<ph name="SEARCH_TEXT" />"</translation> <translation id="1060292118287751956">Determina a frequência de atualização do ecrã</translation> <translation id="1061904396131502319">Está quase na altura de fazer uma pausa</translation> @@ -635,9 +636,11 @@ <translation id="1688935057616748272">Introduza uma letra.</translation> <translation id="168991973552362966">Adicionar uma impressora próxima</translation> <translation id="1689945336726856614">Copiar &URL</translation> +<translation id="1690248886740053041">Não é possível estabelecer ligação a uma rede móvel. Para obter suporte técnico, contacte o seu operador.</translation> <translation id="1692115862433274081">Utilizar outra conta</translation> <translation id="1692118695553449118">A sincronização está ativada</translation> <translation id="1692210323591458290">Roxo escuro</translation> +<translation id="169279809881363536">Não foi encontrado qualquer perfil. Para configurar uma nova rede, leia o código QR com a câmara do dispositivo ou introduza o código de ativação fornecido pelo seu operador.</translation> <translation id="1697150536837697295">Arte</translation> <translation id="1697686431566694143">Editar ficheiro</translation> <translation id="1698122934742150150">Apenas para a sessão no modo de navegação anónima atual</translation> @@ -1573,6 +1576,7 @@ <translation id="2770465223704140727">Remover da lista</translation> <translation id="2770690685823456775">Exportar as palavras-passe para outra pasta</translation> <translation id="2770929488047004208">Resolução do monitor</translation> +<translation id="2770954829020464827">Os detalhes estão ocultos durante a partilha do ecrã.</translation> <translation id="2771268254788431918">Dados móveis ativados</translation> <translation id="2771816809568414714">Queijo</translation> <translation id="2772936498786524345">Sorrateiro</translation> @@ -1941,6 +1945,7 @@ <translation id="3201422919974259695">Os dispositivos USB disponíveis são apresentados aqui.</translation> <translation id="3202131003361292969">Caminho</translation> <translation id="3202173864863109533">O som deste separador foi desativado.</translation> +<translation id="3202218848974251205">O isolamento de processos de privacidade</translation> <translation id="3208321278970793882">App</translation> <translation id="3208584281581115441">Verificar agora</translation> <translation id="3208703785962634733">Não confirmado</translation> @@ -2161,6 +2166,7 @@ <translation id="3459697287128633276">Para permitir que a sua conta aceda à Google Play Store, realize a autenticação junto do seu Fornecedor de identidade.</translation> <translation id="3462311546193741693">A sua sessão é terminada na maioria dos sites. Continua com sessão iniciada na sua Conta Google para poder limpar os dados sincronizados.</translation> <translation id="3462413494201477527">Pretende cancelar a configuração da conta?</translation> +<translation id="3464145797867108663">Adicionar perfil de trabalho</translation> <translation id="346431825526753">Esta é uma conta para crianças gerida por <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etiqueta</translation> <translation id="3468999815377931311">Telemóvel Android</translation> @@ -2282,6 +2288,7 @@ <translation id="360180734785106144">Disponibilizar novas funcionalidades à medida que ficam disponíveis</translation> <translation id="3602290021589620013">Pré-visualizar</translation> <translation id="3603622770190368340">Obter certificado de rede</translation> +<translation id="3604193429970465812">Contas secundárias</translation> <translation id="3604713164406837697">Alterar imagem de fundo</translation> <translation id="3605780360466892872">Empresário</translation> <translation id="3608576286259426129">Pré-visualização da imagem do utilizador</translation> @@ -2606,6 +2613,7 @@ Pretende iniciar <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Não é possível criar o atalho.</translation> +<translation id="3943494825379372497">Pretende restaurar apps e páginas?</translation> <translation id="3943582379552582368">&Anterior</translation> <translation id="3943857333388298514">Colar</translation> <translation id="3948116654032448504">Pe&squisar Imagem no <ph name="SEARCH_ENGINE" /></translation> @@ -2691,6 +2699,7 @@ <translation id="4046013316139505482">Estas extensões não precisam de ver nem de alterar informações neste site.</translation> <translation id="4046123991198612571">Faixa seguinte</translation> <translation id="4047726037116394521">Ir para a página inicial</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# contacto não está disponível. Para utilizar a funcionalidade Partilhar na proximidade com o mesmo, adicione o endereço de email associado à respetiva Conta Google aos seus contactos.}other{# contactos não estão disponíveis. Para utilizar a funcionalidade Partilhar na proximidade com o mesmo, adicione os endereços de email associados às respetivas Contas Google aos seus contactos.}}</translation> <translation id="4050225813016893843">Método de autenticação</translation> <translation id="4052120076834320548">Minúsculo</translation> <translation id="4056908315660577142">Atingiste o limite de tempo que o teu Pai ou Mãe definiu para a app <ph name="APP_NAME" /> do Chrome. Amanhã, podes utilizá-la durante <ph name="TIME_LIMIT" />.</translation> @@ -3174,7 +3183,6 @@ <translation id="4646675363240786305">Portas</translation> <translation id="4647090755847581616">Fe&char Separador</translation> <translation id="4647283074445570750">Passo <ph name="CURRENT_STEP" /> de <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Iniciar app quando inicia sessão no seu tablet}computer{Iniciar app quando inicia sessão no seu computador}other{Iniciar app quando inicia sessão no seu dispositivo}}</translation> <translation id="4647697156028544508">Introduza o PIN para "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permissões insuficientes</translation> <translation id="4648499713050786492">Desbloqueie o seu perfil antes de adicionar uma pessoa.</translation> @@ -3338,6 +3346,7 @@ <translation id="4863769717153320198">Parece ter <ph name="WIDTH" /> x <ph name="HEIGHT" /> (predefinição)</translation> <translation id="4864369630010738180">A iniciar sessão...</translation> <translation id="4864805589453749318">Seleciona o pai/mãe que está a conceder autorização para adicionar uma conta escolar.</translation> +<translation id="4866265760644917470">O perfil foi adicionado com êxito.</translation> <translation id="486635084936119914">Abrir determinados tipos de ficheiro automaticamente após a transferência</translation> <translation id="48704129375571883">Adicionar mais funcionalidades</translation> <translation id="4870758487381879312">Introduza a palavra-passe fornecida pelo administrador para obter informações de configuração.</translation> @@ -3621,6 +3630,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Alterou com êxito a palavra-passe comprometida. Tem mais # palavra-passe comprometida. O Chrome recomenda que verifique agora esta palavra-passe.}other{Alterou com êxito a palavra-passe comprometida. Tem mais # palavras-passe comprometidas. O Chrome recomenda que verifique agora estas palavras-passe.}}</translation> <translation id="5207949376430453814">Realçar cursor do texto</translation> <translation id="5209320130288484488">Não foram encontrados aparelhos</translation> +<translation id="5209572028385096813">Este utilizador é gerido pelo Family Link.</translation> <translation id="5210365745912300556">Fechar separador</translation> <translation id="5213481667492808996">O serviço de dados de "<ph name="NAME" />" está pronto a ser utilizado.</translation> <translation id="5213891612754844763">Mostrar definições de proxy</translation> @@ -3706,6 +3716,7 @@ <translation id="5302048478445481009">Idioma</translation> <translation id="5302932258331363306">Mostrar substituições</translation> <translation id="5304276686222516262">Não é possível transferir a lista de contactos. Verifique a sua ligação à Internet ou <a href="#" id="tryAgainLink">tente novamente</a>.</translation> +<translation id="5305145881844743843">Esta conta é gerida por <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" />.</translation> <translation id="5305688511332277257">Nenhum instalado</translation> <translation id="5307030433605830021">Origem não suportada</translation> <translation id="5308380583665731573">Ligar</translation> @@ -3719,6 +3730,7 @@ <translation id="5317780077021120954">Guardar</translation> <translation id="5319359161174645648">A Google recomenda o Chrome</translation> <translation id="5320112320661303273">Já configurou o Assistente num dispositivo diferente. Obtenha ainda mais com o Assistente ao ativar a seguinte definição.</translation> +<translation id="5320135788267874712">Nome do dispositivo novo</translation> <translation id="532247166573571973">O servidor pode estar inacessível. Tente novamente mais tarde.</translation> <translation id="5324300749339591280">Lista de apps</translation> <translation id="5324780743567488672">Definir automaticamente o fuso horário com base na localização</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Utilizar mensagens mais discretas (recomendado)</translation> <translation id="574104302965107104">Espelhamento do ecrã</translation> <translation id="574209121243317957">Tonalidade</translation> +<translation id="5742505912938664543">Quando adiciona uma conta secundária aqui, pode navegar na Web, transferir apps, consultar o Gmail e outros Serviços Google com essa conta.</translation> <translation id="5746169159649715125">Guardar como PDF</translation> <translation id="5747552184818312860">Expira</translation> <translation id="5747785204778348146">Programador – instável</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Espaço</translation> <translation id="6130692320435119637">Adicionar Wi-Fi</translation> <translation id="6136114942382973861">Fechar barra de transferências</translation> +<translation id="6136287496450963112">A sua chave de segurança não está protegida com um PIN. Para gerir impressões digitais, crie primeiro um PIN.</translation> <translation id="6137767437444130246">Certificado do utilizador</translation> <translation id="6138680304137685902">Assinatura X9.62 ECDSA com SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, sem rede</translation> @@ -4607,6 +4621,7 @@ <translation id="6331566915566907158">Ajudar a melhorar as funcionalidades e o desempenho do Chrome OS</translation> <translation id="6331818708794917058">Os sites podem solicitar a ligação a dispositivos MIDI</translation> <translation id="6333064448949140209">O ficheiro será enviado para a Google para depuração</translation> +<translation id="6334444530352320327">As suas definições de apps e SO serão sincronizadas em todos os Chromebooks nos quais tem sessão iniciada com esta conta.<ph name="LINK_BEGIN" />Definições de sincronização<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Todos os sites podem mostrar-lhe anúncios</translation> <translation id="6339668969738228384">Criar um novo perfil para <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Não foi possível estabelecer ligação ao servidor. Verifique a sua ligação de rede e tente novamente. Se o problema persistir, reinicie o Chromebook.</translation> @@ -4908,6 +4923,7 @@ <translation id="6709133671862442373">Notícias</translation> <translation id="6709357832553498500">Ligar através de <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Anterior</translation> +<translation id="6713233729292711163">Adicionar perfil de trabalho</translation> <translation id="6715803357256707211">Ocorreu um erro durante a instalação da sua aplicação para Linux. Clique na notificação para obter detalhes.</translation> <translation id="671619610707606484">Esta ação irá limpar <ph name="TOTAL_USAGE" /> de dados armazenados pelos sites.</translation> <translation id="671928215901716392">Bloquear ecrã</translation> @@ -5276,6 +5292,7 @@ <translation id="7121362699166175603">Limpa o histórico e os preenchimentos automáticos na barra de endereço. A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Modo de programador</translation> <translation id="7121728544325372695">Traços inteligentes</translation> +<translation id="7122353087820324370">As definições de apps e SO não estão sincronizadas com contas secundárias.</translation> <translation id="7123030151043029868">Com autorização para transferir vários ficheiros automaticamente</translation> <translation id="7123360114020465152">Já não é suportada.</translation> <translation id="7125148293026877011">Eliminar Crostini</translation> @@ -5590,6 +5607,7 @@ <translation id="750509436279396091">Abrir a pasta de transferências</translation> <translation id="7506093026325926984">Esta palavra-passe será guardada neste dispositivo</translation> <translation id="7506130076368211615">Configure uma nova rede</translation> +<translation id="7506242536428928412">Para utilizar a nova chave de segurança, defina um novo PIN.</translation> <translation id="7506541170099744506">O seu <ph name="DEVICE_TYPE" /> foi inscrito com êxito para gestão empresarial.</translation> <translation id="7507207699631365376">Veja a <ph name="BEGIN_LINK" />política de privacidade<ph name="END_LINK" /> deste fornecedor.</translation> <translation id="7507930499305566459">Certificado do dispositivo de resposta do estado</translation> @@ -5753,6 +5771,7 @@ <translation id="7691077781194517083">Não é possível repor esta chave de segurança. Erro <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Atualização do Crostini</translation> <translation id="7696063401938172191">No seu "<ph name="PHONE_NAME" />":</translation> +<translation id="7697166915480294040">Os detalhes estão ocultos durante a partilha do ecrã.</translation> <translation id="7697598343108519171">Utilizar a câmara para ler o código QR</translation> <translation id="7699968112832915395">Não é possível adicionar a conta</translation> <translation id="7701040980221191251">Nenhuma</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Uniforme</translation> <translation id="8186609076106987817">O servidor não conseguiu encontrar o ficheiro.</translation> <translation id="8188389033983459049">Verifique as definições do dispositivo e ative-o para continuar.</translation> +<translation id="8189306097519446565">Contas escolares</translation> +<translation id="8189750580333936930">Isolamento de processos de privacidade</translation> <translation id="8190193592390505034">A ligar a <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Gerir as suas aplicações, extensões e temas</translation> <translation id="8195027750202970175">Tamanho em disco</translation> @@ -6900,6 +6921,7 @@ <translation id="8986362086234534611">Esquecer</translation> <translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation> <translation id="8987927404178983737">Mês</translation> +<translation id="8989823300731803443">Continue onde parou.</translation> <translation id="8990209962746788689">Não é possível criar o código QR.</translation> <translation id="8991520179165052608">O site pode utilizar o microfone.</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 item}other{# itens}}</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 70bb7e1..1633c55 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nicio rețea</translation> <translation id="1056898198331236512">Avertisment</translation> <translation id="1058262162121953039">Codul PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Introdu noul cod PIN. Un cod PIN trebuie să aibă cel puțin un caracter și poate conține litere, numere și alte caractere.}few{Introdu noul cod PIN. Un cod PIN trebuie să aibă cel puțin # caractere și poate conține litere, numere și alte caractere.}other{Introdu noul cod PIN. Un cod PIN trebuie să aibă cel puțin # de caractere și poate conține litere, numere și alte caractere.}}</translation> <translation id="1059944192885972544">S-au găsit <ph name="NUM" /> file pentru „<ph name="SEARCH_TEXT" />”</translation> <translation id="1060292118287751956">Stabilește frecvența actualizării ecranului</translation> <translation id="1061904396131502319">Se apropie timpul pentru o pauză</translation> @@ -636,9 +637,11 @@ <translation id="1688935057616748272">Tastează o literă</translation> <translation id="168991973552362966">Adaugă o imprimantă din apropiere</translation> <translation id="1689945336726856614">Copiază adresa &URL</translation> +<translation id="1690248886740053041">Nu se poate conecta la o rețea mobilă. Contactează operatorul pentru asistență tehnică.</translation> <translation id="1692115862433274081">Folosește alt cont</translation> <translation id="1692118695553449118">Sincronizarea este activată</translation> <translation id="1692210323591458290">Mov închis</translation> +<translation id="169279809881363536">Nu s-au găsit profiluri. Pentru a configura o rețea nouă, scanează codul QR folosind camera foto a dispozitivului sau introdu codul de activare oferit de operator.</translation> <translation id="1697150536837697295">Artă</translation> <translation id="1697686431566694143">Editează fișierul</translation> <translation id="1698122934742150150">Numai sesiunea incognito actuală</translation> @@ -1575,6 +1578,7 @@ <translation id="2770465223704140727">Elimină din listă</translation> <translation id="2770690685823456775">Exportă parolele într-un alt dosar</translation> <translation id="2770929488047004208">Rezoluția monitorului</translation> +<translation id="2770954829020464827">Detaliile sunt ascunse cât timp permiți accesul la ecran</translation> <translation id="2771268254788431918">Datele mobile sunt activate</translation> <translation id="2771816809568414714">Brânză</translation> <translation id="2772936498786524345">Ninja</translation> @@ -1942,6 +1946,7 @@ <translation id="3201422919974259695">Dispozitivele USB disponibile vor apărea aici.</translation> <translation id="3202131003361292969">Cale</translation> <translation id="3202173864863109533">Sunetul acestei file este dezactivat.</translation> +<translation id="3202218848974251205">Mediul de testare securizat pentru confidențialitate</translation> <translation id="3208321278970793882">Aplicație</translation> <translation id="3208584281581115441">Verifică acum</translation> <translation id="3208703785962634733">Neconfirmat</translation> @@ -2162,6 +2167,7 @@ <translation id="3459697287128633276">Pentru a permite contului să acceseze Magazinul Google Play, autentifică-te folosind Furnizorul de identitate.</translation> <translation id="3462311546193741693">Te deconectează de pe majoritatea site-urilor. Vei rămâne conectat(ă) la Contul Google, astfel încât datele sincronizate să poată fi șterse.</translation> <translation id="3462413494201477527">Anulezi configurarea contului?</translation> +<translation id="3464145797867108663">Adaugă un profil de serviciu</translation> <translation id="346431825526753">Acesta este un cont pentru copii gestionat de <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etichetă</translation> <translation id="3468999815377931311">Telefon Android</translation> @@ -2283,6 +2289,7 @@ <translation id="360180734785106144">să ofere noi caracteristici pe măsură ce devin disponibile;</translation> <translation id="3602290021589620013">Previzualizare</translation> <translation id="3603622770190368340">Obțineți certificatul de rețea</translation> +<translation id="3604193429970465812">Conturi secundare</translation> <translation id="3604713164406837697">Schimbă imaginea de fundal</translation> <translation id="3605780360466892872">Om de afaceri</translation> <translation id="3608576286259426129">Previzualizare a imaginii utilizatorului</translation> @@ -2607,6 +2614,7 @@ Doriți să porniți <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Nu se poate crea comanda rapidă</translation> +<translation id="3943494825379372497">Restabilești aplicațiile și paginile?</translation> <translation id="3943582379552582368">&Înapoi</translation> <translation id="3943857333388298514">Inserează</translation> <translation id="3948116654032448504">&Caută imaginea cu <ph name="SEARCH_ENGINE" /></translation> @@ -2692,6 +2700,7 @@ <translation id="4046013316139505482">Aceste extensii nu au nevoie să vadă și să modifice informații de pe site.</translation> <translation id="4046123991198612571">Melodia următoare</translation> <translation id="4047726037116394521">Înapoi la pagina principală</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# persoană de contact nu este disponibilă. Pentru a folosi Nearby Share cu aceasta, adaugă în agendă adresa de e-mail asociată Contului Google respectiv.}few{# persoane de contact nu sunt disponibile. Pentru a folosi Nearby Share cu acestea, adaugă în agendă adresele de e-mail asociate Conturilor Google respective.}other{# de persoane de contact nu sunt disponibile. Pentru a folosi Nearby Share cu acestea, adaugă în agendă adresele de e-mail asociate Conturilor Google respective.}}</translation> <translation id="4050225813016893843">Metodă de autentificare</translation> <translation id="4052120076834320548">Mic</translation> <translation id="4056908315660577142">Ai atins limita de timp setată de părintele tău pentru aplicația Chrome <ph name="APP_NAME" />. Poți folosi aplicația mâine timp de <ph name="TIME_LIMIT" />.</translation> @@ -3175,7 +3184,6 @@ <translation id="4646675363240786305">Porturi</translation> <translation id="4647090755847581616">&Închide fila</translation> <translation id="4647283074445570750">Pasul <ph name="CURRENT_STEP" /> din <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Pornește aplicația când te conectezi pe tabletă}computer{Pornește aplicația când te conectezi pe computer}other{Pornește aplicația când te conectezi pe dispozitiv}}</translation> <translation id="4647697156028544508">Introduceți codul PIN pentru „<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Permisiuni insuficiente</translation> <translation id="4648499713050786492">Deblochează profilul înainte de a adăuga o persoană.</translation> @@ -3339,6 +3347,7 @@ <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Prestabilit)</translation> <translation id="4864369630010738180">Se conectează...</translation> <translation id="4864805589453749318">Selectează părintele care îți acordă permisiunea de a adăuga un cont de la școală.</translation> +<translation id="4866265760644917470">Profilul a fost adăugat.</translation> <translation id="486635084936119914">Deschide automat anumite tipuri de fișiere după descărcare</translation> <translation id="48704129375571883">Adaugă funcții suplimentare</translation> <translation id="4870758487381879312">Introdu parola oferită de administrator pentru a primi informațiile despre configurare</translation> @@ -3622,6 +3631,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Parola compromisă a fost schimbată. Mai ai # parolă compromisă. Chrome recomandă să verifici acum parola.}few{Parola compromisă a fost schimbată. Mai ai # parole compromise. Chrome recomandă să verifici acum parolele.}other{Parola compromisă a fost schimbată. Mai ai # de parole compromise. Chrome recomandă să verifici acum parolele.}}</translation> <translation id="5207949376430453814">Evidențiază cursorul pentru text</translation> <translation id="5209320130288484488">Nu s-a găsit niciun dispozitiv</translation> +<translation id="5209572028385096813">Acest utilizator este gestionat de Family Link</translation> <translation id="5210365745912300556">Închide fila</translation> <translation id="5213481667492808996">Serviciul de date „<ph name="NAME" />” este gata de utilizare.</translation> <translation id="5213891612754844763">Afișează setările de proxy</translation> @@ -3707,6 +3717,7 @@ <translation id="5302048478445481009">Limbă</translation> <translation id="5302932258331363306">Afișează înlocuirile</translation> <translation id="5304276686222516262">Nu s-a putut descărca agenda. Verifică-ți conexiunea la rețea sau <a href="#" id="tryAgainLink">încearcă din nou</a>.</translation> +<translation id="5305145881844743843">Acest cont este gestionat de <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Niciunul instalat</translation> <translation id="5307030433605830021">Sursa nu este acceptată</translation> <translation id="5308380583665731573">Conectează-te</translation> @@ -3720,6 +3731,7 @@ <translation id="5317780077021120954">Salvează</translation> <translation id="5319359161174645648">Google recomandă Chrome</translation> <translation id="5320112320661303273">Se pare că ai configurat deja Asistentul pe alt dispozitiv. Profită la maximum de Asistent activând următoarea setare.</translation> +<translation id="5320135788267874712">Noul nume al dispozitivului</translation> <translation id="532247166573571973">Este posibil ca serverul să nu poată fi accesat. Încearcă din nou mai târziu.</translation> <translation id="5324300749339591280">Lista de aplicații</translation> <translation id="5324780743567488672">Setează automat fusul orar folosind locația</translation> @@ -4087,6 +4099,7 @@ <translation id="5740820643029013514">Folosește mesaje discrete (recomandat)</translation> <translation id="574104302965107104">Oglindirea ecranului</translation> <translation id="574209121243317957">Tonalitatea</translation> +<translation id="5742505912938664543">Dacă adaugi un cont secundar aici, poți să navighezi pe web, să descarci aplicații, să verifici contul Gmail și să utilizezi alte servicii Google folosind contul respectiv.</translation> <translation id="5746169159649715125">Salvați ca PDF</translation> <translation id="5747552184818312860">Expiră</translation> <translation id="5747785204778348146">Canal pentru dezvoltatori – instabil</translation> @@ -4427,6 +4440,7 @@ <translation id="6129953537138746214">Spațiu</translation> <translation id="6130692320435119637">Adaugă o rețea Wi-Fi</translation> <translation id="6136114942382973861">Închide bara de descărcări</translation> +<translation id="6136287496450963112">Cheia de securitate nu este protejată printr-un cod PIN. Pentru a gestiona amprentele digitale, creează mai întâi un cod PIN.</translation> <translation id="6137767437444130246">Certificat de utilizator</translation> <translation id="6138680304137685902">Semnătură X9.62 ECDSA cu SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nicio rețea</translation> @@ -4607,6 +4621,7 @@ <translation id="6331566915566907158">Contribuie la îmbunătățirea funcțiilor și a performanței sistemului de operare Chrome</translation> <translation id="6331818708794917058">Site-urile pot solicita permisiunea de a se conecta la dispozitive MIDI</translation> <translation id="6333064448949140209">Fișierul va fi trimis la Google pentru remedierea erorilor</translation> +<translation id="6334444530352320327">Aplicațiile și setările sistemului de operare se vor sincroniza pe toate Chromebookurile pe care te-ai conectat cu acest cont. <ph name="LINK_BEGIN" />Setări pentru sincronizare<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Toate site-urile pot afișa orice anunțuri</translation> <translation id="6339668969738228384">Creează un profil nou pentru <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Nu s-a putut conecta la server. Verifică conexiunea la rețea și încearcă din nou. Dacă problema persistă, repornește Chromebookul.</translation> @@ -4908,6 +4923,7 @@ <translation id="6709133671862442373">Știri</translation> <translation id="6709357832553498500">Conectează-te folosind <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Înapoi</translation> +<translation id="6713233729292711163">Adaugă un profil de serviciu</translation> <translation id="6715803357256707211">A apărut o eroare în timpul instalării aplicației Linux. Dă clic pe notificare pentru detalii.</translation> <translation id="671619610707606484">Astfel, se vor șterge <ph name="TOTAL_USAGE" /> din datele stocate de site-uri</translation> <translation id="671928215901716392">Blocați ecranul</translation> @@ -5276,6 +5292,7 @@ <translation id="7121362699166175603">Șterge istoricul și completările automate din bara de adrese. Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Modul pentru dezvoltatori</translation> <translation id="7121728544325372695">Cratime inteligente</translation> +<translation id="7122353087820324370">Aplicațiile și setările sistemului de operare nu sunt sincronizate cu conturile secundare.</translation> <translation id="7123030151043029868">Au permisiunea de a descărca automat mai multe fișiere</translation> <translation id="7123360114020465152">Nu mai este acceptată</translation> <translation id="7125148293026877011">Șterge Crostini</translation> @@ -5590,6 +5607,7 @@ <translation id="750509436279396091">Deschideți dosarul de descărcări</translation> <translation id="7506093026325926984">Parola se va salva pe acest dispozitiv</translation> <translation id="7506130076368211615">Configurează o rețea nouă</translation> +<translation id="7506242536428928412">Pentru a folosi noua cheie de securitate, setează un cod PIN nou</translation> <translation id="7506541170099744506">Dispozitivul <ph name="DEVICE_TYPE" /> a fost înscris pentru gestionarea de întreprindere.</translation> <translation id="7507207699631365376">Consultă <ph name="BEGIN_LINK" />politica de confidențialitate<ph name="END_LINK" /> a furnizorului</translation> <translation id="7507930499305566459">Certificat de respondent de stare</translation> @@ -5753,6 +5771,7 @@ <translation id="7691077781194517083">Această cheie de securitate nu poate fi resetată. Eroare <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Upgrade la Crostini</translation> <translation id="7696063401938172191">Pe „<ph name="PHONE_NAME" />”:</translation> +<translation id="7697166915480294040">Detaliile sunt ascunse cât timp permiți accesul la ecran</translation> <translation id="7697598343108519171">Folosește camera ca să scanezi codul QR</translation> <translation id="7699968112832915395">Nu se poate adăuga contul</translation> <translation id="7701040980221191251">Niciuna</translation> @@ -6210,6 +6229,8 @@ <translation id="8184472985242519288">Uniform</translation> <translation id="8186609076106987817">Serverul nu a putut găsi fișierul.</translation> <translation id="8188389033983459049">Verifică setările dispozitivului și activează-l pentru a continua</translation> +<translation id="8189306097519446565">Conturi de la școală</translation> +<translation id="8189750580333936930">Mediul de testare securizat pentru confidențialitate</translation> <translation id="8190193592390505034">Se conectează la <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Gestionează aplicațiile, extensiile și temele dvs.</translation> <translation id="8195027750202970175">Dimensiune pe disc</translation> @@ -6902,6 +6923,7 @@ <translation id="8986362086234534611">Șterge</translation> <translation id="8986494364107987395">Trimite automat la Google statistici de utilizare și rapoarte de blocare</translation> <translation id="8987927404178983737">Lună</translation> +<translation id="8989823300731803443">Continuă de unde ai rămas.</translation> <translation id="8990209962746788689">Nu s-a putut crea codul QR</translation> <translation id="8991520179165052608">Site-ul poate folosi microfonul</translation> <translation id="8992117551007229513">{COUNT,plural, =1{un element}few{# elemente}other{# de elemente}}</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 92017bb4..1df26376 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3175,7 +3175,6 @@ <translation id="4646675363240786305">Порты</translation> <translation id="4647090755847581616">&Закрыть вкладку</translation> <translation id="4647283074445570750">Шаг <ph name="CURRENT_STEP" /> из <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Запускать приложение после моего входа в систему на планшете}computer{Запускать приложение после моего входа в систему на компьютере}other{Запускать приложение после моего входа в систему на устройстве}}</translation> <translation id="4647697156028544508">Введите PIN-код для "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Недостаточно прав</translation> <translation id="4648499713050786492">Разблокируйте свой профиль, прежде чем добавлять ещё один.</translation> @@ -3720,6 +3719,7 @@ <translation id="5317780077021120954">Сохранить</translation> <translation id="5319359161174645648">Google рекомендует браузер Chrome</translation> <translation id="5320112320661303273">Похоже, что вы уже настроили Google Ассистента на другом устройстве. Включите эту настройку, чтобы получить ещё больше возможностей.</translation> +<translation id="5320135788267874712">Введите название</translation> <translation id="532247166573571973">Сервер недоступен. Повторите попытку позже.</translation> <translation id="5324300749339591280">Список приложений</translation> <translation id="5324780743567488672">Автоматически определять часовой пояс на основе геоданных</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 1aa9a907..b7e723a 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">තොටවල්</translation> <translation id="4647090755847581616">ටැබය වසන්න (&C)</translation> <translation id="4647283074445570750">පියවර <ph name="TOTAL_STEPS" />හි <ph name="CURRENT_STEP" /></translation> -<translation id="4647420311443994946">{0,select, tablet{ඔබ ඔබේ ටැබ්ලට් එකට පුරන විට යෙදුම ආරම්භ කරන්න}computer{ඔබ ඒබේ පරිගණකයට පුරන විට යෙදුම ආරම්භ කරන්න}other{ඔබ ඔබේ උපාංගයට පුරන විට යෙදුම ආරම්භ කරන්න}}</translation> <translation id="4647697156028544508">කරුණාකර "<ph name="DEVICE_NAME" />" සඳහා මුරපදය ඇතුළත් කරන්න:</translation> <translation id="4648491805942548247">අවසර ප්රමාණවත් නොවේ</translation> <translation id="4648499713050786492">පුද්ගලයෙකු එක් කිරීමට පෙර ඔබගේ පැතිකඩ අගුළු හරින්න.</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">සුරකින්න</translation> <translation id="5319359161174645648">Google විසින් Chrome නිර්දේශ කරයි</translation> <translation id="5320112320661303273">ඔබ දැනටමත් වෙනත් උපාංගයක සහායක පිහිටුවා ඇති බව පෙනේ. පහත සැකසීම ක්රියාත්මක කිරීමෙන් ඔබගේ සහායකගෙන් තවත් බොහෝ දේ ලබා ගන්න.</translation> +<translation id="5320135788267874712">නව උපාංග නම</translation> <translation id="532247166573571973">සේවාදායකය වෙත ළඟාවිය නොහැක. පසුව නැවත උත්සාහ කරන්න.</translation> <translation id="5324300749339591280">යෙදුම් ලැයිස්තුව</translation> <translation id="5324780743567488672">ඔබගේ ස්ථානය භාවිතා කර කාල කලාපය ස්වයංක්රියව සකසන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index cd67ac07..d12c5d2 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -3175,7 +3175,6 @@ <translation id="4646675363240786305">Porty</translation> <translation id="4647090755847581616">&Zavrieť kartu</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. krok z <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Spustiť aplikáciu pri prihlásení sa do tabletu}computer{Spustiť aplikáciu pri prihlásení sa do počítača}other{Spustiť aplikáciu pri prihlásení sa do zariadenia}}</translation> <translation id="4647697156028544508">Zadajte kód PIN pre zariadenie <ph name="DEVICE_NAME" />:</translation> <translation id="4648491805942548247">Nedostatočné povolenia</translation> <translation id="4648499713050786492">Skôr ako pridáte osobu, odomknite svoj profil.</translation> @@ -3720,6 +3719,7 @@ <translation id="5317780077021120954">Uložiť</translation> <translation id="5319359161174645648">Google odporúča Chrome</translation> <translation id="5320112320661303273">Asistenta ste už zrejme nastavili v inom zariadení. Ak chcete získať ešte viac funkcií Asistenta, zapnite nasledovné nastavenie.</translation> +<translation id="5320135788267874712">Názov nového zariadenia</translation> <translation id="532247166573571973">Server môže byť nedostupný. Skúste to znova neskôr.</translation> <translation id="5324300749339591280">Zoznam aplikácií</translation> <translation id="5324780743567488672">Nastaviť časové pásmo automaticky na základe polohy</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index c1eed7d..32fba230 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3177,7 +3177,6 @@ <translation id="4646675363240786305">Vrata</translation> <translation id="4647090755847581616">Zap&ri zavihek</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. korak od <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Zaženi aplikacijo ob prijavi v tablični računalnik}computer{Zaženi aplikacijo ob prijavi v računalnik}other{Zaženi aplikacijo ob prijavi v napravo}}</translation> <translation id="4647697156028544508">Vnesite PIN za napravo »<ph name="DEVICE_NAME" />«:</translation> <translation id="4648491805942548247">Nezadostna dovoljenja</translation> <translation id="4648499713050786492">Preden dodate osebo, odklenite profil.</translation> @@ -3722,6 +3721,7 @@ <translation id="5317780077021120954">Shrani</translation> <translation id="5319359161174645648">Google priporoča Chrome</translation> <translation id="5320112320661303273">Videti je, da ste že nastavili Pomočnika v drugi napravi. Še bolje izkoristite Pomočnika tako, da vklopite naslednjo nastavitev.</translation> +<translation id="5320135788267874712">Novo ime naprave</translation> <translation id="532247166573571973">Strežnik morda ni dosegljiv. Poskusite znova pozneje.</translation> <translation id="5324300749339591280">Seznam aplikacij</translation> <translation id="5324780743567488672">Samodejna nastavitev časovnega pasu na podlagi vaše lokacije</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index eaa944c..ca75b0b 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -3171,7 +3171,6 @@ <translation id="4646675363240786305">Portat</translation> <translation id="4647090755847581616">&Mbylle skedën</translation> <translation id="4647283074445570750">Hapi <ph name="CURRENT_STEP" /> nga <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Nis aplikacionin kur të identifikohesh në tabletin tënd}computer{Nis aplikacionin kur të identifikohesh në kompjuterin tënd}other{Nis aplikacionin kur të identifikohesh në pajisjen tënde}}</translation> <translation id="4647697156028544508">Fut kodin PIN për "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Lejet e pamjaftueshme</translation> <translation id="4648499713050786492">Shkyçe profilin tënd para se të shtosh një person.</translation> @@ -3716,6 +3715,7 @@ <translation id="5317780077021120954">Ruaj</translation> <translation id="5319359161174645648">Google rekomandon Chrome</translation> <translation id="5320112320661303273">Me sa duket e ke konfiguruar tashmë "Asistentin" në një pajisje tjetër. Përfito edhe më shumë nga "Asistenti" yt duke e aktivizuar këtë cilësim.</translation> +<translation id="5320135788267874712">Emri i ri i pajisjes</translation> <translation id="532247166573571973">Serveri mund të jetë i paarritshëm. Provo përsëri më vonë.</translation> <translation id="5324300749339591280">Lista e aplikacioneve</translation> <translation id="5324780743567488672">Caktoje automatikisht brezin orar duke përdorur vendndodhjen tënde</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index d157dea..6d6a965 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Nema mreža</translation> <translation id="1056898198331236512">Upozorenje</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Unesite novi PIN. PIN mora da ima bar jedan znak i može da sadrži slova, brojeve i druge znakove.}one{Unesite novi PIN. PIN mora da ima bar # znak i može da sadrži slova, brojeve i druge znakove.}few{Unesite novi PIN. PIN mora da ima bar # znaka i može da sadrži slova, brojeve i druge znakove.}other{Unesite novi PIN. PIN mora da ima bar # znakova i može da sadrži slova, brojeve i druge znakove.}}</translation> <translation id="1059944192885972544">Pronađenih kartica za „<ph name="SEARCH_TEXT" />“: <ph name="NUM" /></translation> <translation id="1060292118287751956">Određuje učestalost ažuriranja ekrana</translation> <translation id="1061904396131502319">Skoro je vreme za pauzu</translation> @@ -634,9 +635,11 @@ <translation id="1688935057616748272">Unesite neko slovo</translation> <translation id="168991973552362966">Dodajte štampač u blizini</translation> <translation id="1689945336726856614">Kopiraj &URL</translation> +<translation id="1690248886740053041">Povezivanje sa mobilnom mrežom nije uspelo. Obratite se mobilnom operateru radi tehničke podrške.</translation> <translation id="1692115862433274081">Koristi drugi nalog</translation> <translation id="1692118695553449118">Sinhronizacija je uključena</translation> <translation id="1692210323591458290">Tamnoljubičasta</translation> +<translation id="169279809881363536">Nije otkriven nijedan profil. Da biste podesili novu mrežu, skenirajte QR kôd pomoću kamere uređaja ili unesite aktivacioni kôd koji ste dobili od mobilnog operatera</translation> <translation id="1697150536837697295">Umetnost</translation> <translation id="1697686431566694143">Izmeni datoteku</translation> <translation id="1698122934742150150">Samo aktuelna sesija bez arhiviranja</translation> @@ -1573,6 +1576,7 @@ <translation id="2770465223704140727">Ukloni sa liste</translation> <translation id="2770690685823456775">Izvezite lozinke u drugi direktorijum</translation> <translation id="2770929488047004208">Rezolucija monitora</translation> +<translation id="2770954829020464827">Detalji su sakriveni dok delite ekran</translation> <translation id="2771268254788431918">Mobilni podaci su aktivirani</translation> <translation id="2771816809568414714">Sir</translation> <translation id="2772936498786524345">Nindža</translation> @@ -1940,6 +1944,7 @@ <translation id="3201422919974259695">Dostupni USB uređaji će se prikazivati ovde.</translation> <translation id="3202131003361292969">Putanja</translation> <translation id="3202173864863109533">Zvuk ove kartice je isključen.</translation> +<translation id="3202218848974251205">Zaštićeno okruženje privatnosti</translation> <translation id="3208321278970793882">Aplikacija</translation> <translation id="3208584281581115441">Proveri</translation> <translation id="3208703785962634733">Nepotvrđeno</translation> @@ -2160,6 +2165,7 @@ <translation id="3459697287128633276">Da biste omogućili nalogu da pristupa Google Play prodavnici, potvrdite identitet pomoću dobavljača identiteta.</translation> <translation id="3462311546193741693">Odjavljuje vas sa većine sajtova. Ne odjavljuje vas sa Google naloga, pa sinhronizovani podaci mogu da se obrišu.</translation> <translation id="3462413494201477527">Želite li da otkažete podešavanje naloga?</translation> +<translation id="3464145797867108663">Dodaj poslovni profil</translation> <translation id="346431825526753">Ovo je nalog za decu kojim upravlja <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Oznaka</translation> <translation id="3468999815377931311">Android telefon</translation> @@ -2281,6 +2287,7 @@ <translation id="360180734785106144">da nudi nove funkcije kada postanu dostupne</translation> <translation id="3602290021589620013">Pregled</translation> <translation id="3603622770190368340">Dobijanje sertifikata mreže</translation> +<translation id="3604193429970465812">Sekundarni nalozi</translation> <translation id="3604713164406837697">Promenite pozadinu</translation> <translation id="3605780360466892872">Japi</translation> <translation id="3608576286259426129">Pregled slike korisnika</translation> @@ -2605,6 +2612,7 @@ Želite li odmah da pokrenete <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Pravljenje prečice nije uspelo</translation> +<translation id="3943494825379372497">Želite da vratite aplikacije i stranice?</translation> <translation id="3943582379552582368">&Nazad</translation> <translation id="3943857333388298514">Nalepi</translation> <translation id="3948116654032448504">&Potraži sliku u pretraživaču <ph name="SEARCH_ENGINE" /></translation> @@ -2690,6 +2698,7 @@ <translation id="4046013316139505482">Ovi dodaci ne moraju da vide i menjaju informacije na ovom sajtu.</translation> <translation id="4046123991198612571">Sledeća pesma</translation> <translation id="4047726037116394521">Idite na početni ekran</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# kontakt nije dostupan. Da biste koristili deljenje u blizini sa njim, u kontakte dodajte imejl adrese povezane sa njegovim Google nalozima.}one{# kontakt nije dostupan. Da biste koristili Deljenje u blizini sa tim kontaktima, u kontakte dodajte imejl adrese povezane sa njihovim Google nalozima.}few{# kontakta nisu dostupna. Da biste koristili Deljenje u blizini sa tim kontaktima, u kontakte dodajte imejl adrese povezane sa njihovim Google nalozima.}other{# kontakata nije dostupno. Da biste koristili Deljenje u blizini sa tim kontaktima, u kontakte dodajte imejl adrese povezane sa njihovim Google nalozima.}}</translation> <translation id="4050225813016893843">Metod za potvrdu identiteta</translation> <translation id="4052120076834320548">Sićušna</translation> <translation id="4056908315660577142">Dostigao/la si vremensko ograničenje koje je roditelj podesio za Chrome aplikaciju<ph name="APP_NAME" />. Sutra imaš <ph name="TIME_LIMIT" /> na raspolaganju.</translation> @@ -3173,7 +3182,6 @@ <translation id="4646675363240786305">Portovi</translation> <translation id="4647090755847581616">&Close Tab (Zatvori karticu)</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. korak od <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Pokrenite aplikaciju kada se prijavite na tablet}computer{Pokrenite aplikaciju kada se prijavite na računar}other{Pokrenite aplikaciju kada se prijavite na uređaj}}</translation> <translation id="4647697156028544508">Unesite PIN za „<ph name="DEVICE_NAME" />“:</translation> <translation id="4648491805942548247">Nedovoljan broj dozvola</translation> <translation id="4648499713050786492">Otključajte profil da biste dodali osobu.</translation> @@ -3337,6 +3345,7 @@ <translation id="4863769717153320198">Izgleda da je u pitanju <ph name="WIDTH" />×<ph name="HEIGHT" /> (podrazumevano)</translation> <translation id="4864369630010738180">Prijavljivanje...</translation> <translation id="4864805589453749318">Izaberite roditelja koji dodeljuje dozvolu za dodavanje školskog naloga.</translation> +<translation id="4866265760644917470">Profil je dodat.</translation> <translation id="486635084936119914">Automatski otvarajte određene tipove datoteka posle preuzimanja</translation> <translation id="48704129375571883">Dodajte još funkcija</translation> <translation id="4870758487381879312">Unesite lozinku koju ste dobili od administratora da biste dobili informacije o konfiguraciji</translation> @@ -3620,6 +3629,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Promenili ste ugroženu lozinku. Imate još # ugroženu lozinku. Chrome vam preporučuje da odmah proverite ovu lozinku.}one{Promenili ste ugroženu lozinku. Imate još # ugroženu lozinku. Chrome vam preporučuje da odmah proverite ove lozinke.}few{Promenili ste ugroženu lozinku. Imate još # ugrožene lozinke. Chrome vam preporučuje da odmah proverite ove lozinke.}other{Promenili ste ugroženu lozinku. Imate još # ugroženih lozinki. Chrome vam preporučuje da odmah proverite ove lozinke.}}</translation> <translation id="5207949376430453814">Istakni kursor za tekst</translation> <translation id="5209320130288484488">Nije pronađen nijedan uređaj</translation> +<translation id="5209572028385096813">Ovim korisnikom upravlja Family Link</translation> <translation id="5210365745912300556">Zatvori karticu</translation> <translation id="5213481667492808996">Usluga prenosa podataka „<ph name="NAME" />“ je spremna za korišćenje</translation> <translation id="5213891612754844763">Prikaži podešavanja proksija</translation> @@ -3705,6 +3715,7 @@ <translation id="5302048478445481009">Jezik</translation> <translation id="5302932258331363306">Prikaži zamene</translation> <translation id="5304276686222516262">Preuzimanje liste kontakata nije uspelo. Proverite mrežnu vezu ili <a href="#" id="tryAgainLink">probajte ponovo</a>.</translation> +<translation id="5305145881844743843">Ovim nalogom upravlja <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Ništa nije instalirano</translation> <translation id="5307030433605830021">Izvor nije podržan</translation> <translation id="5308380583665731573">Povezivanje</translation> @@ -3718,6 +3729,7 @@ <translation id="5317780077021120954">Sačuvaj</translation> <translation id="5319359161174645648">Google preporučuje Chrome</translation> <translation id="5320112320661303273">Izgleda da ste već podesili Pomoćnik na nekom drugom uređaju. Uključite sledeće podešavanje i iskoristite Pomoćnik na još bolji način.</translation> +<translation id="5320135788267874712">Nov naziv uređaj</translation> <translation id="532247166573571973">Server je možda nedostupan. Probajte ponovo kasnije.</translation> <translation id="5324300749339591280">Lista aplikacija</translation> <translation id="5324780743567488672">Automatski podesi vremensku zonu pomoću moje lokacije</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Koristi nenametljivu razmenu poruka (preporučeno)</translation> <translation id="574104302965107104">Preslikavanje ekrana</translation> <translation id="574209121243317957">Nivo</translation> +<translation id="5742505912938664543">Kada ovde dodate sekundarni nalog, možete da pregledate veb, preuzimate aplikacije i proveravate Gmail i druge Google usluge pomoću tog naloga.</translation> <translation id="5746169159649715125">Sačuvaj kao PDF</translation> <translation id="5747552184818312860">Ističe</translation> <translation id="5747785204778348146">Programer – nestabilno</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Razmak</translation> <translation id="6130692320435119637">Dodaj WiFi</translation> <translation id="6136114942382973861">Zatvori traku sa preuzimanjima</translation> +<translation id="6136287496450963112">Bezbednosni ključ nije zaštićen PIN-om. Da biste upravljali otiscima prstiju, prvo napravite PIN.</translation> <translation id="6137767437444130246">Korisnički sertifikat</translation> <translation id="6138680304137685902">Potpis X9.62 ECDSA putem SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, nema mreže</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Pomozite nam da poboljšamo funkcije i učinak Chrome OS-a</translation> <translation id="6331818708794917058">Sajtovi mogu da traže da se povezuju sa MIDI uređajima</translation> <translation id="6333064448949140209">Datoteka će biti poslata Google-u radi otklanjanja grešaka</translation> +<translation id="6334444530352320327">Aplikacije i podešavanja OS-a će se sinhronizovati na svim Chromebook-ovima na kojima ste prijavljeni pomoću ovog naloga.<ph name="LINK_BEGIN" />Podešavanja sinhronizacije<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Svi sajtovi mogu da prikazuju sve oglase</translation> <translation id="6339668969738228384">Otvori novi profil za <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Povezivanje sa serverom nije uspelo. Proverite mrežnu vezu i probajte ponovo kasnije. Ako se problem nastavi, restartujte Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Vesti</translation> <translation id="6709357832553498500">Poveži se pomoću <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Prethodno</translation> +<translation id="6713233729292711163">Dodaj poslovni profil</translation> <translation id="6715803357256707211">Došlo je do greške tokom instaliranja Linux aplikacije. Kliknite na obaveštenje da biste pronašli detaljne informacije.</translation> <translation id="671619610707606484">Ovim brišete <ph name="TOTAL_USAGE" /> podataka koje čuvaju sajtovi</translation> <translation id="671928215901716392">Zaključaj ekran</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Briše istoriju i automatska dovršavanja u traci za adresu. Google nalog može da ima druge oblike istorije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Režim programera</translation> <translation id="7121728544325372695">Pametne crte</translation> +<translation id="7122353087820324370">Aplikacije i podešavanja OS-a se ne sinhronizuju sa sekundarnim nalozima.</translation> <translation id="7123030151043029868">Dozvoljeno im je da automatski preuzimaju više fajlova</translation> <translation id="7123360114020465152">Nije više podržan</translation> <translation id="7125148293026877011">Izbrišite Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Otvori direktorijum Preuzimanja</translation> <translation id="7506093026325926984">Lozinka će se čuvati na ovom uređaju</translation> <translation id="7506130076368211615">Podesite novu mrežu</translation> +<translation id="7506242536428928412">Podesite novi PIN da biste koristili novi bezbednosni ključ</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> je registrovan za upravljanje preduzećem.</translation> <translation id="7507207699631365376">Pogledajte <ph name="BEGIN_LINK" />politiku privatnosti<ph name="END_LINK" /> ovog dobavljača</translation> <translation id="7507930499305566459">Sertifikat za odzivnik statusa</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Resetovanje ovog bezbednosnog ključa nije uspelo. Greška <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Nadogradnja Crostini-ja</translation> <translation id="7696063401938172191">Na telefonu „<ph name="PHONE_NAME" />“:</translation> +<translation id="7697166915480294040">Detalji su sakriveni dok delite ekran</translation> <translation id="7697598343108519171">Skenirajte QR kôd pomoću kamere</translation> <translation id="7699968112832915395">Dodavanje naloga nije uspelo</translation> <translation id="7701040980221191251">Ništa</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Jednoobrazno</translation> <translation id="8186609076106987817">Server nije mogao da pronađe datoteku.</translation> <translation id="8188389033983459049">Proverite podešavanja uređaja i uključite ga da biste nastavili</translation> +<translation id="8189306097519446565">Školski nalozi</translation> +<translation id="8189750580333936930">Zaštićeno okruženje privatnosti</translation> <translation id="8190193592390505034">Povezivanje sa mrežom <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Upravljanje aplikacijama, dodacima i temama</translation> <translation id="8195027750202970175">Veličina na disku</translation> @@ -6902,6 +6923,7 @@ <translation id="8986362086234534611">Zaboravi</translation> <translation id="8986494364107987395">Automatski šalji Google-u statističke podatke o korišćenju i izveštaje o otkazivanju</translation> <translation id="8987927404178983737">Mesec</translation> +<translation id="8989823300731803443">Nastavite prethodnu sesiju.</translation> <translation id="8990209962746788689">Pravljenje QR koda nije uspelo</translation> <translation id="8991520179165052608">Sajt može da koristi mikrofon</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 stavka}one{# stavka}few{# stavke}other{# stavki}}</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 995e508..38ce25a4 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Нема мрежа</translation> <translation id="1056898198331236512">Упозорење</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Унесите нови PIN. PIN мора да има бар један знак и може да садржи слова, бројеве и друге знакове.}one{Унесите нови PIN. PIN мора да има бар # знак и може да садржи слова, бројеве и друге знакове.}few{Унесите нови PIN. PIN мора да има бар # знака и може да садржи слова, бројеве и друге знакове.}other{Унесите нови PIN. PIN мора да има бар # знакова и може да садржи слова, бројеве и друге знакове.}}</translation> <translation id="1059944192885972544">Пронађених картица за „<ph name="SEARCH_TEXT" />“: <ph name="NUM" /></translation> <translation id="1060292118287751956">Одређује учесталост ажурирања екрана</translation> <translation id="1061904396131502319">Скоро је време за паузу</translation> @@ -634,9 +635,11 @@ <translation id="1688935057616748272">Унесите неко слово</translation> <translation id="168991973552362966">Додајте штампач у близини</translation> <translation id="1689945336726856614">Копирај &URL</translation> +<translation id="1690248886740053041">Повезивање са мобилном мрежом није успело. Обратите се мобилном оператеру ради техничке подршке.</translation> <translation id="1692115862433274081">Користи други налог</translation> <translation id="1692118695553449118">Синхронизација је укључена</translation> <translation id="1692210323591458290">Тамнољубичаста</translation> +<translation id="169279809881363536">Није откривен ниједан профил. Да бисте подесили нову мрежу, скенирајте QR кôд помоћу камере уређаја или унесите активациони кôд који сте добили од мобилног оператера</translation> <translation id="1697150536837697295">Уметност</translation> <translation id="1697686431566694143">Измени датотеку</translation> <translation id="1698122934742150150">Само актуелна сесија без архивирања</translation> @@ -1573,6 +1576,7 @@ <translation id="2770465223704140727">Уклони са листе</translation> <translation id="2770690685823456775">Извезите лозинке у други директоријум</translation> <translation id="2770929488047004208">Резолуција монитора</translation> +<translation id="2770954829020464827">Детаљи су сакривени док делите екран</translation> <translation id="2771268254788431918">Мобилни подаци су активирани</translation> <translation id="2771816809568414714">Сир</translation> <translation id="2772936498786524345">Нинџа</translation> @@ -1940,6 +1944,7 @@ <translation id="3201422919974259695">Доступни USB уређаји ће се приказивати овде.</translation> <translation id="3202131003361292969">Путања</translation> <translation id="3202173864863109533">Звук ове картице је искључен.</translation> +<translation id="3202218848974251205">Заштићено окружење приватности</translation> <translation id="3208321278970793882">Апликација</translation> <translation id="3208584281581115441">Провери</translation> <translation id="3208703785962634733">Непотврђено</translation> @@ -2160,6 +2165,7 @@ <translation id="3459697287128633276">Да бисте омогућили налогу да приступа Google Play продавници, потврдите идентитет помоћу добављача идентитета.</translation> <translation id="3462311546193741693">Одјављује вас са већине сајтова. Не одјављује вас са Google налога, па синхронизовани подаци могу да се обришу.</translation> <translation id="3462413494201477527">Желите ли да откажете подешавање налога?</translation> +<translation id="3464145797867108663">Додај пословни профил</translation> <translation id="346431825526753">Ово је налог за децу којим управља <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Ознака</translation> <translation id="3468999815377931311">Android телефон</translation> @@ -2281,6 +2287,7 @@ <translation id="360180734785106144">да нуди нове функције када постану доступне</translation> <translation id="3602290021589620013">Преглед</translation> <translation id="3603622770190368340">Добијање сертификата мреже</translation> +<translation id="3604193429970465812">Секундарни налози</translation> <translation id="3604713164406837697">Промените позадину</translation> <translation id="3605780360466892872">Јапи</translation> <translation id="3608576286259426129">Преглед слике корисника</translation> @@ -2605,6 +2612,7 @@ Желите ли одмах да покренете <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Прављење пречице није успело</translation> +<translation id="3943494825379372497">Желите да вратите апликације и странице?</translation> <translation id="3943582379552582368">&Назад</translation> <translation id="3943857333388298514">Налепи</translation> <translation id="3948116654032448504">&Потражи слику у претраживачу <ph name="SEARCH_ENGINE" /></translation> @@ -2690,6 +2698,7 @@ <translation id="4046013316139505482">Ови додаци не морају да виде и мењају информације на овом сајту.</translation> <translation id="4046123991198612571">Следећа песма</translation> <translation id="4047726037116394521">Идите на почетни екран</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{# контакт није доступан. Да бисте користили дељење у близини са њим, у контакте додајте имејл адресе повезане са његовим Google налозима.}one{# контакт није доступан. Да бисте користили Дељење у близини са тим контактима, у контакте додајте имејл адресе повезане са њиховим Google налозима.}few{# контакта нису доступна. Да бисте користили Дељење у близини са тим контактима, у контакте додајте имејл адресе повезане са њиховим Google налозима.}other{# контаката није доступно. Да бисте користили Дељење у близини са тим контактима, у контакте додајте имејл адресе повезане са њиховим Google налозима.}}</translation> <translation id="4050225813016893843">Метод за потврду идентитета</translation> <translation id="4052120076834320548">Сићушна</translation> <translation id="4056908315660577142">Достигао/ла си временско ограничење које је родитељ подесио за Chrome апликацију<ph name="APP_NAME" />. Сутра имаш <ph name="TIME_LIMIT" /> на располагању.</translation> @@ -3173,7 +3182,6 @@ <translation id="4646675363240786305">Портови</translation> <translation id="4647090755847581616">&Close Tab (Затвори картицу)</translation> <translation id="4647283074445570750"><ph name="CURRENT_STEP" />. корак од <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Покрените апликацију када се пријавите на таблет}computer{Покрените апликацију када се пријавите на рачунар}other{Покрените апликацију када се пријавите на уређај}}</translation> <translation id="4647697156028544508">Унесите PIN за „<ph name="DEVICE_NAME" />“:</translation> <translation id="4648491805942548247">Недовољан број дозвола</translation> <translation id="4648499713050786492">Откључајте профил да бисте додали особу.</translation> @@ -3337,6 +3345,7 @@ <translation id="4863769717153320198">Изгледа да је у питању <ph name="WIDTH" />×<ph name="HEIGHT" /> (подразумевано)</translation> <translation id="4864369630010738180">Пријављивање...</translation> <translation id="4864805589453749318">Изаберите родитеља који додељује дозволу за додавање школског налога.</translation> +<translation id="4866265760644917470">Профил је додат.</translation> <translation id="486635084936119914">Аутоматски отварајте одређене типове датотека после преузимања</translation> <translation id="48704129375571883">Додајте још функција</translation> <translation id="4870758487381879312">Унесите лозинку коју сте добили од администратора да бисте добили информације о конфигурацији</translation> @@ -3620,6 +3629,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Променили сте угрожену лозинку. Имате још # угрожену лозинку. Chrome вам препоручује да одмах проверите ову лозинку.}one{Променили сте угрожену лозинку. Имате још # угрожену лозинку. Chrome вам препоручује да одмах проверите ове лозинке.}few{Променили сте угрожену лозинку. Имате још # угрожене лозинке. Chrome вам препоручује да одмах проверите ове лозинке.}other{Променили сте угрожену лозинку. Имате још # угрожених лозинки. Chrome вам препоручује да одмах проверите ове лозинке.}}</translation> <translation id="5207949376430453814">Истакни курсор за текст</translation> <translation id="5209320130288484488">Није пронађен ниједан уређај</translation> +<translation id="5209572028385096813">Овим корисником управља Family Link</translation> <translation id="5210365745912300556">Затвори картицу</translation> <translation id="5213481667492808996">Услуга преноса података „<ph name="NAME" />“ је спремна за коришћење</translation> <translation id="5213891612754844763">Прикажи подешавања проксија</translation> @@ -3705,6 +3715,7 @@ <translation id="5302048478445481009">Језик</translation> <translation id="5302932258331363306">Прикажи замене</translation> <translation id="5304276686222516262">Преузимање листе контаката није успело. Проверите мрежну везу или <a href="#" id="tryAgainLink">пробајте поново</a>.</translation> +<translation id="5305145881844743843">Овим налогом управља <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Ништа није инсталирано</translation> <translation id="5307030433605830021">Извор није подржан</translation> <translation id="5308380583665731573">Повезивање</translation> @@ -3718,6 +3729,7 @@ <translation id="5317780077021120954">Сачувај</translation> <translation id="5319359161174645648">Google препоручује Chrome</translation> <translation id="5320112320661303273">Изгледа да сте већ подесили Помоћник на неком другом уређају. Укључите следеће подешавање и искористите Помоћник на још бољи начин.</translation> +<translation id="5320135788267874712">Нов назив уређај</translation> <translation id="532247166573571973">Сервер је можда недоступан. Пробајте поново касније.</translation> <translation id="5324300749339591280">Листа апликација</translation> <translation id="5324780743567488672">Аутоматски подеси временску зону помоћу моје локације</translation> @@ -4086,6 +4098,7 @@ <translation id="5740820643029013514">Користи ненаметљиву размену порука (препоручено)</translation> <translation id="574104302965107104">Пресликавање екрана</translation> <translation id="574209121243317957">Ниво</translation> +<translation id="5742505912938664543">Када овде додате секундарни налог, можете да прегледате веб, преузимате апликације и проверавате Gmail и друге Google услуге помоћу тог налога.</translation> <translation id="5746169159649715125">Сачувај као PDF</translation> <translation id="5747552184818312860">Истиче</translation> <translation id="5747785204778348146">Програмер – нестабилно</translation> @@ -4426,6 +4439,7 @@ <translation id="6129953537138746214">Размак</translation> <translation id="6130692320435119637">Додај WiFi</translation> <translation id="6136114942382973861">Затвори траку са преузимањима</translation> +<translation id="6136287496450963112">Безбедносни кључ није заштићен PIN-ом. Да бисте управљали отисцима прстију, прво направите PIN.</translation> <translation id="6137767437444130246">Кориснички сертификат</translation> <translation id="6138680304137685902">Потпис X9.62 ECDSA путем SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, нема мреже</translation> @@ -4606,6 +4620,7 @@ <translation id="6331566915566907158">Помозите нам да побољшамо функције и учинак Chrome ОС-а</translation> <translation id="6331818708794917058">Сајтови могу да траже да се повезују са MIDI уређајима</translation> <translation id="6333064448949140209">Датотека ће бити послата Google-у ради отклањања грешака</translation> +<translation id="6334444530352320327">Апликације и подешавања ОС-а ће се синхронизовати на свим Chromebook-овима на којима сте пријављени помоћу овог налога.<ph name="LINK_BEGIN" />Подешавања синхронизације<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Сви сајтови могу да приказују све огласе</translation> <translation id="6339668969738228384">Отвори нови профил за <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Повезивање са сервером није успело. Проверите мрежну везу и пробајте поново касније. Ако се проблем настави, рестартујте Chromebook.</translation> @@ -4907,6 +4922,7 @@ <translation id="6709133671862442373">Вести</translation> <translation id="6709357832553498500">Повежи се помоћу <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Претходно</translation> +<translation id="6713233729292711163">Додај пословни профил</translation> <translation id="6715803357256707211">Дошло је до грешке током инсталирања Linux апликације. Кликните на обавештење да бисте пронашли детаљне информације.</translation> <translation id="671619610707606484">Овим бришете <ph name="TOTAL_USAGE" /> података које чувају сајтови</translation> <translation id="671928215901716392">Закључај екран</translation> @@ -5275,6 +5291,7 @@ <translation id="7121362699166175603">Брише историју и аутоматска довршавања у траци за адресу. Google налог може да има друге облике историје прегледања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Режим програмера</translation> <translation id="7121728544325372695">Паметне црте</translation> +<translation id="7122353087820324370">Апликације и подешавања ОС-а се не синхронизују са секундарним налозима.</translation> <translation id="7123030151043029868">Дозвољено им је да аутоматски преузимају више фајлова</translation> <translation id="7123360114020465152">Није више подржан</translation> <translation id="7125148293026877011">Избришите Crostini</translation> @@ -5589,6 +5606,7 @@ <translation id="750509436279396091">Отвори директоријум Преузимања</translation> <translation id="7506093026325926984">Лозинка ће се чувати на овом уређају</translation> <translation id="7506130076368211615">Подесите нову мрежу</translation> +<translation id="7506242536428928412">Подесите нови PIN да бисте користили нови безбедносни кључ</translation> <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> је регистрован за управљање предузећем.</translation> <translation id="7507207699631365376">Погледајте <ph name="BEGIN_LINK" />политику приватности<ph name="END_LINK" /> овог добављача</translation> <translation id="7507930499305566459">Сертификат за одзивник статуса</translation> @@ -5752,6 +5770,7 @@ <translation id="7691077781194517083">Ресетовање овог безбедносног кључа није успело. Грешка <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Надоградња Crostini-ја</translation> <translation id="7696063401938172191">На телефону „<ph name="PHONE_NAME" />“:</translation> +<translation id="7697166915480294040">Детаљи су сакривени док делите екран</translation> <translation id="7697598343108519171">Скенирајте QR кôд помоћу камере</translation> <translation id="7699968112832915395">Додавање налога није успело</translation> <translation id="7701040980221191251">Ништа</translation> @@ -6209,6 +6228,8 @@ <translation id="8184472985242519288">Једнообразно</translation> <translation id="8186609076106987817">Сервер није могао да пронађе датотеку.</translation> <translation id="8188389033983459049">Проверите подешавања уређаја и укључите га да бисте наставили</translation> +<translation id="8189306097519446565">Школски налози</translation> +<translation id="8189750580333936930">Заштићено окружење приватности</translation> <translation id="8190193592390505034">Повезивање са мрежом <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Управљање апликацијама, додацима и темама</translation> <translation id="8195027750202970175">Величина на диску</translation> @@ -6902,6 +6923,7 @@ <translation id="8986362086234534611">Заборави</translation> <translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation> <translation id="8987927404178983737">Месец</translation> +<translation id="8989823300731803443">Наставите претходну сесију.</translation> <translation id="8990209962746788689">Прављење QR кода није успело</translation> <translation id="8991520179165052608">Сајт може да користи микрофон</translation> <translation id="8992117551007229513">{COUNT,plural, =1{1 ставка}one{# ставка}few{# ставке}other{# ставки}}</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index da63680..5faf314 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Portar</translation> <translation id="4647090755847581616">&Stäng flik</translation> <translation id="4647283074445570750">Steg <ph name="CURRENT_STEP" /> av <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Starta appen när du loggar in på surfplattan}computer{Starta appen när du loggar in på datorn}other{Starta appen när du loggar in på enheten}}</translation> <translation id="4647697156028544508">Ange pinkoden för <ph name="DEVICE_NAME" />:</translation> <translation id="4648491805942548247">Otillräckliga behörigheter</translation> <translation id="4648499713050786492">Du måste låsa upp din profil innan du kan lägga till en person.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Spara</translation> <translation id="5319359161174645648">Google rekommenderar Chrome</translation> <translation id="5320112320661303273">Du verkar redan ha konfigurerat assistenten på en annan enhet. Få ut ännu mer av assistenten genom att aktivera följande inställning.</translation> +<translation id="5320135788267874712">Nytt enhetsnamn</translation> <translation id="532247166573571973">Servern kanske inte kan nås. Försök igen senare.</translation> <translation id="5324300749339591280">Applista</translation> <translation id="5324780743567488672">Ange tidszon automatiskt genom att använda din plats</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 3b0a9834..32601826 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -57,6 +57,7 @@ <translation id="1056775291175587022">Hamna mitandao</translation> <translation id="1056898198331236512">Ilani</translation> <translation id="1058262162121953039">PUK</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Weka PIN yako mpya. PIN lazima iwe angalau herufi moja na inaweza kujumuisha herufi za alfabeti, nambari na herufi zingine.}other{Weka PIN yako mpya. PIN lazima iwe angalau herufi # na inaweza kujumuisha herufi za alfabeti, nambari na herufi zingine.}}</translation> <translation id="1059944192885972544">Imepata Vichupo <ph name="NUM" /> Vya '<ph name="SEARCH_TEXT" />'</translation> <translation id="1060292118287751956">Hubaini kasi ya kusasisha skrini</translation> <translation id="1061904396131502319">Muda wa kupumzika umekaribia</translation> @@ -632,9 +633,11 @@ <translation id="1688935057616748272">Andika herufi</translation> <translation id="168991973552362966">Ongeza printa iliyo karibu</translation> <translation id="1689945336726856614">Nakili URL</translation> +<translation id="1690248886740053041">Imeshindwa kuunganisha kwenye mtandao wa simu Wasiliana na mtoa huduma wako ili upate usaidizi wa kiufundi.</translation> <translation id="1692115862433274081">Tumia akaunti nyingine</translation> <translation id="1692118695553449118">Usawazishajii umewashwa</translation> <translation id="1692210323591458290">Zambarau iliyokolea</translation> +<translation id="169279809881363536">Hakuna wasifu uliopatikana. Ili uweke mipangilio ya mtandao mpya, changanua msimbo wa QR kwa kutumia kamera ya kifaa au uweke msimbo wa kuanza kutumia uliotolewa na mtoa huduma wako.</translation> <translation id="1697150536837697295">Sanaa</translation> <translation id="1697686431566694143">Badilisha faili</translation> <translation id="1698122934742150150">Kipindi cha sasa cha hali fiche pekee</translation> @@ -1571,6 +1574,7 @@ <translation id="2770465223704140727">Ondoa kwenye orodha</translation> <translation id="2770690685823456775">Tuma manenosiri yako kwenye folda nyingine</translation> <translation id="2770929488047004208">Ubora wa skrini</translation> +<translation id="2770954829020464827">Maelezo yanafichwa unaposhiriki skrini yako</translation> <translation id="2771268254788431918">Data ya mtandao wa simu imewashwa</translation> <translation id="2771816809568414714">Jibini</translation> <translation id="2772936498786524345">Mjanja</translation> @@ -1938,6 +1942,7 @@ <translation id="3201422919974259695">Vifaa vya USB vinavyopatikana vitaonekana hapa.</translation> <translation id="3202131003361292969">Njia</translation> <translation id="3202173864863109533">Sauti ya kichupo hiki inazimwa.</translation> +<translation id="3202218848974251205">Utaratibu wa Kuwekea Vikwazo vya Faragha</translation> <translation id="3208321278970793882">Programu</translation> <translation id="3208584281581115441">Angalia sasa</translation> <translation id="3208703785962634733">Haijathibitishwa</translation> @@ -2158,6 +2163,7 @@ <translation id="3459697287128633276">Ili kuiruhusu akaunti yako kufikia Duka la Google Play, tafadhali thibitisha na Mtoa huduma za Kitambulisho.</translation> <translation id="3462311546193741693">Hukuondoa kwenye akaunti za tovuti nyingi. Hutaondolewa kwenye Akaunti yako ya Google kwa hivyo data yako iliyosawazishwa inaweza kufutwa.</translation> <translation id="3462413494201477527">Ungependa kughairi ufunguaji wa akaunti?</translation> +<translation id="3464145797867108663">Ongeza wasifu wa kazini</translation> <translation id="346431825526753">Hii ni akaunti ya watoto inayodhibitiwa na <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Lebo</translation> <translation id="3468999815377931311">Simu ya Android</translation> @@ -2279,6 +2285,7 @@ <translation id="360180734785106144">Kutoa vipengele vipya kadri vinavyopatikana</translation> <translation id="3602290021589620013">Hakiki</translation> <translation id="3603622770190368340">Pata cheti cha mtandao</translation> +<translation id="3604193429970465812">Akaunti mbadala</translation> <translation id="3604713164406837697">Badilisha mandhari</translation> <translation id="3605780360466892872">Kitufechini</translation> <translation id="3608576286259426129">Kihakiki cha picha ya mtumiaji</translation> @@ -2603,6 +2610,7 @@ Ungependa kuanza <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">Imeshindwa kuunda njia ya mkato</translation> +<translation id="3943494825379372497">Ungependa kurejesha programu na kurasa?</translation> <translation id="3943582379552582368">&Nyuma</translation> <translation id="3943857333388298514">Bandika</translation> <translation id="3948116654032448504">Tafuta <ph name="SEARCH_ENGINE" /> Picha</translation> @@ -2688,6 +2696,7 @@ <translation id="4046013316139505482">Viendelezi hivi havihitaji kuona na kubadilisha maelezo kwenye tovuti hii.</translation> <translation id="4046123991198612571">Wimbo unaofuata</translation> <translation id="4047726037116394521">Nenda kwenye skrini ya kwanza</translation> +<translation id="4049783682480068824">{COUNT,plural, =1{Anwani # haipatikani. Ili utumie kipengele cha Uhamishaji wa Karibu naye, weka anwani ya barua pepe inayohusishwa na Akaunti yake ya Google kwenye anwani zako.}other{Anwani # hazipatikani. Ili utumie kipengele cha Uhamishaji wa Karibu nao, weka anwani za barua pepe zinazohusishwa na Akaunti zao za Google kwenye anwani zako.}}</translation> <translation id="4050225813016893843">Njia ya uthibitishaji</translation> <translation id="4052120076834320548">Ndogo sana</translation> <translation id="4056908315660577142">Umefikisha kikomo cha muda wa kutumia <ph name="APP_NAME" /> kwenye programu ya Chrome uliowekwa na mzazi wako. Utaweza kuitumia kwa <ph name="TIME_LIMIT" /> kesho.</translation> @@ -3169,7 +3178,6 @@ <translation id="4646675363240786305">Milango</translation> <translation id="4647090755847581616">&Funga Kichupo</translation> <translation id="4647283074445570750">Hatua ya <ph name="CURRENT_STEP" /> kati ya <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Fungua programu unapoingia katika akaunti ukitumia kompyuta kibao}computer{Fungua programu unapoingia katika akaunti ukitumia kompyuta}other{Fungua programu unapoingia katika akaunti ukitumia kifaa chako}}</translation> <translation id="4647697156028544508">Tafadhali ingiza PIN ya "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Idhini isiyotosha</translation> <translation id="4648499713050786492">Tafadhali fungua wasifu wako kabla ya kumwongeza mtumiaji.</translation> @@ -3333,6 +3341,7 @@ <translation id="4863769717153320198">Inaonekana kama <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Chaguomsingi)</translation> <translation id="4864369630010738180">Unaingia katika akaunti...</translation> <translation id="4864805589453749318">Chagua mzazi anayetoa ruhusa ya kuweka akaunti ya shuleni.</translation> +<translation id="4866265760644917470">Wasifu umewekwa.</translation> <translation id="486635084936119914">Fungua baadhi ya aina za faili kiotomatiki baada ya kupakua</translation> <translation id="48704129375571883">Ongeza vipengele vya ziada</translation> <translation id="4870758487381879312">Weka nenosiri lililotolewa na msimamizi ili upate maelezo ya mipangilio</translation> @@ -3616,6 +3625,7 @@ <translation id="5206787458656075734">{COUNT,plural, =1{Imebadilisha nenosiri lililoathiriwa. Una nenosiri # zaidi lililoathiriwa. Chrome inapendekeza ukague nenosiri hili sasa.}other{Imebadilisha nenosiri lililoathiriwa. Una manenosiri # zaidi yaliyoathiriwa. Chrome inapendekeza ukague manenosiri haya sasa.}}</translation> <translation id="5207949376430453814">Angazia kareti ya maandishi</translation> <translation id="5209320130288484488">Hakuna vifaa vilivyopatikana</translation> +<translation id="5209572028385096813">Mtumiaji huyu anasimamiwa kupitia Family Link</translation> <translation id="5210365745912300556">Funga kichupo</translation> <translation id="5213481667492808996">Huduma yako ya data ya '<ph name="NAME" />' iko tayari kutumiwa</translation> <translation id="5213891612754844763">Onyesha mipangilio ya seva mbadala</translation> @@ -3701,6 +3711,7 @@ <translation id="5302048478445481009">Lugha</translation> <translation id="5302932258331363306">Onyesha Vibadala</translation> <translation id="5304276686222516262">Imeshindwa kupakua orodha ya anwani. Tafadhali kagua muunganisho wako wa mtandao, au <a href="#" id="tryAgainLink">ujaribu tena</a>.</translation> +<translation id="5305145881844743843">Akaunti hii inadhibitiwa na <ph name="BEGIN_LINK" /><ph name="DOMAIN" /><ph name="END_LINK" /></translation> <translation id="5305688511332277257">Hakuna iliyosakinishwa</translation> <translation id="5307030433605830021">Chanzo hakitumiki</translation> <translation id="5308380583665731573">Unganisha</translation> @@ -3714,6 +3725,7 @@ <translation id="5317780077021120954">Hifadhi</translation> <translation id="5319359161174645648">Google inapendekeza utumie Chrome</translation> <translation id="5320112320661303273">Inaonekana tayari umeweka mipangilio ya Mratibu kwenye kifaa tofauti. Nufaika hata zaidi na programu yako ya Mratibu kwa kuwasha mipangilio ifuatayo.</translation> +<translation id="5320135788267874712">Jina jipya la kifaa</translation> <translation id="532247166573571973">Huenda seva haifikiki. Jaribu tena baadaye.</translation> <translation id="5324300749339591280">Orodha ya programu</translation> <translation id="5324780743567488672">Weka saa za eneo kiotomatiki kwa kutumia mahali pako</translation> @@ -4081,6 +4093,7 @@ <translation id="5740820643029013514">Tumia hali tulivu ya kutuma ujumbe (inapendekezwa)</translation> <translation id="574104302965107104">Kuakisi skrini</translation> <translation id="574209121243317957">Uzito wa sauti</translation> +<translation id="5742505912938664543">Ukiongeza akaunti mbadala hapa, unaweza kuvinjari wavuti, kupakua programu, kuangalia Gmail yako na huduma zingine za Google kwa kutumia akaunti hiyo.</translation> <translation id="5746169159649715125">Hifadhi kama PDF</translation> <translation id="5747552184818312860">Muda wake unakwisha</translation> <translation id="5747785204778348146">Msanidi programu - sio imara</translation> @@ -4421,6 +4434,7 @@ <translation id="6129953537138746214">Nafasi</translation> <translation id="6130692320435119637">Weka Wi-Fi</translation> <translation id="6136114942382973861">Funga upau wa vipakuliwa</translation> +<translation id="6136287496450963112">Ufunguo wako wa usalama haujalindwa kwa PIN. Ili uweze kudhibiti alama za vidole, unda PIN kwanza.</translation> <translation id="6137767437444130246">Cheti cha mtumiaji</translation> <translation id="6138680304137685902">Sahihi ya X9.62 ECDSA yenye SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, hakuna mtandao</translation> @@ -4601,6 +4615,7 @@ <translation id="6331566915566907158">Tusaidie kuboresha utendaji na vipengele vya Mfumo wa Uendeshaji wa Chrome</translation> <translation id="6331818708794917058">Tovuti zinaweza kuomba ruhusa ya kuunganisha kwenye vifaa vya MIDI</translation> <translation id="6333064448949140209">Faili itatumwa kwa Google kwa ajili ya utatuzi</translation> +<translation id="6334444530352320327">Programu na mipangilio yako ya mfumo wa uendeshaji itasawazishwa kwenye Chromebook zote ambazo umetumia kuingia katika akaunti hii.<ph name="LINK_BEGIN" />Mipangillio ya Kusawazisha<ph name="LINK_END" /></translation> <translation id="6338981933082930623">Tovuti zote zinaweza kukuonyesha matangazo yoyote</translation> <translation id="6339668969738228384">Unda wasifu mpya wa <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="6340017061976355871">Imeshindwa kuunganisha kwenye seva. Tafadhali angalia muunganisho wa mtandao wako kisha ujaribu tena. Kama tatizo litaendelea kwa muda, zima kisha uwashe Chromebook yako.</translation> @@ -4902,6 +4917,7 @@ <translation id="6709133671862442373">Habari</translation> <translation id="6709357832553498500">Unganisha ukitumia <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Iliyopita</translation> +<translation id="6713233729292711163">Ongeza Wasifu wa Kazini</translation> <translation id="6715803357256707211">Hitilafu imetokea wakati wa kusakinisha programu yako ya Linux. Bofya kwenye arifa ili upate maelezo.</translation> <translation id="671619610707606484">Hatua hii itafuta <ph name="TOTAL_USAGE" /> za data iliyohifadhiwa na tovuti</translation> <translation id="671928215901716392">Funga skrini</translation> @@ -5270,6 +5286,7 @@ <translation id="7121362699166175603">Hufuta historia na ukamilishaji kiotomatiki kwenye sehemu ya anwani. Huenda Akaunti yako ya Google ikawa na aina nyingine za historia ya kuvinjari kwenye <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Hali ya Wasanidi Programu</translation> <translation id="7121728544325372695">Dashi Mahiri</translation> +<translation id="7122353087820324370">Programu na mipangilio ya mfumo wa uendeshaji haisawazishwi kwenye akaunti mbadala.</translation> <translation id="7123030151043029868">Zinazoruhusiwa kupakua faili nyingi kiotomatiki</translation> <translation id="7123360114020465152">Haitumiki tena</translation> <translation id="7125148293026877011">Futa Crostini</translation> @@ -5584,6 +5601,7 @@ <translation id="750509436279396091">Fungua folda ya vipakuliwa</translation> <translation id="7506093026325926984">Nenosiri hili litahifadhiwa kwenye kifaa hiki</translation> <translation id="7506130076368211615">Weka mipangilio ya mtandao mpya</translation> +<translation id="7506242536428928412">Weka PIN mpya ili uweze kutumia ufunguo wako mpya wa usalama</translation> <translation id="7506541170099744506">Kifaa chako cha <ph name="DEVICE_TYPE" /> kimesajiliwa kwa usimamizi wa biashara.</translation> <translation id="7507207699631365376">Ona <ph name="BEGIN_LINK" />Sera ya Faragha<ph name="END_LINK" /> ya mtoa huduma huyu</translation> <translation id="7507930499305566459">Cheti cha Jibu la Hali</translation> @@ -5747,6 +5765,7 @@ <translation id="7691077781194517083">Huruhusiwi kubadilisha ufunguo huu wa usalama. Hitilafu ya <ph name="ERROR_CODE" />.</translation> <translation id="7691698019618282776">Toleo jipya la Crostini</translation> <translation id="7696063401938172191">Kwenye '<ph name="PHONE_NAME" />' yako:</translation> +<translation id="7697166915480294040">Maelezo yanafichwa unaposhiriki skrini yako</translation> <translation id="7697598343108519171">Tumia kamera kuchanganua msimbo wa QR</translation> <translation id="7699968112832915395">Imeshindwa kuweka akaunti</translation> <translation id="7701040980221191251">Hamna</translation> @@ -6206,6 +6225,8 @@ <translation id="8184472985242519288">Kingo sawa</translation> <translation id="8186609076106987817">Seva hii haikuweza kupata faili.</translation> <translation id="8188389033983459049">Angalia mipangilio ya kifaa chako na uiwashe ili uendelee</translation> +<translation id="8189306097519446565">Akaunti za shuleni</translation> +<translation id="8189750580333936930">Utaratibu wa Kuwekea Vikwazo vya Faragha</translation> <translation id="8190193592390505034">Inaunganisha kwenye <ph name="PROVIDER_NAME" /></translation> <translation id="8191230140820435481">Kudhibiti programu, viendelezi na mandhari yako</translation> <translation id="8195027750202970175">Ukubwa kwenye diski</translation> @@ -6897,6 +6918,7 @@ <translation id="8986362086234534611">Sahau</translation> <translation id="8986494364107987395">Tumia Google takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi, moja kwa moja</translation> <translation id="8987927404178983737">Mwezi</translation> +<translation id="8989823300731803443">Endelea kutoka mahali ulikoachia.</translation> <translation id="8990209962746788689">Imeshindwa kutunga msimbo wa QR</translation> <translation id="8991520179165052608">Tovuti inaweza kutumia maikrofoni yako</translation> <translation id="8992117551007229513">{COUNT,plural, =1{kipengee kimoja}other{vipengee #}}</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 289b11a0..f6e11ca 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">போர்ட்கள்</translation> <translation id="4647090755847581616">&தாவலை மூடுக</translation> <translation id="4647283074445570750">படி <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{டேப்லெட்டில் உள்நுழையும்போது ஆப்ஸைத் தொடங்கு}computer{கம்ப்யூட்டரில் உள்நுழையும்போது ஆப்ஸைத் தொடங்கு}other{சாதனத்தில் உள்நுழையும்போது ஆப்ஸைத் தொடங்கு}}</translation> <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" க்கான PIN ஐ உள்ளிடுக:</translation> <translation id="4648491805942548247">போதிய அனுமதிகள் இல்லை</translation> <translation id="4648499713050786492">பயனரைச் சேர்க்கும் முன், உங்கள் சுயவிவரத்தைத் திறக்கவும்.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">சேமி</translation> <translation id="5319359161174645648">Google ஆனது Chromeஐப் பரிந்துரைக்கிறது</translation> <translation id="5320112320661303273">நீங்கள் ஏற்கெனவே வேறொரு சாதனத்தில் Assistantடை அமைத்துள்ளதாகத் தெரிகிறது. பின்வரும் அமைப்பை இயக்கி, Assistantடிலிருந்து அதிகப் பலன்களைப் பெறுங்கள்.</translation> +<translation id="5320135788267874712">புதிய சாதனத்தின் பெயர்</translation> <translation id="532247166573571973">சேவையகத்தைத் தொடர்புகொள்ள முடியாதிருக்கலாம். மீண்டும் முயலவும்.</translation> <translation id="5324300749339591280">ஆப்ஸ் பட்டியல்</translation> <translation id="5324780743567488672">எனது இருப்பிடத்தைப் பயன்படுத்தி, தானாகவே நேர மண்டலத்தை அமை</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 54925ed..e5a98b0 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">పోర్ట్లు</translation> <translation id="4647090755847581616">ట్యాబ్ను &మూసివేయి</translation> <translation id="4647283074445570750">దశ <ph name="TOTAL_STEPS" />లో <ph name="CURRENT_STEP" />వది</translation> -<translation id="4647420311443994946">{0,select, tablet{మీరు మీ టాబ్లెట్లో సైన్ ఇన్ చేసినప్పుడు యాప్ను ప్రారంభించండి}computer{మీరు మీ కంప్యూటర్కు సైన్ ఇన్ చేసినప్పుడు యాప్ను ప్రారంభించండి}other{మీరు మీ పరికరంలో సైన్ ఇన్ చేసినప్పుడు యాప్ను ప్రారంభించండి}}</translation> <translation id="4647697156028544508">దయచేసి "<ph name="DEVICE_NAME" />" కోసం PINను నమోదు చేయండి:</translation> <translation id="4648491805942548247">చాలని అనుమతులు</translation> <translation id="4648499713050786492">వ్యక్తిని జోడించే ముందు దయచేసి మీ ప్రొఫైల్ను అన్లాక్ చేయండి.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">సేవ్ చేయి</translation> <translation id="5319359161174645648">Chromeను Google సిఫార్సు చేస్తోంది</translation> <translation id="5320112320661303273">మీరు ఇప్పటికే మరో పరికరంలో Assistantను సెటప్ చేసినట్టుగా అనిపిస్తోంది. కింది సెట్టింగ్ను ఆన్ చేయడం ద్వారా మీ Assistant నుండి ఇంకా మరిన్ని పొందండి.</translation> +<translation id="5320135788267874712">కొత్త పరికరం పేరు</translation> <translation id="532247166573571973">సర్వర్ అందుబాటులో లేకపోవచ్చు. తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="5324300749339591280">యాప్ల లిస్ట్</translation> <translation id="5324780743567488672">మీ స్థానాన్ని ఉపయోగించి సమయ మండలిని స్వయంచాలకంగా సెట్ చేయండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index aeebc30..fc0cc28 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">พอร์ต</translation> <translation id="4647090755847581616">&ปิดแท็บ</translation> <translation id="4647283074445570750">ขั้นตอนที่ <ph name="CURRENT_STEP" /> จาก <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{เริ่มแอปเมื่อคุณลงชื่อเข้าใช้แท็บเล็ต}computer{เริ่มแอปเมื่อคุณลงชื่อเข้าใช้คอมพิวเตอร์}other{เริ่มแอปเมื่อคุณลงชื่อเข้าใช้อุปกรณ์}}</translation> <translation id="4647697156028544508">โปรดป้อน PIN สำหรับ "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">สิทธิ์ไม่เพียงพอ</translation> <translation id="4648499713050786492">โปรดปลดล็อกโปรไฟล์ของคุณก่อนเพิ่มบุคคล</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">บันทึก</translation> <translation id="5319359161174645648">Google ขอแนะนำ Chrome</translation> <translation id="5320112320661303273">ดูเหมือนว่าคุณตั้งค่า Assistant ไว้ในอุปกรณ์อื่นแล้ว ใช้ประโยชน์จาก Assistant ให้มากยิ่งขึ้นด้วยการเปิดการตั้งค่าต่อไปนี้</translation> +<translation id="5320135788267874712">ชื่ออุปกรณ์ใหม่</translation> <translation id="532247166573571973">อาจไม่สามารถเข้าถึงเซิร์ฟเวอร์ โปรดลองอีกครั้งในภายหลัง</translation> <translation id="5324300749339591280">รายชื่อแอป</translation> <translation id="5324780743567488672">ตั้งค่าเขตเวลาโดยอัตโนมัติโดยใช้ตำแหน่งของคุณ</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 4a06ea7..7891268e 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Bağlantı Noktaları</translation> <translation id="4647090755847581616">Sekmeyi Ka&pat</translation> <translation id="4647283074445570750">Adım <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Tabletimde oturum açtığımda uygulama başlat}computer{Bilgisayarımda oturum açtığımda uygulamayı başlat}other{Cihazımda oturum açtığımda uygulamayı başlat}}</translation> <translation id="4647697156028544508">Lütfen "<ph name="DEVICE_NAME" />" için PIN'i girin:</translation> <translation id="4648491805942548247">İzinler yetersiz</translation> <translation id="4648499713050786492">Lütfen bir kişiyi eklemeden önce profilinizin kilidini açın.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Kaydet</translation> <translation id="5319359161174645648">Google, Chrome'u önerir</translation> <translation id="5320112320661303273">Google Asistan'ı başka bir cihazda zaten kurmuş olduğunuz anlaşılıyor. Aşağıdaki ayarları etkinleştirerek Asistanınızdan daha da fazla yararlanın.</translation> +<translation id="5320135788267874712">Yeni cihaz adı</translation> <translation id="532247166573571973">Sunucuya ulaşılamıyor olabilir. Daha sonra tekrar deneyin.</translation> <translation id="5324300749339591280">Uygulamalar listesi</translation> <translation id="5324780743567488672">Konumumu kullanarak saat dilimini otomatik olarak ayarla</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index d9d454c5..084d1bb 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -3177,7 +3177,6 @@ <translation id="4646675363240786305">Порти</translation> <translation id="4647090755847581616">&Закрити вкладку</translation> <translation id="4647283074445570750">Крок <ph name="CURRENT_STEP" /> з <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Запускати додаток, коли ви входите в обліковий запис на планшеті}computer{Запускати додаток, коли ви входите в обліковий запис на комп'ютері}other{Запускати додаток, коли ви входите в обліковий запис на пристрої}}</translation> <translation id="4647697156028544508">Введіть PIN-код для пристрою "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Недостатні дозволи</translation> <translation id="4648499713050786492">Перш ніж додати особу, розблокуйте свій профіль.</translation> @@ -3722,6 +3721,7 @@ <translation id="5317780077021120954">Зберегти</translation> <translation id="5319359161174645648">Google рекомендує Chrome</translation> <translation id="5320112320661303273">Схоже, ви вже налаштували Асистента на іншому пристрої. Отримайте ще більше функцій Асистента, увімкнувши налаштування нижче.</translation> +<translation id="5320135788267874712">Нова назва пристрою</translation> <translation id="532247166573571973">Можливо, сервер недоступний. Спробуйте пізніше.</translation> <translation id="5324300749339591280">Список додатків</translation> <translation id="5324780743567488672">Автоматично визначати часовий пояс на основі ваших геоданих</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index e9f1ac1d..6a576d1 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -3175,7 +3175,6 @@ <translation id="4646675363240786305">پورٹس</translation> <translation id="4647090755847581616">ٹیب &بند کریں</translation> <translation id="4647283074445570750">مرحلہ <ph name="TOTAL_STEPS" /> میں سے <ph name="CURRENT_STEP" /></translation> -<translation id="4647420311443994946">{0,select, tablet{جب آپ اپنے ٹیبلیٹ میں سائن ان کرتے ہیں تو ایپ شروع کریں}computer{جب آپ اپنے کمپیوٹر میں سائن ان کرتے ہیں تو ایپ شروع کریں}other{جب آپ اپنے آلہ میں سائن ان کرتے ہیں تو ایپ شروع کریں}}</translation> <translation id="4647697156028544508">براہ کرم "<ph name="DEVICE_NAME" />" کیلئے PIN درج کریں:</translation> <translation id="4648491805942548247">ناکافی اجازتیں</translation> <translation id="4648499713050786492">کسی شخص کو شامل کرنے سے پہلے براہ کرم اپنا پروفائل غیر مقفل کریں۔</translation> @@ -3720,6 +3719,7 @@ <translation id="5317780077021120954">محفوظ کریں</translation> <translation id="5319359161174645648">Google Chrome کی تجویز کرتا ہے</translation> <translation id="5320112320661303273">ایسا لگتا ہے کہ آپ نے پہلے ہی مختلف آلے پر اسسٹنٹ کو ترتیب دے دیا ہے۔ درج ذیل ترتیب کو آن کر کے آپ اپنی اسسٹنٹ سے اور بھی زیادہ سے زیادہ فائدہ حاصل کریں۔</translation> +<translation id="5320135788267874712">نئے آلے کا نام</translation> <translation id="532247166573571973">ممکن ہے کہ سرور ناقابل رسائی ہو۔ بعد میں دوبارہ کوشش کریں۔</translation> <translation id="5324300749339591280">ایپس کی فہرست</translation> <translation id="5324780743567488672">اپنے مقام کا استعمال کرکے منطقۂ وقت خود بخود سیٹ کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 59b8fd7..c28e99c 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">Portlar</translation> <translation id="4647090755847581616">&Ichki oynani yopish</translation> <translation id="4647283074445570750">Bosqich: <ph name="CURRENT_STEP" /> / <ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Planshetga hisob bilan kirilganda ilova ishga tushsin}computer{Kompyuterga hisob bilan kirilganda ilova ishga tushsin}other{Qurilmaga hisob bilan kirilganda ilova ishga tushsin}}</translation> <translation id="4647697156028544508">“<ph name="DEVICE_NAME" />” uchun PIN-kod kiriting:</translation> <translation id="4648491805942548247">Ruxsatnomalar yetarli emas</translation> <translation id="4648499713050786492">Foydalanuvchini qo‘shish uchun o‘z profilingizga kiring.</translation> @@ -3717,6 +3716,7 @@ <translation id="5317780077021120954">Saqlash</translation> <translation id="5319359161174645648">Google Chrome brauzerini tavsiya qiladi</translation> <translation id="5320112320661303273">Boshqa qurilmada Assistentni sozlagansiz. Quyidagi sozlamalarni yoqish orqali Assistentdan imkoniyatlaridan yanada koʻproq foydalaning.</translation> +<translation id="5320135788267874712">Yangi qurilma nomi</translation> <translation id="532247166573571973">Server bilan aloqa o‘rnatib bo‘lmadi. Keyinroq qayta urinib ko‘ring.</translation> <translation id="5324300749339591280">Ilovalar roʻyxati</translation> <translation id="5324780743567488672">Vaqt mintaqasini geo-ma’lumotlari asosida avtomatik aniqlash</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 7ea7486d..be78699 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -3174,7 +3174,6 @@ <translation id="4646675363240786305">Cổng</translation> <translation id="4647090755847581616">&Đóng thẻ</translation> <translation id="4647283074445570750">Bước <ph name="CURRENT_STEP" />/<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Khởi động ứng dụng khi bạn đăng nhập vào máy tính bảng}computer{Khởi động ứng dụng khi bạn đăng nhập vào máy tính}other{Khởi động ứng dụng khi bạn đăng nhập vào thiết bị}}</translation> <translation id="4647697156028544508">Vui lòng nhập PIN cho "<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Không đủ quyền</translation> <translation id="4648499713050786492">Vui lòng mở khóa hồ sơ của bạn trước khi thêm một người.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Lưu</translation> <translation id="5319359161174645648">Google đề xuất Chrome</translation> <translation id="5320112320661303273">Có vẻ như bạn đã thiết lập Trợ lý trên một thiết bị khác. Hãy khai thác thêm sức mạnh của Trợ lý bằng cách bật tùy chọn cài đặt sau.</translation> +<translation id="5320135788267874712">Tên mới của thiết bị</translation> <translation id="532247166573571973">Máy chủ có thể không truy cập được. Hãy thử lại sau.</translation> <translation id="5324300749339591280">Danh sách ứng dụng</translation> <translation id="5324780743567488672">Tự động đặt múi giờ bằng cách sử dụng vị trí của bạn</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index a7b6285..cdb0816 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -3169,7 +3169,6 @@ <translation id="4646675363240786305">端口</translation> <translation id="4647090755847581616">关闭标签页(&C)</translation> <translation id="4647283074445570750">第 <ph name="CURRENT_STEP" /> 步(共 <ph name="TOTAL_STEPS" /> 步)</translation> -<translation id="4647420311443994946">{0,select, tablet{在您登录平板电脑时启动应用}computer{在您登录计算机时启动应用}other{在您登录设备时启动应用}}</translation> <translation id="4647697156028544508">请输入“<ph name="DEVICE_NAME" />”的 PIN:</translation> <translation id="4648491805942548247">权限不足</translation> <translation id="4648499713050786492">在添加用户前,请先解锁您的个人资料。</translation> @@ -3714,6 +3713,7 @@ <translation id="5317780077021120954">保存</translation> <translation id="5319359161174645648">Google 推荐使用 Chrome</translation> <translation id="5320112320661303273">您似乎已在另一部设备上设置了 Google 助理。您只需开启以下设置,即可更充分地利用 Google 助理。</translation> +<translation id="5320135788267874712">新的设备名称</translation> <translation id="532247166573571973">可能无法连接到服务器,请稍后重试。</translation> <translation id="5324300749339591280">应用列表</translation> <translation id="5324780743567488672">使用您的位置信息自动设置时区</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 4e2285db..c46eb104 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -3173,7 +3173,6 @@ <translation id="4646675363240786305">連接埠</translation> <translation id="4647090755847581616">關閉分頁(&C)</translation> <translation id="4647283074445570750">第 <ph name="CURRENT_STEP" /> 步,共 <ph name="TOTAL_STEPS" /> 步</translation> -<translation id="4647420311443994946">{0,select, tablet{在您登入平板電腦時啟動應用程式}computer{在您登入電腦時啟動應用程式}other{在您登入裝置時啟動應用程式}}</translation> <translation id="4647697156028544508">請輸入「<ph name="DEVICE_NAME" />」的 PIN:</translation> <translation id="4648491805942548247">權限不足</translation> <translation id="4648499713050786492">新增任何使用者前,請先取消鎖定您的個人檔案。</translation> @@ -3718,6 +3717,7 @@ <translation id="5317780077021120954">儲存</translation> <translation id="5319359161174645648">Google 建議使用 Chrome</translation> <translation id="5320112320661303273">您似乎已在其他裝置上設定「Google 助理」。請開啟以下設定,充分運用「Google 助理」的各項功能。</translation> +<translation id="5320135788267874712">新的裝置名稱</translation> <translation id="532247166573571973">可能無法連接伺服器,請稍後再試。</translation> <translation id="5324300749339591280">應用程式清單</translation> <translation id="5324780743567488672">自動使用您的位置設定時區</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 15ff707..42c3d61 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">通訊埠</translation> <translation id="4647090755847581616">關閉分頁(&C)</translation> <translation id="4647283074445570750">第 <ph name="CURRENT_STEP" /> 步,共 <ph name="TOTAL_STEPS" /> 步</translation> -<translation id="4647420311443994946">{0,select, tablet{在你登入平板電腦時啟動應用程式}computer{在你登入電腦時啟動應用程式}other{在你登入裝置時啟動應用程式}}</translation> <translation id="4647697156028544508">請輸入「<ph name="DEVICE_NAME" />」的 PIN:</translation> <translation id="4648491805942548247">權限不足</translation> <translation id="4648499713050786492">新增任何人之前,請先取消鎖定您的個人資料。</translation> @@ -3717,6 +3716,7 @@ <translation id="5317780077021120954">儲存</translation> <translation id="5319359161174645648">Google 推薦使用 Chrome</translation> <translation id="5320112320661303273">你似乎已在其他裝置上設定 Google 助理。開啟下列設定即可運用 Google 助理的更多功能。</translation> +<translation id="5320135788267874712">新的裝置名稱</translation> <translation id="532247166573571973">無法連上伺服器,請稍後再試。</translation> <translation id="5324300749339591280">應用程式清單</translation> <translation id="5324780743567488672">自動使用您的位置資訊設定時區</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 982a2a49..86da5ab 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -3172,7 +3172,6 @@ <translation id="4646675363240786305">Izimbobo</translation> <translation id="4647090755847581616">Vala ithebhu</translation> <translation id="4647283074445570750">Isinyathelo esingu-<ph name="CURRENT_STEP" /> kwezingu-<ph name="TOTAL_STEPS" /></translation> -<translation id="4647420311443994946">{0,select, tablet{Qala uhlelo lokusebenza lapho ungena ngemvume kuthebulethi yakho}computer{Qala uhlelo lokusebenza lapho ungena ngemvume kukhompuyutha yakho}other{Qala uhlelo lokusebenza lapho ungena ngemvume kudivayisi yakho}}</translation> <translation id="4647697156028544508">Sicela ufake iphinikhodi ye-"<ph name="DEVICE_NAME" />":</translation> <translation id="4648491805942548247">Izimvume ezinganele</translation> <translation id="4648499713050786492">Sicela uvule iphrofayela yakho ngaphambi kokungeze umuntu.</translation> @@ -3719,6 +3718,7 @@ <translation id="5317780077021120954">Londoloza</translation> <translation id="5319359161174645648">I-Google incoma i-Chrome</translation> <translation id="5320112320661303273">Kubonakala sengathi ususethe kakade Umsizi kudivayisi ehlukile. Thola okuningi nakakhulu Kumsizi wakho ngokuvula isethingi elandelayo.</translation> +<translation id="5320135788267874712">Igama ledivayisi elisha</translation> <translation id="532247166573571973">Iseva kungenzeka ingafinyeleleki. Zama futhi ngemuva kwesikhathi.</translation> <translation id="5324300749339591280">Uhlu lwezinhlelo zokusebenza</translation> <translation id="5324780743567488672">Setha indawo yesikhathi ngokuzenzakalela usebenzisa indawo yakho</translation>
diff --git a/chrome/app/resources/google_chrome_strings_af.xtb b/chrome/app/resources/google_chrome_strings_af.xtb index 8b39428..a6546907 100644 --- a/chrome/app/resources/google_chrome_strings_af.xtb +++ b/chrome/app/resources/google_chrome_strings_af.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Dit is 'n sekondêre installering van Chrome en kan nie jou verstekblaaier gemaak word nie.</translation> <translation id="2348335408836342058">Chrome het toestemming nodig om toegang te kry tot jou kamera en mikrofoon vir hierdie werf</translation> <translation id="234869673307233423">Chrome kan nie jou wagwoorde nagaan nie. Probeer later weer.</translation> +<translation id="235650106824528204">Enige Chrome-data wat tydens die gebruik van hierdie profiel gegenereer word (soos die skepping van boekmerke, geskiedenis, wagwoorde, en ander instellings) kan deur die werkprofieladministrateur verwyder word. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome kon nie jou data sinkroniseer nie, omdat sinkronisering nie vir jou domein beskikbaar is nie.</translation> <translation id="2467438592969358367">Google Chrome wil jou wagwoorde uitvoer. Tik jou Windows-wagwoord in om dit toe te laat.</translation> <translation id="2485422356828889247">Deïnstalleer</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">Meer oor Chrome-bedryfstelsel</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Kon nie Chrome begin nie. Probeer weer.</translation> +<translation id="5851757216820085940">As jy veelvuldige Google-rekeninge het, kan jy hulle by jou <ph name="DEVICE_TYPE" /> voeg. Jou rekeninge sal in Chrome-blaaier en Play Winkel beskikbaar wees, asook dienste soos Gmail, Drive en YouTube.<ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome probeer tans om wagwoorde te wysig.</translation> <translation id="5895138241574237353">Herbegin</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Netwerkaanmelding</translation> <translation id="5940385492829620908">Jou web, boekmerke en ander Chrome-goed woon hier.</translation> <translation id="5941830788786076944">Maak Google Chrome die verstekblaaier</translation> <translation id="6070348360322141662">Google Chrome sal jou data enkripteer vir bykomende sekuriteit</translation> +<translation id="608006075545470555">Voeg werkprofiel by hierdie blaaier</translation> <translation id="6113794647360055231">Chrome het pas beter geword</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome-bedryfstelsel word moontlik gemaak deur bykomende <ph name="BEGIN_LINK_CROS_OSS" />oopbron-sagteware<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Dateer Google Chrome tans op (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS-stelsel</translation> <translation id="6650333065969705433">Om Rosetta te gebruik om beskermde media te speel, moet jy Chrome herbegin.</translation> <translation id="6676384891291319759">Gaan by die internet in</translation> <translation id="6679975945624592337">Laat Google Chrome in die agtergrond loop</translation> <translation id="6750954913813541382">Chrome stuur die teks wat jy in die blaaier tik na Google om spelfoute reg te maak.</translation> +<translation id="6755885556185485672">Chrome OS het nie reg toegemaak nie.</translation> <translation id="677276454032249905">Verlaat Chrome in elk geval?</translation> <translation id="683440813066116847">Inkomende reël vir Google Chrome Kanarie om mDNS-verkeer toe te laat.</translation> <translation id="6885412569789873916">Chrome Beta-programme</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">'n Spesiale sekuriteitsopdatering vir Google Chrome is sopas toegepas. Herbegin nou en ons sal jou oortjies teruglaai.</translation> <translation id="8521348052903287641">Inkomende reël vir Google Chrome Dev om mDNS-verkeer toe te laat.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Hierdie werkprofiel is heeltemal apart van jou persoonlike profiel.</translation> <translation id="8556340503434111824">Daar is 'n nuwe weergawe van Google Chrome beskikbaar en dit is vinniger as ooit.</translation> <translation id="861359755029082151">Rosetta maak dit vir Chrome moontlik om die beskemde media op hierdie bladsy te speel.</translation> <translation id="8614913330719544658">Google Chrome reageer nie. Herbegin nou?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Om dit vir Chrome moontlik te maak om beskermde media te speel, moet jy Rosetta installeer. Wil jy dit nou installeer?</translation> <translation id="8914504000324227558">Herbegin Chrome</translation> <translation id="8922193594870374009">Meld op albei toestelle by Chrome aan om 'n nommer van <ph name="ORIGIN" /> af na jou Android-foon te stuur.</translation> +<translation id="8986207147630327271">Jy voeg tans 'n werkprofiel by hierdie blaaier en gee jou administrateur beheer oor net jou werkprofiel.</translation> <translation id="8999208279178790196">{0,plural, =0{'n Chrome-opdatering is beskikbaar}=1{'n Chrome-opdatering is beskikbaar}other{'n Chrome-opdatering is al # dae lank beskikbaar}}</translation> <translation id="9026991721384951619">Chrome-bedrystelsel kon nie jou data sinkroniseer nie, omdat jou rekening se aanmeldbesonderhede verouderd is.</translation> <translation id="9067395829937117663">Google Chrome vereis Windows 7 of nuwer.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index c49315de..e672d69 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">ይሄ ሁለተኛ የGoogle Chrome ጭነት ነው፣ እና ነባሪ አሳሽዎ ማድረግ አይቻልም።</translation> <translation id="2348335408836342058">Chrome ለዚህ ጣቢያ የእርስዎን ካሜራ እና ማይክሮፎን ለመድረስ ፈቃድ ያስፈልገዋል</translation> <translation id="234869673307233423">Chrome የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ቆይተው እንደገና ይሞክሩ።</translation> +<translation id="235650106824528204">ይህን መገለጫ በሚጠቀሙበት ጊዜ የመነጨ ማንኛውም የChrome ውሂብ (እንደ የዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች መፈጠር ያለ) በስራ መገለጫ አስተዳዳሪው ሊወገድ ይችላል። <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">ማመሳሰል ለጎራዎ ስለማይገኝ Google Chrome ውሂብዎን ማመሳሰል አልቻለም።</translation> <translation id="2467438592969358367">Google Chrome የእርስዎን የይለፍ ቃላት ወደ ውጭ መላክ ይፈልጋል። ይህንን ለመፍቀድ የWindows የይለፍ ቃልዎን ይተይቡ።</translation> <translation id="2485422356828889247">አራግፍ</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">ስለ Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chromeን ማስጀመር አልተቻለም። እንደገና ይሞክሩ።</translation> +<translation id="5851757216820085940">በርካታ የGoogle መለያዎች ካለዎት ወደ የእርስዎ <ph name="DEVICE_TYPE" /> ሊያክሏቸው ይችላሉ። የእርስዎ መለያዎች በChrome አሳሽ እና Play መደብር ላይ እና እንዲሁም እንደ Gmail፣ Drive እና YouTube ባሉ አገልግሎቶች ላይ ይገኛሉ።<ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome የይለፍ ቃላትን ለማርትዕ እየሞከረ ነው።</translation> <translation id="5895138241574237353">እንደገና ጀምር</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - በአውታረ መረብ ወደ መለያ መግባት</translation> <translation id="5940385492829620908">የእርስዎ ድር፣ ዕልባቶች እና ሌሎች የChrome ነገሮች እዚህ ይኖራሉ።</translation> <translation id="5941830788786076944">Google Chromeን መነሻ ማሰሻ አድርግ</translation> <translation id="6070348360322141662">ለተጨማሪ ደህንነት ሲባል Google Chrome ውሂብዎን ያመሰጥረዋል</translation> +<translation id="608006075545470555">የስራ መገለጫ ወደዚህ አሳሽ ያክሉ</translation> <translation id="6113794647360055231">Chrome አሁን ይበልጥ ተሻሽሏል</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome ቅድመ-ይሁንታ</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome ስርዓተ ክወና በተጨማሪ <ph name="BEGIN_LINK_CROS_OSS" />ክፍት ምንጭ ሶፍትዌር<ph name="END_LINK_CROS_OSS" /> እውን ሊሆን ችሏል።</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome ግንባታ</translation> <translation id="6566149418543181476">Google Chromeን በማዘመን ላይ (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">የChrome OS ሥርዓት</translation> <translation id="6650333065969705433">Rosettaን በመጠቀም የተጠበቀ ሚዲያን ለማጫወት Chromeን ዳግም ማስነሳት አለብዎት።</translation> <translation id="6676384891291319759">በይነመረብን ተዳረስ</translation> <translation id="6679975945624592337">Google Chrome ጀርባ ውስጥ ይሂድ</translation> <translation id="6750954913813541382">የሥርዓተ ሆሄ ህጸሶችን ለማስተካከል እርስዎን የሚተይቡትን ጽሑፍ Chrome ወደ Google በአሳሽ ውስጥ ይልካል</translation> +<translation id="6755885556185485672">Chrome OS በትክክል አልጠፋም።</translation> <translation id="677276454032249905">የሆነው ሆኖ ከChrome ይወጣ?</translation> <translation id="683440813066116847">Google Chrome Canary ለmDNS ትራፊክ ለመፍቀድ የውስጥ ደንብ።</translation> <translation id="6885412569789873916">የChrome ቅድመ-ይሁነታ መተግበሪያዎች</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">ለGoogle Chrome ልዩ የደህንነት ዝማኔ አሁን ተጭኗል። አሁን እንደገና ያስጀምሩ እና የእርስዎን ትሮች እንደነበሩ እንመልሳቸዋለን።</translation> <translation id="8521348052903287641">የmDNS ትራፊክን ለመፍቀድ የGoogle Chrome ገንቢ የውስጥ ደንብ።</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">ይህ የስራ መገለጫ ከግል መገለጫዎ ሙሉ ለሙሉ የተለየ ነው።</translation> <translation id="8556340503434111824">አዲስ የGoogle Chrome ስሪት አለ፣ እና ከመቼውም በበለጠ ፈጣን ነው።</translation> <translation id="861359755029082151">Chrome በዚህ ገጽ ላይ ያለው የተጠበቀ ሚዲያ እንዲያጫውት Rosetta ያስችለዋል።</translation> <translation id="8614913330719544658">Google Chrome መልስ አይሰጥም። አሁን ዳግም ይጀምር?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Chrome የተጠበቀ ሚዲያን እንዲያጫውት ለማስቻል Rosettaን መጫን አለብዎት። አሁን ሊጭኑት ይፈልጋሉ?</translation> <translation id="8914504000324227558">Chromeን ዳግም አስጀምር</translation> <translation id="8922193594870374009">አንድ ቁጥር ከ<ph name="ORIGIN" /> ወደ የእርስዎ Android ስልክ ለመላክ በሁለቱም መሣሪያዎች ላይ በመለያ ወደ Chrome ይግቡ።</translation> +<translation id="8986207147630327271">የስራ መገለጫን ወደዚህ አሳሽ እያከሉ እና ለአስተዳዳሪዎ በስራ መገለጫው ላይ ብቻ ቁጥጥር እየሰጡ ነው።</translation> <translation id="8999208279178790196">{0,plural, =0{የChrome ዝማኔ አለ}=1{የChrome ዝማኔ አለ}one{አንድ የChrome ዝማኔ ለ# ቀኖች ነበር}other{አንድ የChrome ዝማኔ ለ# ቀኖች ነበር}}</translation> <translation id="9026991721384951619">የመለያዎ መግቢያ ዝርዝሮች ጊዜያቸው ያለፈባቸው ስለሆኑ Chrome OS ውሂብዎን ማመሳሰል አልቻለም።</translation> <translation id="9067395829937117663">Google Chrome Windows 7 ወይም ከዚያ በላይ ያስፈልገዋል።</translation>
diff --git a/chrome/app/resources/google_chrome_strings_az.xtb b/chrome/app/resources/google_chrome_strings_az.xtb index 76970ee..cc5a7cc 100644 --- a/chrome/app/resources/google_chrome_strings_az.xtb +++ b/chrome/app/resources/google_chrome_strings_az.xtb
@@ -54,6 +54,7 @@ <translation id="2309047409763057870">Bu Chromium'un ikinci quraşdırmasıdır və defolt brauzer kimi ayarlana bilmir.</translation> <translation id="2348335408836342058">Chrome bu sayt üçün kamera və mikrofona giriş tələb edir</translation> <translation id="234869673307233423">Chrome parollarınızı yoxlaya bilmir. Sonra yenidən cəhd edin.</translation> +<translation id="235650106824528204">Bu profilin istifadəsi zamanı yaranan hər hansı bir Chrome datası (əlfəcinlər, tarixçələr, parolların yaradılması və digər ayarlar kimi) iş profili administratoru tərəfindən silinə bilər. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome datanızı sinxronizasiya edə bilmədi, çünki sinxronizasiya domeniniz üçün əlçatan deyil.</translation> <translation id="2467438592969358367">Google Chrome parolları eksport etmək istəyir. Buna icazə vermək üçün Windows parolunuzu yazın.</translation> <translation id="2485422356828889247">Sistemdən silin</translation> @@ -173,12 +174,14 @@ <translation id="573759479754913123">Chrome OS haqqında</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome başlamadı. Yenidən sınayın.</translation> +<translation id="5851757216820085940">Birdən çox Google Hesabınız varsa, onları <ph name="DEVICE_TYPE" />cihazınıza əlavə edə bilərsiniz. Hesablarınız Chrome brauzerində və Play Marketdə, eləcə də Gmail, Disk və YouTube kimi xidmətlərdə əlçatan olacaq.<ph name="LINK_BEGIN" />Ətraflı məlumat<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome parolları redaktə etməyə çalışır.</translation> <translation id="5895138241574237353">Yenidən başladın</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Şəbəkəyə Giriş</translation> <translation id="5940385492829620908">Veb, əlfəcinlər və Chrome'a aid hər şeyiniz buradadır.</translation> <translation id="5941830788786076944">Google Chrome'u defolt brauzer edin</translation> <translation id="6070348360322141662">Əlavə təhlükəsizlik üçün Google Chrome datanı şifrələyəcək</translation> +<translation id="608006075545470555">Bu brauzerə İş Profili əlavə edin</translation> <translation id="6113794647360055231">Chrome daha da keyfiyyətli oldu</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -190,10 +193,12 @@ <translation id="6368958679917195344">Chrome OS əlavə <ph name="BEGIN_LINK_CROS_OSS" />açıq mənbə proqram təminatı ilə<ph name="END_LINK_CROS_OSS" /> mümkün oldu.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome güncəllənir (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS sistemi</translation> <translation id="6650333065969705433">Qorunan medianı Rosetta vasitəsilə oxutmaq üçün Chrome yenidən başladılmalıdır.</translation> <translation id="6676384891291319759">İnternet</translation> <translation id="6679975945624592337">Google Chrome'a Arxa Fonda İşləməyə İcazə Verin</translation> <translation id="6750954913813541382">Orfoqrafik səhvləri düzəltmək üçün Chrome brauzerində yazdığınız mətni Google'a göndərir</translation> +<translation id="6755885556185485672">Chrome OS düzgün qapadılmadı.</translation> <translation id="677276454032249905">Chrome'dan istənilən hada çıxılsın?</translation> <translation id="683440813066116847">mDNS trafikinə imkan vermək üçün Google Chrome Canary üçün daxil olan qayda.</translation> <translation id="6885412569789873916">Chrome Beta Tətbiqləri</translation> @@ -252,6 +257,7 @@ <translation id="8498858610309223613">Google Chrome üçün xüsusi təhlükəsizlik yeniləməsi indicə tətbiq edildi. İndi yenidən başladın və açdığınız tablar bərpa ediləcək.</translation> <translation id="8521348052903287641">mDNS nəqliyyatına icazə vermək üçün Google Chrome Dev ümumi qaydası.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Bu iş profili şəxsi profilinizdən tamamilə ayrıdır.</translation> <translation id="8556340503434111824">Yeni Google Chrome versiyası var ki, öncəkindən daha sürətlidir.</translation> <translation id="861359755029082151">Rosetta Chrome'un bu səhifədə qorunan medianı oxutmasına imkan verir.</translation> <translation id="8614913330719544658">Google Chrome cavab vermir. Yenidən başladılsın?</translation> @@ -270,6 +276,7 @@ <translation id="8907709077090383765">Chrome'un qorunan media oxutmasına imkan vermək üçün Rosetta quraşdırılmalıdır. İndi quraşdırmaq istəyirsiniz?</translation> <translation id="8914504000324227558">Chrome'u yenidən başladın</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> cihazından Android telefonunuza nömrə göndərmək üçün hər iki cihazda Chrome'a daxil olun.</translation> +<translation id="8986207147630327271">Bu brauzerə iş profili əlavə edirsiniz və administratorunuza yalnız iş profili üzərində nəzarət verirsiniz.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome güncəlləməsi əlçatandır}=1{Chrome güncəlləməsi əlçatandır}other{Chrome güncəlləməsi # gün əlçatan olub}}</translation> <translation id="9026991721384951619">Chrome OS datanızı sinxronizasiya edə bilmir, çünki hesaba giriş məlumatlarınız köhnədir.</translation> <translation id="9067395829937117663">Google Chrome Windows 7 və ya daha yeni versiya tələb edir.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index 94c2304..3920ae1 100644 --- a/chrome/app/resources/google_chrome_strings_bg.xtb +++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -54,6 +54,7 @@ <translation id="2309047409763057870">Тази инсталация на Google Chrome е алтернативна и не може да се зададе като браузър по подразбиране.</translation> <translation id="2348335408836342058">Chrome се нуждае от разрешение за достъп до камерата и микрофона ви за този сайт</translation> <translation id="234869673307233423">Chrome не може да провери паролите ви. Опитайте пак по-късно.</translation> +<translation id="235650106824528204">Данните в Chrome, които са генерирани при използването на този служебен потребителски профил (напр. създаването на отметки, историята, паролите и други настройки), могат да бъдат премахнати от администратора му. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome не можа да синхронизира данните ви, защото синхронизирането не е налице за домейна ви.</translation> <translation id="2467438592969358367">Google Chrome иска да експортира паролите ви. За да разрешите това, въведете паролата си за Windows.</translation> <translation id="2485422356828889247">Деинсталиране</translation> @@ -170,12 +171,14 @@ <translation id="573759479754913123">Всичко за Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome не можа да се стартира. Опитайте отново.</translation> +<translation id="5851757216820085940">Ако имате няколко профила в Google, можете да ги добавите към устройството си <ph name="DEVICE_TYPE" />. Профилите ви ще бъдат налични в браузъра Chrome, в Google Play Магазин и в други услуги, като например Gmail, Диск и YouTube. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome се опитва да редактира паролите.</translation> <translation id="5895138241574237353">Рестартиране</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Вход в мрежата</translation> <translation id="5940385492829620908">Тук ще намерите посещаваните от вас места в мрежата, отметките и другите си неща в Chrome.</translation> <translation id="5941830788786076944">Искам Google Chrome да бъде браузърът по подразбиране</translation> <translation id="6070348360322141662">За повишаване на сигурността Google Chrome ще шифрова данните ви</translation> +<translation id="608006075545470555">Добавяне на служебен потребителски профил към този браузър</translation> <translation id="6113794647360055231">Chrome се подобри</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome бета</translation> @@ -187,10 +190,12 @@ <translation id="6368958679917195344">Chrome OS е възможна благодарение на допълнителен <ph name="BEGIN_LINK_CROS_OSS" />софтуер с отворен код<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome се актуализира (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Система Chrome OS</translation> <translation id="6650333065969705433">Трябва да рестартирате Chrome, за да използвате Rosetta за възпроизвеждане на защитено мултимедийно съдържание.</translation> <translation id="6676384891291319759">Достъп до интернет</translation> <translation id="6679975945624592337">Разрешаване на Google Chrome да се изпълнява на заден план</translation> <translation id="6750954913813541382">С цел поправка на правописни грешки Chrome изпраща до Google текста, който въвеждате в браузъра</translation> +<translation id="6755885556185485672">Chrome OS не се изключи правилно.</translation> <translation id="677276454032249905">Искате ли да излезете от Chrome въпреки това?</translation> <translation id="683440813066116847">Правило за Google Chrome Canary за допускане на входящия трафик за mDNS.</translation> <translation id="6885412569789873916">Приложения за Chrome бета</translation> @@ -249,6 +254,7 @@ <translation id="8498858610309223613">Току-що бе приложена специална актуализация за сигурност за Google Chrome. Рестартирайте сега – ще възстановим разделите ви.</translation> <translation id="8521348052903287641">Правило за Google Chrome Dev за допускане на входящия трафик за mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Този служебен потребителски профил е изцяло отделен от личния ви.</translation> <translation id="8556340503434111824">Налице е нова версия на Google Chrome, която е по-бърза от всякога.</translation> <translation id="861359755029082151">Rosetta дава възможност на Chrome да възпроизвежда защитеното мултимедийно съдържание на тази страница.</translation> <translation id="8614913330719544658">Google Chrome блокира. Да се стартира ли отново сега?</translation> @@ -267,6 +273,7 @@ <translation id="8907709077090383765">Трябва да инсталирате Rosetta, за да може Chrome да възпроизвежда защитено мултимедийно съдържание. Искате ли да го направите сега?</translation> <translation id="8914504000324227558">Повторно стартиране на Chrome</translation> <translation id="8922193594870374009">За да изпратите номер от <ph name="ORIGIN" /> до телефона си с Android, влезте в Chrome и на двете устройства.</translation> +<translation id="8986207147630327271">Добавяте служебен потребителски профил към този браузър и предоставяте на администратора си контрол само над него.</translation> <translation id="8999208279178790196">{0,plural, =0{Налице е актуализация за Chrome}=1{Налице е актуализация за Chrome}other{Налице е актуализация за Chrome от # дни}}</translation> <translation id="9026991721384951619">Chrome OS не можа да синхронизира данните ви, защото потребителското име и паролата за вход в профила ви не са актуални.</translation> <translation id="9067395829937117663">За Google Chrome се изисква Windows 7 или по-нова версия.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb index af1c19e..479660c 100644 --- a/chrome/app/resources/google_chrome_strings_bs.xtb +++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chromea, pa on ne može biti vaš zadani preglednik.</translation> <translation id="2348335408836342058">Chromeu treba odobrenje za pristup vašoj kameri i mikrofonu na ovoj web lokaciji</translation> <translation id="234869673307233423">Chrome ne može provjeravati vaše lozinke. Pokušajte ponovo kasnije.</translation> +<translation id="235650106824528204">Sve podatke iz Chromea koji se generiraju tijekom upotrebe ovog profila (primjerice izradom oznaka, povijesti, zaporki i drugih postavki) može ukloniti administrator poslovnog profila. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome ne može sinhronizirati vaše podatke jer sinhronizacija nije dostupna za vašu domenu.</translation> <translation id="2467438592969358367">Google Chrome želi izvesti vaše lozinke. Unesite svoju lozinku za Windows da ovo omogućite.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> @@ -175,12 +176,14 @@ <translation id="573759479754913123">O Chrome OS-u</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Pokretanje Chromea nije uspjelo. Ponovite.</translation> +<translation id="5851757216820085940">Ako imate više Google računa, možete ih dodati na uređaj <ph name="DEVICE_TYPE" />. Vaši će računi biti dostupni u pregledniku Chrome i u Trgovini Play te na uslugama kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome pokušava urediti lozinke.</translation> <translation id="5895138241574237353">Ponovo pokreni</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – prijava na mrežu</translation> <translation id="5940385492829620908">Vaša aktivnost na webu, oznake i drugi sadržaji s Chromea se nalaze ovdje.</translation> <translation id="5941830788786076944">Postavite Google Chrome kao zadani preglednik</translation> <translation id="6070348360322141662">Za dodatnu sigurnost, Google Chrome će šifrirati vaše podatke</translation> +<translation id="608006075545470555">Dodavanje poslovnog profila u ovaj preglednik</translation> <translation id="6113794647360055231">Chrome je upravo postao još bolji</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -192,10 +195,12 @@ <translation id="6368958679917195344">Chrome OS je moguć zahvaljujući dodatnom <ph name="BEGIN_LINK_CROS_OSS" />softveru otvorenog koda<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Ažuriranje Google Chromea (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">OS Chrome</translation> <translation id="6650333065969705433">Da koristite Rosettu za reproduciranje zaštićenih medijskih fajlova, morate ponovo pokrenuti Chrome.</translation> <translation id="6676384891291319759">Pristupite internetu</translation> <translation id="6679975945624592337">Neka Google Chrome radi u pozadini</translation> <translation id="6750954913813541382">Za ispravak pravopisnih grešaka, Chrome šalje Googleu tekst koji napišete u pregledniku</translation> +<translation id="6755885556185485672">OS Chrome nije se ispravno zatvorio.</translation> <translation id="677276454032249905">Ipak želite napustiti Chrome?</translation> <translation id="683440813066116847">Ulazno pravilo da Google Chrome Canary dozvoli mDNS saobraćaj.</translation> <translation id="6885412569789873916">Aplikacije za Chrome Beta</translation> @@ -254,6 +259,7 @@ <translation id="8498858610309223613">Upravo je izvršeno posebno sigurnosno ažuriranje za Google Chrome. Sada ga ponovo pokrenite i vratićemo vaše kartice.</translation> <translation id="8521348052903287641">Ulazno pravilo da Google Chrome Dev dozvoli mDNS saobraćaj.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Ovaj poslovni profil potpuno je odvojen od vašeg osobnog profila.</translation> <translation id="8556340503434111824">Dostupna je nova verzija Google Chromea koji je brži nego ikad.</translation> <translation id="861359755029082151">Rosetta omogućava Chromeu da reproducira zaštićene medijske fajlove na ovoj stranici.</translation> <translation id="8614913330719544658">Google Chrome ne reagira. Ponovo pokrenuti sada?</translation> @@ -272,6 +278,7 @@ <translation id="8907709077090383765">Da omogućite Chromeu da reproducira zaštićene medijske fajlove, morate instalirati Rosettu. Želite li je instalirati sada?</translation> <translation id="8914504000324227558">Ponovo pokreni Chrome</translation> <translation id="8922193594870374009">Da pošaljete broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se u Chrome na oba uređaja.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj preglednik i administratoru dodjeljujete kontrolu samo nad poslovnim profilom.</translation> <translation id="8999208279178790196">{0,plural, =0{Dostupno je ažuriranje Chromea}=1{Dostupno je ažuriranje Chromea}one{Ažuriranje Chromea je dostupno # dan}few{Ažuriranje Chromea je dostupno # dana}other{Ažuriranje Chromea je dostupno # dana}}</translation> <translation id="9026991721384951619">Chrome OS nije mogao sinhronizirati vaše podatke jer su podaci o prijavi računa zastarjeli.</translation> <translation id="9067395829937117663">Za Google Chrome je potreban Windows 7 ili novija verzija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index 2c7d944..1ab0ec6 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Aquesta és una instal·lació secundària de Google Chrome i no pot definir-se com a navegador predeterminat.</translation> <translation id="2348335408836342058">Per visitar aquest lloc web, Chrome necessita permís per accedir a la càmera i al micròfon</translation> <translation id="234869673307233423">Chrome no pot comprovar les teves contrasenyes. Torna-ho a provar més tard.</translation> +<translation id="235650106824528204">L'administrador del perfil de treball pot suprimir qualsevol dada de Chrome que es generi durant l'ús d'aquest perfil (com ara les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració que s'hagin creat). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome no ha pogut sincronitzar les dades perquè la sincronització no està disponible per al vostre domini.</translation> <translation id="2467438592969358367">Google Chrome vol exportar les teves contrasenyes. Escriu la contrasenya de Windows per permetre-ho.</translation> <translation id="2485422356828889247">Desinstal·la</translation> @@ -168,12 +169,14 @@ <translation id="573759479754913123">Sobre Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">No s'ha pogut iniciar Chrome. Torna-ho a provar.</translation> +<translation id="5851757216820085940">Si tens diversos Comptes de Google, pots afegir-los al teu <ph name="DEVICE_TYPE" />. Estaran disponibles al navegador Chrome i a Play Store, i també en serveis com ara Gmail, Drive i YouTube. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome està provant d'editar les contrasenyes.</translation> <translation id="5895138241574237353">Reinicia</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Inici de sessió a la xarxa</translation> <translation id="5940385492829620908">El vostre web, les adreces d'interès i altres coses de Chrome resideixen aquí.</translation> <translation id="5941830788786076944">Estableix Google Chrome com el navegador predeterminat</translation> <translation id="6070348360322141662">Per a més seguretat, Google Chrome encriptarà les teves dades</translation> +<translation id="608006075545470555">Afegeix un perfil de treball a aquest navegador</translation> <translation id="6113794647360055231">Chrome és millor que mai</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -185,10 +188,12 @@ <translation id="6368958679917195344">Chrome OS és possible gràcies a <ph name="BEGIN_LINK_CROS_OSS" />programari addicional de codi obert<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">S'està actualitzant Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Sistema Chrome OS</translation> <translation id="6650333065969705433">Perquè Rosetta pugui reproduir contingut multimèdia protegit, has de reiniciar Chrome.</translation> <translation id="6676384891291319759">Accedeix a Internet</translation> <translation id="6679975945624592337">Permet que Google Chrome s'executi en segon pla</translation> <translation id="6750954913813541382">Per corregir els errors d'ortografia, Chrome envia a Google el text que escrius al navegador</translation> +<translation id="6755885556185485672">Chrome OS no s'ha aturat correctament.</translation> <translation id="677276454032249905">Vols sortir de Chrome igualment?</translation> <translation id="683440813066116847">Regla d'entrada de Google Chrome Canary per permetre el trànsit de mDNS.</translation> <translation id="6885412569789873916">Aplicacions de Chrome Beta</translation> @@ -247,6 +252,7 @@ <translation id="8498858610309223613">S'acaba d'aplicar una actualització de seguretat especial per a Google Chrome. Reinicia el navegador i restaurarem les pestanyes.</translation> <translation id="8521348052903287641">Regla d'entrada de Google Chrome Dev per permetre el trànsit d'mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Aquest perfil de treball és completament independent del teu perfil personal.</translation> <translation id="8556340503434111824">Hi ha disponible una nova versió de Google Chrome, i és més ràpida que mai.</translation> <translation id="861359755029082151">Rosetta permet que Chrome reprodueixi el contingut multimèdia protegit d'aquesta pàgina.</translation> <translation id="8614913330719544658">Google Chrome no respon. Voleu tornar-lo a iniciar ara?</translation> @@ -265,6 +271,7 @@ <translation id="8907709077090383765">Per permetre que Chrome reprodueixi contingut multimèdia protegit, has d'instal·lar Rosetta. Vols instal·lar-lo ara?</translation> <translation id="8914504000324227558">Torna a iniciar Chrome</translation> <translation id="8922193594870374009">Per enviar un número del dispositiu <ph name="ORIGIN" /> al teu telèfon Android, inicia la sessió a Chrome en tots dos dispositius.</translation> +<translation id="8986207147630327271">Estàs afegint un perfil de treball a aquest navegador i donant control al teu administrador únicament sobre el perfil de treball.</translation> <translation id="8999208279178790196">{0,plural, =0{Hi ha una actualització de Chrome disponible}=1{Hi ha una actualització de Chrome disponible}other{Fa # dies que hi ha una actualització de Chrome disponible}}</translation> <translation id="9026991721384951619">Chrome OS no ha pogut sincronitzar les vostres dades perquè les dades d'inici de sessió del compte no estan actualitzades.</translation> <translation id="9067395829937117663">Google Chrome requereix Windows 7 o una versió posterior.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 08167ee..da5141b 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Dette er en sekundær installation af Google Chrome, og den kan ikke gøres til din standardbrowser.</translation> <translation id="2348335408836342058">Chrome skal have tilladelse til at bruge dit kamera og din mikrofon på dette website</translation> <translation id="234869673307233423">Chrome kan ikke tjekke dine adgangskoder. Prøv igen senere.</translation> +<translation id="235650106824528204">Alle Chrome-data, der genereres ved brug af denne profil (f.eks. oprettelse af bogmærker, historik, adgangskoder og andre indstillinger) kan fjernes af arbejdsprofilens administrator. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation> <translation id="2467438592969358367">Google Chrome anmoder om at eksportere dine adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation> <translation id="2485422356828889247">Afinstaller</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Om Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome kunne ikke startes. Prøv igen.</translation> +<translation id="5851757216820085940">Hvis du har flere Google-konti, kan du føje dem til din <ph name="DEVICE_TYPE" />. Dine konti vil være tilgængelige i Chrome-browseren og Play Butik samt tjenester som f.eks. Gmail, Drev og YouTube.<ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome forsøger at redigere adgangskoder.</translation> <translation id="5895138241574237353">Genstart</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Login på netværk</translation> <translation id="5940385492829620908">Dit webindhold, dine bogmærker og andre Chrome-ting kan findes her.</translation> <translation id="5941830788786076944">Gør Google Chrome til din standardbrowser</translation> <translation id="6070348360322141662">Som et ekstra sikkerhedsniveau krypterer Google Chrome dine data</translation> +<translation id="608006075545470555">Føj arbejdsprofilen til denne browser</translation> <translation id="6113794647360055231">Chrome er blevet bedre</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">Chrome OS er lavet ved hjælp af <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome for udviklere</translation> <translation id="6566149418543181476">Opdaterer Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS-system</translation> <translation id="6650333065969705433">Du skal genstarte Chrome, før du kan bruge Rosetta til at afspille beskyttede medier.</translation> <translation id="6676384891291319759">Få adgang til internettet</translation> <translation id="6679975945624592337">Lad Google Chrome køre i baggrunden</translation> <translation id="6750954913813541382">Chrome sender den tekst, du angiver i browseren, til Google for at rette stavefejl</translation> +<translation id="6755885556185485672">Chrome OS blev ikke lukket korrekt ned.</translation> <translation id="677276454032249905">Vil du afslutte Chrome alligevel?</translation> <translation id="683440813066116847">Indgående regel for Google Chrome Canary om at tillade mDNS-trafik.</translation> <translation id="6885412569789873916">Apps i Chrome beta</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">En særlig sikkerhedsopdatering til Google Chrome blev netop anvendt. Genstart nu, hvorefter vi gendanner dine faner.</translation> <translation id="8521348052903287641">Indgående regel for udviklerversionen af Chrome om at tillade mDNS-trafik.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Denne arbejdsprofil er totalt adskilt fra din personlige profile.</translation> <translation id="8556340503434111824">Der findes en ny version af Google Chrome, som er hurtigere end nogensinde før.</translation> <translation id="861359755029082151">Når du har installeret Rosetta, kan Chrome afspille de beskyttede medier på denne side.</translation> <translation id="8614913330719544658">Google Chrome svarer ikke. Vil du genstarte nu?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Hvis du vil afspille beskyttede medier i Chrome, skal du installere Rosetta. Vil du installere softwaren nu?</translation> <translation id="8914504000324227558">Genstart Chrome</translation> <translation id="8922193594870374009">Hvis du vil sende et nummer fra <ph name="ORIGIN" /> til din Android-telefon, skal du logge ind på Chrome på begge enheder.</translation> +<translation id="8986207147630327271">Du er ved at føje en arbejdsprofil til denne browser, og du giver kun din administrator kontrol over arbejdsprofilen.</translation> <translation id="8999208279178790196">{0,plural, =0{Der er en tilgængelig Chrome-opdatering}=1{Der er en tilgængelig Chrome-opdatering}one{En Chrome-opdatering har været tilgængelig i # dag}other{En Chrome-opdatering har været tilgængelig i # dage}}</translation> <translation id="9026991721384951619">Chrome OS kunne ikke synkronisere dine data, fordi loginoplysningerne til din konto er forældede.</translation> <translation id="9067395829937117663">Google Chrome kræver Windows 7 eller nyere.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index a3aee36..a4dd1581 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -54,6 +54,7 @@ <translation id="2309047409763057870">Αυτή είναι μια δευτερεύουσα εγκατάσταση του Google Chrome και δεν μπορεί να γίνει το προεπιλεγμένο πρόγραμμα περιήγησης.</translation> <translation id="2348335408836342058">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στην κάμερα και στο μικρόφωνο για αυτόν τον ιστότοπο</translation> <translation id="234869673307233423">Το Chrome δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε ξανά αργότερα.</translation> +<translation id="235650106824528204">Τυχόν δεδομένα Chrome που δημιουργούνται κατά τη χρήση αυτού του προφίλ (όπως η δημιουργία σελιδοδεικτών, ιστορικού, κωδικών πρόσβασης και άλλων ρυθμίσεων) μπορούν να καταργηθούν από τον διαχειριστή του προφίλ εργασίας. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Το Google Chrome δεν κατάφερε να συγχρονίσει τα δεδομένα σας επειδή ο συγχρονισμός δεν είναι διαθέσιμος για τον τομέα σας.</translation> <translation id="2467438592969358367">Το Google Chrome θέλει να εξαγάγει τους κωδικούς πρόσβασής σας. Για να το επιτρέψετε αυτό, πληκτρολογήστε τον κωδικό πρόσβασης για τα Windows.</translation> <translation id="2485422356828889247">Απεγκατάσταση</translation> @@ -173,12 +174,14 @@ <translation id="573759479754913123">Σχετικά με το Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Δεν ήταν δυνατή η εκκίνηση του Chrome. Προσπάθησε ξανά.</translation> +<translation id="5851757216820085940">Εάν έχετε πολλούς Λογαριασμούς Google, μπορείτε να τους προσθέσετε στη συσκευή <ph name="DEVICE_TYPE" />. Οι λογαριασμοί σας θα είναι διαθέσιμοι στο πρόγραμμα περιήγησης Chrome και το Play Store, καθώς και σε υπηρεσίες όπως το Gmail, το Drive και το YouTube.<ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Το Google Chrome προσπαθεί να επεξεργαστεί κωδικούς πρόσβασης.</translation> <translation id="5895138241574237353">Επανεκκίνηση</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Σύνδεση δικτύου</translation> <translation id="5940385492829620908">Εδώ μπορείτε να βρείτε τις ιστοσελίδες, τους σελιδοδείκτες σας και άλλα δεδομένα του Chrome.</translation> <translation id="5941830788786076944">Ορισμός Google Chrome ως προεπιλεγμένο πρόγραμμα περιήγησης</translation> <translation id="6070348360322141662">Για επιπλέον ασφάλεια, το Google Chrome θα κρυπτογραφήσει τα δεδομένα σας</translation> +<translation id="608006075545470555">Προσθήκη προφίλ εργασίας σε αυτό το πρόγραμμα περιήγησης</translation> <translation id="6113794647360055231">Το Chrome έγινε ακόμα καλύτερο</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -190,10 +193,12 @@ <translation id="6368958679917195344">Το Chrome OS έγινε πραγματικότητα χάρη στην ύπαρξη πρόσθετων <ph name="BEGIN_LINK_CROS_OSS" />λογισμικών ανοικτού κώδικα<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Ενημέρωση του Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Σύστημα Chrome OS</translation> <translation id="6650333065969705433">Για να χρησιμοποιήσετε την εφαρμογή Rosetta για την αναπαραγωγή προστατευμένων μέσων, θα πρέπει να επανεκκινήσετε το Chrome.</translation> <translation id="6676384891291319759">Πρόσβαση στο Διαδίκτυο</translation> <translation id="6679975945624592337">Να επιτρέπεται στο Google Chrome να εκτελείται στο παρασκήνιο</translation> <translation id="6750954913813541382">Για τη διόρθωση ορθογραφικών λαθών, το Chrome στέλνει στην Google το κείμενο που πληκτρολογείτε στο πρόγραμμα περιήγησης</translation> +<translation id="6755885556185485672">Το Chrome OS δεν απενεργοποιήθηκε σωστά.</translation> <translation id="677276454032249905">Να γίνει έξοδος από το Chrome ούτως ή άλλως;</translation> <translation id="683440813066116847">Εισερχόμενος κανόνας για το Google Chrome Canary για να επιτρέπεται η κυκλοφορία του mDNS.</translation> <translation id="6885412569789873916">Εφαρμογές Chrome Beta</translation> @@ -252,6 +257,7 @@ <translation id="8498858610309223613">Μόλις εφαρμόστηκε μια ειδική ενημέρωση ασφαλείας για το Google Chrome. Επανεκκινήστε τώρα και θα γίνει επαναφορά των καρτελών σας.</translation> <translation id="8521348052903287641">Εισερχόμενος κανόνας για το Google Chrome Dev για να επιτρέπεται η κυκλοφορία του mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Αυτό το προφίλ εργασίας είναι εντελώς ξεχωριστό από το προσωπικό προφίλ σας.</translation> <translation id="8556340503434111824">Υπάρχει μια νέα έκδοση του Google Chrome και είναι ταχύτερη από ποτέ.</translation> <translation id="861359755029082151">Η εφαρμογή Rosetta επιτρέπει στο Chrome την αναπαραγωγή προστατευμένων μέσων σε αυτήν τη σελίδα.</translation> <translation id="8614913330719544658">Το Google Chrome δεν αποκρίνεται. Επανεκκίνηση τώρα;</translation> @@ -270,6 +276,7 @@ <translation id="8907709077090383765">Για να επιτρέψετε την αναπαραγωγή προστατευμένων μέσων από το Chrome, θα πρέπει να εγκαταστήσετε την εφαρμογή Rosetta. Θέλετε να την εγκαταστήσετε τώρα;</translation> <translation id="8914504000324227558">Επανεκκίνηση του Chrome</translation> <translation id="8922193594870374009">Για να στείλετε έναν αριθμό από το <ph name="ORIGIN" /> στο τηλέφωνό σας Android, συνδεθείτε στο Chrome και στις δύο συσκευές.</translation> +<translation id="8986207147630327271">Προσθέτετε ένα προφίλ εργασίας σε αυτό το πρόγραμμα περιήγησης και παραχωρείτε τον έλεγχο στον διαχειριστή σας μόνο για το προφίλ εργασίας.</translation> <translation id="8999208279178790196">{0,plural, =0{Υπάρχει μια διαθέσιμη ενημέρωση του Chrome}=1{Υπάρχει μια διαθέσιμη ενημέρωση του Chrome}other{Υπάρχει μια διαθέσιμη ενημέρωση του Chrome για # ημέρες}}</translation> <translation id="9026991721384951619">Το Chrome OS δεν μπόρεσε να συγχρονίσει τα δεδομένα σας, επειδή τα στοιχεία σύνδεσης στο λογαριασμό σας δεν είναι ενημερωμένα.</translation> <translation id="9067395829937117663">Το Google Chrome απαιτεί Windows 7 ή νεότερη έκδοση.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index cf4513c..96c6046 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">This is a secondary installation of Google Chrome, and cannot be made your default browser.</translation> <translation id="2348335408836342058">Chrome needs permission to access your camera and microphone for this site</translation> <translation id="234869673307233423">Chrome can't check your passwords. Try again later.</translation> +<translation id="235650106824528204">Any Chrome data that is generated during the use of this profile (such as the creation of bookmarks, history, passwords and other settings) can be removed by the work profile administrator. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome could not sync your data because Sync is not available for your domain.</translation> <translation id="2467438592969358367">Google Chrome wants to export your passwords. Type your Windows password to allow this.</translation> <translation id="2485422356828889247">Uninstall</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">About Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Couldn't launch Chrome. Try again.</translation> +<translation id="5851757216820085940">If you have multiple Google Accounts, you can add them to your <ph name="DEVICE_TYPE" />. Your accounts will be available in the Chrome browser and Play Store, as well as services like Gmail, Drive and YouTube.<ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome is trying to edit passwords.</translation> <translation id="5895138241574237353">Restart</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Network sign-in</translation> <translation id="5940385492829620908">Your web, bookmarks and other Chrome stuff live here.</translation> <translation id="5941830788786076944">Make Google Chrome the default browser</translation> <translation id="6070348360322141662">For added security, Google Chrome will encrypt your data</translation> +<translation id="608006075545470555">Add work profile to this browser</translation> <translation id="6113794647360055231">Chrome just got better</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS is made possible by additional <ph name="BEGIN_LINK_CROS_OSS" />open-source software<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Updating Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS system</translation> <translation id="6650333065969705433">To use Rosetta to play protected media, you must restart Chrome.</translation> <translation id="6676384891291319759">Access the Internet</translation> <translation id="6679975945624592337">Let Google Chrome Run in the Background</translation> <translation id="6750954913813541382">To fix spelling errors, Chrome sends the text that you type in the browser to Google</translation> +<translation id="6755885556185485672">Chrome OS didn't shut down correctly.</translation> <translation id="677276454032249905">Exit Chrome anyway?</translation> <translation id="683440813066116847">Inbound rule for Google Chrome Canary to allow mDNS traffic.</translation> <translation id="6885412569789873916">Chrome Beta Apps</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">A special security update for Google Chrome was just applied. Restart now and we'll restore your tabs.</translation> <translation id="8521348052903287641">Inbound rule for Google Chrome Dev to allow mDNS traffic.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">This work profile is completely separate from your personal profile.</translation> <translation id="8556340503434111824">There's a new version of Google Chrome available and it's faster than ever.</translation> <translation id="861359755029082151">Rosetta enables Chrome to play the protected media on this page.</translation> <translation id="8614913330719544658">Google Chrome is unresponsive. Relaunch now?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">To enable Chrome to play protected media, you need to install Rosetta. Do you want to install it now?</translation> <translation id="8914504000324227558">Relaunch Chrome</translation> <translation id="8922193594870374009">To send a number from <ph name="ORIGIN" /> to your Android phone, sign in to Chrome on both devices.</translation> +<translation id="8986207147630327271">You are adding a work profile to this browser and giving your administrator control over just the work profile.</translation> <translation id="8999208279178790196">{0,plural, =0{A Chrome update is available}=1{A Chrome update is available}other{A Chrome update has been available for # days}}</translation> <translation id="9026991721384951619">Chrome OS could not sync your data because your account sign-in details are out of date.</translation> <translation id="9067395829937117663">Google Chrome requires Windows 7 or higher.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb index 8eb9c98..0749c8a 100644 --- a/chrome/app/resources/google_chrome_strings_et.xtb +++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -54,6 +54,7 @@ <translation id="2309047409763057870">See on Google Chrome'i sekundaarne install ja seda ei saa määrata vaikebrauseriks.</translation> <translation id="2348335408836342058">Chrome vajab selle saidi puhul luba, et teie kaamerale ja mikrofonile juurde pääseda</translation> <translation id="234869673307233423">Chrome ei saa teie paroole kontrollida. Proovige hiljem uuesti.</translation> +<translation id="235650106824528204">Kõik Chrome'i andmed, mis luuakse selle profiili kasutamise ajal (nt järjehoidjad, ajalugu, paroolid ja muud seaded), saab tööprofiili administraator eemaldada. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome ei saa teie andmeid sünkroonida, sest sünkroonimine pole teie domeenil saadaval.</translation> <translation id="2467438592969358367">Google Chrome soovib teie paroole eksportida. Selle lubamiseks sisestage oma Windowsi parool.</translation> <translation id="2485422356828889247">Desinstalli</translation> @@ -173,12 +174,14 @@ <translation id="573759479754913123">Teave Chrome OS-i kohta</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome'i ei õnnestunud käivitada. Proovige uuesti.</translation> +<translation id="5851757216820085940">Kui teil on mitu Google'i kontot, saate need lisada oma seadmesse <ph name="DEVICE_TYPE" />. Teie kontod on saadaval Chrome'i brauseris, Play poes ning teenustes, nagu Gmail, Drive ja YouTube. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome püüab paroole muuta.</translation> <translation id="5895138241574237353">Taaskäivitamine</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – võrku sisselogimine</translation> <translation id="5940385492829620908">Siin asuvad teie veeb, järjehoidjad ja muu Chrome'i kraam.</translation> <translation id="5941830788786076944">Tee Google Chrome vaikebrauseriks</translation> <translation id="6070348360322141662">Turvalisuse suurendamiseks krüpteerib Google Chrome teie andmed</translation> +<translation id="608006075545470555">Tööprofiili lisamine sellesse brauserisse</translation> <translation id="6113794647360055231">Chrome muutus just paremaks</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome'i beetaversioon</translation> @@ -190,10 +193,12 @@ <translation id="6368958679917195344">Chrome OS on võimalik tänu <ph name="BEGIN_LINK_CROS_OSS" />avatud lähtekoodiga lisatarkvarale<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome'i värskendamine (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS-i süsteem</translation> <translation id="6650333065969705433">Rosettaga kaitstud meedia esitamiseks peate Chrome'i taaskäivitama.</translation> <translation id="6676384891291319759">Pääs Internetti</translation> <translation id="6679975945624592337">Luba Google Chrome'il taustal töötada</translation> <translation id="6750954913813541382">Õigekirjavigade parandamiseks saadab Chrome brauseris sisestatava teksti Google'ile</translation> +<translation id="6755885556185485672">Chrome OS ei sulgunud õigesti.</translation> <translation id="677276454032249905">Kas väljuda Chrome'ist ikkagi?</translation> <translation id="683440813066116847">Sissetuleku reegel Google Chrome Canaryle mDNS-liikluse lubamiseks.</translation> <translation id="6885412569789873916">Chrome'i beetaversiooni rakendused</translation> @@ -252,6 +257,7 @@ <translation id="8498858610309223613">Äsja rakendati Google Chrome'i spetsiaalne turvavärskendus. Taaskäivitage brauser, misjärel taastame teie vahelehed.</translation> <translation id="8521348052903287641">Sissetuleku reegel Google Chrome Devile mDNS-liikluse lubamiseks.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">See tööprofiil on teie isiklikust profiilist täielikult eraldi.</translation> <translation id="8556340503434111824">Saadaval on uus Google Chrome'i versioon ja see on senistest kiireim.</translation> <translation id="861359755029082151">Rosetta võimaldab Chrome'il esitada sellel lehel olevat kaitstud meediat.</translation> <translation id="8614913330719544658">Google Chrome ei reageeri. Kas soovite kohe taaskäivitada?</translation> @@ -270,6 +276,7 @@ <translation id="8907709077090383765">Kui soovite, et Chrome esitaks kaitstud meediat, peate installima Rosetta. Kas soovite kohe installida?</translation> <translation id="8914504000324227558">Käivita Chrome uuesti</translation> <translation id="8922193594870374009">Numbri saatmiseks asukohast <ph name="ORIGIN" /> Android-telefoni logige mõlemas seadmes Chrome'i sisse.</translation> +<translation id="8986207147630327271">Lisate sellesse brauserisse tööprofiili ja annate administraatorile kontrolli vaid oma tööprofiili üle.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome'i värskendus on saadaval}=1{Chrome'i värskendus on saadaval}other{Chrome'i värskendus on # päeva saadaval olnud}}</translation> <translation id="9026991721384951619">Chrome OS ei saanud andmeid sünkroonida, sest teie konto sisselogimisandmed on aegunud.</translation> <translation id="9067395829937117663">Google Chrome vajab operatsioonisüsteemi Windows 7 või uuemat versiooni.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 80017ac..aba45177 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Tämä on Google Chromen toissijainen asennus, eikä sitä voi asettaa oletusselaimeksi.</translation> <translation id="2348335408836342058">Chrome tarvitsee oikeuden käyttää kameraasi ja mikrofoniasi tällä sivustolla.</translation> <translation id="234869673307233423">Chrome ei voi tarkistaa salasanojasi. Yritä myöhemmin uudelleen.</translation> +<translation id="235650106824528204">Työprofiilin järjestelmänvalvoja voi poistaa tämän profiilin käytön aikana luotua Chrome-dataa (esim. kirjanmerkit, historia, salasanat ja muut asetukset). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome ei voinut synkronoida tietoja, koska synkronointi ei ole käytettävissä verkkotunnuksessasi.</translation> <translation id="2467438592969358367">Google Chrome yrittää viedä salasanojasi tiedostoon. Salli tämä kirjoittamalla Windows-salasanasi.</translation> <translation id="2485422356828889247">Poista</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Tietoja Chrome-käyttöjärjestelmästä</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Chromen käynnistäminen epäonnistui. Yritä uudelleen.</translation> +<translation id="5851757216820085940">Jos sinulla on useita Google-tilejä, voit lisätä ne laitteellesi (<ph name="DEVICE_TYPE" />). Tilisi ovat käytettävissä Chrome-selaimella ja Play Kaupassa sekä Gmailin, Driven ja YouTuben kaltaisissa palveluissa.<ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome yrittää muuttaa salasanoja.</translation> <translation id="5895138241574237353">Käynnistä uudelleen</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Kirjautuminen verkkoon</translation> <translation id="5940385492829620908">Tämä on verkkosi, kirjanmerkkiesi ja muun Chrome-sisältösi koti.</translation> <translation id="5941830788786076944">Tee Google Chromesta oletusselain</translation> <translation id="6070348360322141662">Google Chrome lisää suojausta salaamalla tietosi</translation> +<translation id="608006075545470555">Lisää työprofiili tähän selaimeen</translation> <translation id="6113794647360055231">Chrome on nyt entistä parempi</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">Chrome-käyttöjärjestelmää tukee toinen <ph name="BEGIN_LINK_CROS_OSS" />avoimen lähdekoodin ohjelmisto<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Päivitetään Google Chromea (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome-käyttöjärjestelmä</translation> <translation id="6650333065969705433">Voidaksesi käyttää Rosettaa suojatun median toistamiseen, sinun täytyy uudelleenkäynnistää Chrome.</translation> <translation id="6676384891291319759">Käytä internetiä</translation> <translation id="6679975945624592337">Jätä Google Chrome käyntiin taustalle</translation> <translation id="6750954913813541382">Chrome lähettää selaimeen kirjoittamasi tekstin Googlelle kirjoitusvirheiden korjaamiseksi</translation> +<translation id="6755885556185485672">Chrome-käyttöjärjestelmä ei sulkeutunut oikein.</translation> <translation id="677276454032249905">Suljetaanko Chrome silti?</translation> <translation id="683440813066116847">Google Chrome Canaryn saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="6885412569789873916">Chromen betaversion sovellukset</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">Google Chromen tärkeä tietoturvapäivitys on asennettu. Käynnistä selain uudelleen – palautamme avoimet välilehdet.</translation> <translation id="8521348052903287641">Google Chromen kehittäjäversion saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Tämä työprofiili on täysin erillinen henkilökohtaisesta profiilistasi.</translation> <translation id="8556340503434111824">Chromesta on saatavissa uusi versio, joka on entistäkin nopeampi.</translation> <translation id="861359755029082151">Chrome voi toistaa suojattua mediaa tällä sivulla käyttämällä Rosettaa.</translation> <translation id="8614913330719544658">Google Chrome ei vastaa. Käynnistetäänkö uudelleen?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Sinun täytyy asentaa Rosetta, jotta Chrome voi toistaa suojattua mediaa. Haluatko asentaa sen nyt?</translation> <translation id="8914504000324227558">Käynnistä Chrome uudelleen</translation> <translation id="8922193594870374009">Jos haluat lähettää numeron osoitteesta <ph name="ORIGIN" /> Android-puhelimeesi, kirjaudu Chromeen molemmilla laitteilla.</translation> +<translation id="8986207147630327271">Olet lisäämässä työprofiilia tähän selaimeen ja antamassa järjestelmänvalvojalle oikeuden hallita pelkkää työprofiilia.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome-päivitys on saatavilla}=1{Chrome-päivitys on saatavilla}other{Chrome-päivitys on ollut saatavilla # vuorokauden ajan}}</translation> <translation id="9026991721384951619">Chrome-käyttöjärjestelmä ei voi synkronoida tietoja, sillä tilin kirjautumistiedot ovat vanhentuneet.</translation> <translation id="9067395829937117663">Google Chrome edellyttää Windows 7:ää tai uudempaa versiota.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb index db7d45f..09f98d0 100644 --- a/chrome/app/resources/google_chrome_strings_fil.xtb +++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Pangalawang pag-install ito ng Google Chrome at hindi ito maaaring gawing iyong default na browser.</translation> <translation id="2348335408836342058">Kailangan ng Chrome ng pahintulot na i-access ang iyong camera at mikropono para sa site na ito</translation> <translation id="234869673307233423">Hindi masuri ng Chrome ang iyong mga password. Subukan ulit sa ibang pagkakataon.</translation> +<translation id="235650106824528204">Puwedeng alisin ng administrator ng profile sa trabaho ang anumang data ng Chrome na nabuo sa panahon ng paggamit sa profile na ito (gaya ng paggawa ng mga bookmark, history, mga password, at iba pang setting). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Hindi mai-sync ng Google Chrome ang iyong data dahil hindi available ang Pag-sync para sa iyong domain.</translation> <translation id="2467438592969358367">Gustong i-export ng Google Chrome ang iyong mga password. I-type ang password mo sa Windows para payagan ito.</translation> <translation id="2485422356828889247">I-uninstall</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">Tungkol sa Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Hindi mailunsad ang Chrome. Subukang muli.</translation> +<translation id="5851757216820085940">Kung marami kang Google Account, puwede mong idagdag ang mga ito sa iyong <ph name="DEVICE_TYPE" />. Magiging available ang iyong mga account sa Chrome browser at Play Store, kasama ang mga serbisyo tulad ng Gmail, Drive, at YouTube.<ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Sinusubukan ng Google Chrome na i-edit ang mga password.</translation> <translation id="5895138241574237353">I-restart</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Pag-sign in sa Network</translation> <translation id="5940385492829620908">Makikita dito ang iyong web, mga bookmark at iba pang mga bagay-bagay sa Chrome.</translation> <translation id="5941830788786076944">Gawin ang Google Chrome na default browser</translation> <translation id="6070348360322141662">Para sa karagdagang seguridad, ie-encrypt ng Google Chrome ang iyong data</translation> +<translation id="608006075545470555">Magdagdag ng Profile sa Trabaho sa browser na ito</translation> <translation id="6113794647360055231">Mas mahusay na ang Chrome</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Ginagawang posible ang Chrome OS ng karagdagang <ph name="BEGIN_LINK_CROS_OSS" />open source na software<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Ina-update ang Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS system</translation> <translation id="6650333065969705433">Para magamit ang Rosetta sa pag-play ng pinoprotektahang media, dapat mong i-restart ang Chrome.</translation> <translation id="6676384891291319759">I-access ang Internet</translation> <translation id="6679975945624592337">Hayaang Tumakbo sa Background ang Google Chrome</translation> <translation id="6750954913813541382">Para ayusin ang mga error sa pagbabaybay, ipinapadala ng Chrome sa Google ang text na na-type mo sa browser</translation> +<translation id="6755885556185485672">Hindi nag-shut down nang tama ang Chrome OS.</translation> <translation id="677276454032249905">Lumabas pa rin sa Chrome?</translation> <translation id="683440813066116847">Inbound na panuntunan para sa Google Chrome Canary upang payagan ang trapiko ng mDNS.</translation> <translation id="6885412569789873916">Mga Chrome Beta App</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Naglapat ng espesyal na update sa seguridad para sa Google Chrome. Mag-restart na at ire-restore namin ang iyong mga tab.</translation> <translation id="8521348052903287641">Inbound na panuntunan para sa Google Chrome Dev upang payagan ang trapiko ng mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Ang profile sa trabaho na ito ay ganap na hiwalay sa iyong personal na profile.</translation> <translation id="8556340503434111824">May available na bagong bersyon ng Google Chrome, at mas mabilis ito kaysa sa dati.</translation> <translation id="861359755029082151">Nagbibigay-daan ang Rosetta sa Chrome na ma-play ang pinoprotektahang media sa page na ito.</translation> <translation id="8614913330719544658">Hindi gumagana ang Google Chrome. Ilunsad muli ngayon?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Para bigyang-daan ang Chrome na mag-play ng pinoprotektahang media, kailangan mong i-install ang Rosetta. Gusto mo ba itong i-install ngayon?</translation> <translation id="8914504000324227558">Muling ilunsad ang Chrome</translation> <translation id="8922193594870374009">Para magpadala ng numero sa iyong Android phone mula sa <ph name="ORIGIN" />, mag-sign in sa Chrome sa parehong device.</translation> +<translation id="8986207147630327271">Nagdaragdag ka ng profile sa trabaho sa browser na ito at binibigyan mo ang iyong administrator ng kontrol sa profile sa trabaho lang.</translation> <translation id="8999208279178790196">{0,plural, =0{May available na update sa Chrome}=1{May available na update sa Chrome}one{# araw nang may available na update sa Chrome}other{# na araw nang may available na update sa Chrome}}</translation> <translation id="9026991721384951619">Hindi ma-sync ng Chrome OS ang iyong data dahil hindi napapanahon ang mga detalye sa pag-sign in sa iyong account.</translation> <translation id="9067395829937117663">Kailangan ng Google Chrome ng Windows 7 o mas bago.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb index 5ce356a..ba887c9a 100644 --- a/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">यह Google Chrome का द्वितीयक इंस्टॉलेशन है और इसे आपका डिफ़ॉल्ट ब्राउज़र नहीं बनाया जा सकता.</translation> <translation id="2348335408836342058">Chrome को इस साइट के लिए आपका कैमरा और माइक्रोफ़ोन एक्सेस करने की अनुमति चाहिए</translation> <translation id="234869673307233423">Chrome आपके पासवर्ड की जांच नहीं कर सकता. बाद में कोशिश करें.</translation> +<translation id="235650106824528204">इस प्रोफ़ाइल का इस्तेमाल करने के दौरान Chrome में जनरेट किए गए किसी भी तरह के डेटा (जैसे, बुकमार्क, इतिहास, पासवर्ड, और दूसरी सेटिंग) को वर्क प्रोफ़ाइल का एडमिन हटा सकता है. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome आपका डेटा समन्वयित नहीं कर सका क्योंकि समन्वयन आपके डोमेन के लिए उपलब्ध नहीं है.</translation> <translation id="2467438592969358367">Google Chrome आपके पासवर्ड निर्यात करना चाहता है. इसकी मंज़ूरी देने के लिए अपना Windows पासवर्ड लिखें.</translation> <translation id="2485422356828889247">विस्थापित करें</translation> @@ -173,12 +174,14 @@ <translation id="573759479754913123">Chrome OS के बारे में</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome कैनरी</translation> <translation id="5804318322022881572">Chrome लॉन्च नहीं किया जा सका. फिर से कोशिश करें.</translation> +<translation id="5851757216820085940">अगर आपके पास एक से ज़्यादा Google खाते हैं, तो आप उन्हें अपने <ph name="DEVICE_TYPE" /> में जोड़ सकते हैं. आपके खाते, Chrome ब्राउज़र और 'Play स्टोर' के साथ-साथ Gmail, Drive, और YouTube जैसी अन्य सेवाओं पर भी उपलब्ध रहेंगे.<ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome, पासवर्ड में बदलाव करने की कोशिश कर रहा है.</translation> <translation id="5895138241574237353">फिर से प्रारंभ करें</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - नेटवर्क में साइन इन करें</translation> <translation id="5940385492829620908">आपके वेब, बुकमार्क और अन्य Chrome सामग्री यहां मौजूद रहती है.</translation> <translation id="5941830788786076944">Google Chrome को सामान्य ब्राउज़र बनाएं</translation> <translation id="6070348360322141662">ज़्यादा सुरक्षा के लिए, Google Chrome आपका डेटा सुरक्षित करेगा</translation> +<translation id="608006075545470555">इस ब्राउज़र में वर्क प्रोफ़ाइल जोड़ें</translation> <translation id="6113794647360055231">Chrome पहले से बेहतर हो गया है</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome बीटा</translation> @@ -190,10 +193,12 @@ <translation id="6368958679917195344">Chrome OS को अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />ओपन सोर्स सॉफ़्टवेयर<ph name="END_LINK_CROS_OSS" /> द्वारा संभव बनाया गया है.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome डेवलपर</translation> <translation id="6566149418543181476">Google Chrome अपडेट हो रहा है (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS सिस्टम</translation> <translation id="6650333065969705433">सुरक्षित मीडिया को चलाने में Rosetta का इस्तेमाल करने के लिए, आपको Chrome को रीस्टार्ट करना होगा.</translation> <translation id="6676384891291319759">इंटरनेट एक्सेस करें</translation> <translation id="6679975945624592337">Google Chrome को बैकग्राउंड में चलने दें</translation> <translation id="6750954913813541382">वर्तनी की गलती को ठीक करने के लिए, आप ब्राउज़र में जो कुछ भी लिखते हैं, Chrome उसे Google को भेज देता है</translation> +<translation id="6755885556185485672">Chrome OS ठीक से शट डाउन नहीं हुआ.</translation> <translation id="677276454032249905">फिर भी Chrome से बाहर निकलें?</translation> <translation id="683440813066116847">mDNS ट्रैफ़िक की अनुमति देने के लिए Google Chrome Canary के लिए इनबाउंड नियम.</translation> <translation id="6885412569789873916">Chrome बीटा ऐप्लिकेशन</translation> @@ -252,6 +257,7 @@ <translation id="8498858610309223613">Google Chrome के लिए एक खास सुरक्षा अपडेट अभी-अभी लागू किया गया था. अभी रीस्टार्ट करें और हम आपके टैब बहाल कर देंगे.</translation> <translation id="8521348052903287641">mDNS ट्रैफ़िक की अनुमति देने के लिए Google Chrome का इनबाउंड नियम.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">यह वर्क प्रोफ़ाइल आपकी निजी प्रोफ़ाइल से पूरी तरह अलग है.</translation> <translation id="8556340503434111824">Google Chrome का एक नया वर्शन उपलब्ध है, और यह अब तक का सबसे तेज़ है.</translation> <translation id="861359755029082151">Rosetta इस पेज पर, Chrome को सुरक्षित मीडिया चलाने की सुविधा देता है.</translation> <translation id="8614913330719544658">Google Chrome निष्क्रिय है. अभी फिर से लॉन्च करें?</translation> @@ -270,6 +276,7 @@ <translation id="8907709077090383765">अगर आप सुरक्षित मीडिया चलाने के लिए Chrome को चालू करना चाहते हैं, तो आपको Rosetta इंस्टॉल करना होगा. क्या आप इसे अभी इंस्टॉल करना चाहते हैं?</translation> <translation id="8914504000324227558">Chrome को फिर से लॉन्च करें</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> से अपने Android फ़ोन पर नंबर भेजने के लिए, दोनों डिवाइस पर Chrome में साइन इन करें.</translation> +<translation id="8986207147630327271">आप इस ब्राउज़र में एक वर्क प्रोफ़ाइल जोड़ रहे हैं और अपने एडमिन को सिर्फ़ उस प्रोफ़ाइल को कंट्रोल करने का अधिकार दे रहे हैं.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome का एक अपडेट उपलब्ध है}=1{Chrome का एक अपडेट उपलब्ध है}one{Chrome का अपडेट # दिनों से उपलब्ध है}other{Chrome का अपडेट # दिनों से उपलब्ध है}}</translation> <translation id="9026991721384951619">Chrome OS आपका डेटा सिंक नहीं कर सका क्योंकि आपके खाता साइन इन विवरण की समय सीमा पूरी हो चुकी है.</translation> <translation id="9067395829937117663">Google Chrome के लिए Windows 7 या उसके बाद के वर्शन की आवश्यकता होती है.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb index 601f4fb..7a0db8f 100644 --- a/chrome/app/resources/google_chrome_strings_hr.xtb +++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chromea, pa on ne može biti vaš zadani preglednik.</translation> <translation id="2348335408836342058">Chrome treba dopuštenje za pristup kameri i mikrofonu za ovu web-lokaciju</translation> <translation id="234869673307233423">Chrome ne može provjeriti vaše zaporke. Pokušajte ponovno kasnije.</translation> +<translation id="235650106824528204">Sve podatke iz Chromea koji se generiraju tijekom upotrebe ovog profila (primjerice izradom oznaka, povijesti, zaporki i drugih postavki) može ukloniti administrator poslovnog profila. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome nije mogao sinkronizirati vaše podatke jer sinkronizacija nije dostupna za vašu domenu.</translation> <translation id="2467438592969358367">Google Chrome želi izvesti vaše zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">O OS-u Chrome</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Pokretanje Chromea nije uspjelo. Pokušajte ponovo.</translation> +<translation id="5851757216820085940">Ako imate više Google računa, možete ih dodati na uređaj <ph name="DEVICE_TYPE" />. Vaši će računi biti dostupni u pregledniku Chrome i u Trgovini Play te na uslugama kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome pokušava urediti zaporke.</translation> <translation id="5895138241574237353">Ponovno pokreni</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Prijava na mrežu</translation> <translation id="5940385492829620908">Ovdje se nalaze vaš web, oznake i ostali sadržaji u Chromeu.</translation> <translation id="5941830788786076944">Neka Google Chrome bude zadani preglednik.</translation> <translation id="6070348360322141662">Radi dodatne sigurnosti Google Chrome kriptirat će vaše podatke</translation> +<translation id="608006075545470555">Dodavanje poslovnog profila u ovaj preglednik</translation> <translation id="6113794647360055231">Chrome je upravo postao bolji</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">OS Chrome omogućen je dodatnim <ph name="BEGIN_LINK_CROS_OSS" />softverom otvorenog koda<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Ažuriranje Google Chromea (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">OS Chrome</translation> <translation id="6650333065969705433">Da biste za reprodukciju zaštićenih medija koristili Rosettu, morate ponovno pokrenuti Chrome.</translation> <translation id="6676384891291319759">Pristup Internetu</translation> <translation id="6679975945624592337">Neka Google Chrome radi u pozadini</translation> <translation id="6750954913813541382">Chrome šalje Googleu tekst koji utipkate u preglednik radi ispravljanja pravopisnih pogrešaka</translation> +<translation id="6755885556185485672">OS Chrome nije se ispravno zatvorio.</translation> <translation id="677276454032249905">Želite li ipak zatvoriti Chrome?</translation> <translation id="683440813066116847">Ulazno pravilo kako bi Google Chrome Canary dopustio mDNS promet.</translation> <translation id="6885412569789873916">Aplikacije preglednika Chrome Beta</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">Upravo je primijenjeno posebno sigurnosno ažuriranje za Google Chrome. Ponovo pokrenite sustav i vratit ćemo vaše kartice.</translation> <translation id="8521348052903287641">Ulazno pravilo kako bi Google Chrome Dev dopustio mDNS promet.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Ovaj poslovni profil potpuno je odvojen od vašeg osobnog profila.</translation> <translation id="8556340503434111824">Dostupna je nova verzija preglednika Google Chrome, brža no ikad.</translation> <translation id="861359755029082151">Rosetta omogućuje Chromeu da na ovoj stranici reproducira zaštićene medije.</translation> <translation id="8614913330719544658">Google Chrome ne reagira. Ponovo pokrenuti sada?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Da biste na Chromeu omogućili reprodukciju zaštićenih medija, morate instalirati Rosettu. Želite li je sada instalirati?</translation> <translation id="8914504000324227558">Ponovo pokrenite Chrome</translation> <translation id="8922193594870374009">Da biste poslali broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se na Chrome na oba uređaja.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj preglednik i administratoru dodjeljujete kontrolu samo nad poslovnim profilom.</translation> <translation id="8999208279178790196">{0,plural, =0{Dostupno je ažuriranje Chromea}=1{Dostupno je ažuriranje Chromea}one{Ažuriranje Chromea dostupno je # dana}few{Ažuriranje Chromea dostupno je # dana}other{Ažuriranje Chromea dostupno je # dana}}</translation> <translation id="9026991721384951619">OS Chrome nije mogao sinkronizirati vaše podatke jer su vaši podaci za prijavu na račun zastarjeli.</translation> <translation id="9067395829937117663">Google Chrome zahtijeva Windows 7 ili noviju verziju.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index 3fbd628..7989ade 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Ez a Google Chrome második telepítése, amelyet nem állíthat be az alapértelmezett böngészővé.</translation> <translation id="2348335408836342058">A Chrome-nak engedélyre van szüksége ahhoz, hogy hozzáférjen a kamerához és a mikrofonhoz ennél a webhelynél</translation> <translation id="234869673307233423">A Chrome nem tudja ellenőrizni a jelszavait. Próbálkozzon később.</translation> +<translation id="235650106824528204">A profil használata során generált összes Chrome-adatot (pl. könyvjelzőket, előzményeket, jelszavakat és egyéb beállításokat) eltávolíthatja a munkaprofil rendszergazdája. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">A Google Chrome nem tudta szinkronizálni az adatait, mert a szinkronizálás nem érhető el az Ön domainjénél.</translation> <translation id="2467438592969358367">A Google Chrome exportálni szeretné a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation> <translation id="2485422356828889247">Eltávolítás</translation> @@ -168,12 +169,14 @@ <translation id="573759479754913123">A Chrome OS névjegye</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Nem sikerült a Chrome elindítása. Próbálkozzon újra.</translation> +<translation id="5851757216820085940">Ha több Google-fiókja is van, hozzáadhatja őket <ph name="DEVICE_TYPE" /> eszközéhez. Fiókjait használhatja majd a Chrome böngészőben és a Play Áruházban, valamint olyan szolgáltatásokban, mint például a Gmail, a Drive és a YouTube. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation> <translation id="5867197326698922595">A Google Chrome szerkeszteni próbálja a jelszavakat.</translation> <translation id="5895138241574237353">Újraindítás</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Hálózati bejelentkezés</translation> <translation id="5940385492829620908">Az Ön könyvjelzői, valamint az internetezéssel és a Chrome-mal kapcsolatos egyéb dolgai vannak itt.</translation> <translation id="5941830788786076944">A Google Chrome beállítása alapértelmezett böngészőként</translation> <translation id="6070348360322141662">A nagyobb biztonság érdekében a Google Chrome titkosítja az Ön adatait</translation> +<translation id="608006075545470555">Munkaprofil hozzáadása a böngészőhöz</translation> <translation id="6113794647360055231">A Chrome még jobb lett</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Béta</translation> @@ -185,10 +188,12 @@ <translation id="6368958679917195344">A Chrome OS-hez egyéb <ph name="BEGIN_LINK_CROS_OSS" />nyílt forráskódú szoftver<ph name="END_LINK_CROS_OSS" /> is hozzájárult.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">A Google Chrome frissítése (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS rendszer</translation> <translation id="6650333065969705433">Ahhoz, hogy használhassa a Rosettát védett médiatartalmak lejátszásához, újra kell indítania a Chrome-ot.</translation> <translation id="6676384891291319759">Internetelérés</translation> <translation id="6679975945624592337">A Google Chrome futhat a háttérben</translation> <translation id="6750954913813541382">A nyelvtani hibák javítása érdekében a Chrome elküldi a böngészőben begépelt összes szöveget a Google-nak</translation> +<translation id="6755885556185485672">A Chrome OS nem megfelelően állt le.</translation> <translation id="677276454032249905">Biztosan kilép a Chrome-ból?</translation> <translation id="683440813066116847">Bejövő szabály a Google Chrome Canaryhoz az mDNS forgalom engedélyezése céljából.</translation> <translation id="6885412569789873916">Chrome Beta-alkalmazások</translation> @@ -247,6 +252,7 @@ <translation id="8498858610309223613">A rendszer egy speciális biztonsági frissítést alkalmazott a Google Chrome-on. Indítsa újra a számítógépet, a lapokat majd mi visszaállítjuk.</translation> <translation id="8521348052903287641">Bejövő szabály a Google Chrome Devhez az mDNS forgalom engedélyezése céljából.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Ez a munkaprofil teljesen el van választva a személyes profiljától.</translation> <translation id="8556340503434111824">Elérhető a Google Chrome új verziója, amely gyorsabb, mint ezelőtt bármikor.</translation> <translation id="861359755029082151">A Rosetta engedélyezi a Chrome számára, hogy védett médiatartalmakat játsszon le ezen az oldalon.</translation> <translation id="8614913330719544658">A Google Chrome nem válaszol. Újraindítja most?</translation> @@ -265,6 +271,7 @@ <translation id="8907709077090383765">Ahhoz, hogy engedélyezhesse a Chrome-nak védett médiatartalmak lejátszását, telepítenie kell a Rosettát. Szeretné most telepíteni?</translation> <translation id="8914504000324227558">A Chrome újraindítása</translation> <translation id="8922193594870374009">Ha innen: <ph name="ORIGIN" /> szeretne számot küldeni Android-telefonjára, jelentkezzen be a Chrome-ba mindkét eszközén.</translation> +<translation id="8986207147630327271">Munkaprofilt ad hozzá ehhez a böngészőhöz, és csak a munkaprofil felett adja át az irányítást a rendszergazdának.</translation> <translation id="8999208279178790196">{0,plural, =0{Rendelkezésre áll egy Chrome-frissítés}=1{Rendelkezésre áll egy Chrome-frissítés}other{# napja rendelkezésre áll egy Chrome-frissítés}}</translation> <translation id="9026991721384951619">A Chrome OS nem tudta szinkronizálni az adatokat, mert a fiók bejelentkezési adatai elavultak.</translation> <translation id="9067395829937117663">A Google Chrome futtatásához Windows 7 vagy újabb verzió szükséges.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ka.xtb b/chrome/app/resources/google_chrome_strings_ka.xtb index 2656539d..c5afa5e7 100644 --- a/chrome/app/resources/google_chrome_strings_ka.xtb +++ b/chrome/app/resources/google_chrome_strings_ka.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">ეს Google Chrome-ის მეორადი ინსტალაცია არის და ნაგულისხმევ ბრაუზერად ის ვერ დაყენდება.</translation> <translation id="2348335408836342058">Chrome საჭიროებს თქვენს კამერასა და მიკროფონზე წვდომის ნებართვას ამ საიტისთვის</translation> <translation id="234869673307233423">Chrome ვერ ახერხებს პაროლების შემოწმებას. ცადეთ მოგვიანებით.</translation> +<translation id="235650106824528204">ამ პროფილის გამოყენებისას შექმნილი Chrome მონაცემების (მაგ., შექმნილი სანიშნეების, ისტორიის, პაროლებისა და სხვა პარამეტრების) ამოშლა შეუძლია სამსახურის პროფილის ადმინისტრატორს. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome-მა ვერ დაასინქრონა თქვენი მონაცემები, რადგან სინქრონიზაცია არ არის ხელმისაწვდომი თქვენი დომენისთვის.</translation> <translation id="2467438592969358367">Google Chrome ითხოვს თქვენი პაროლების ექსპორტირებას. აღნიშნულის დასაშვებად აკრიფეთ თქვენი Windows-ის პაროლი.</translation> <translation id="2485422356828889247">დეინსტალაცია</translation> @@ -176,12 +177,14 @@ <translation id="573759479754913123">Chrome-ის OS-ის შესახებ</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> — Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome-ის გაშვება ვერ მოხერხდა. ცადეთ ხელახლა.</translation> +<translation id="5851757216820085940">თუ რამდენიმე Google ანგარიში გაქვთ, შეგიძლიათ დაამატოთ ისინი თქვენს <ph name="DEVICE_TYPE" />-ს. თქვენი ანგარიშები ხელმისაწვდომი იქნება როგორც Chrome ბრაუზერსა და Play Store-ში, ისე ისეთ სერვისებში, როგორიცაა Gmail, Drive და YouTube. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome ცდილობს პაროლების რედაქტირებას.</translation> <translation id="5895138241574237353">გადატვირთვა</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> — ქსელში შესვლა</translation> <translation id="5940385492829620908">თქვენი ვები, სანიშნეები და Chrome-ის სხვა მასალა არის აქ.</translation> <translation id="5941830788786076944">Google Chrome გახდეს ნაგულისხმევი ბრაუზერი</translation> <translation id="6070348360322141662">დამატებითი უსაფრთხოებისთვის, Google Chrome თქვენს მონაცემებს დაშიფრავს</translation> +<translation id="608006075545470555">დაამატეთ სამსახურის პროფილი ამ ბრაუზერს</translation> <translation id="6113794647360055231">Chrome უბრალოდ გაუმჯობესდა</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> — Google Chrome Beta</translation> @@ -193,10 +196,12 @@ <translation id="6368958679917195344">Chrome OS არსებობს დამატებითი <ph name="BEGIN_LINK_CROS_OSS" />ღია წყაროს პროგრამული უზრუნველყოფის<ph name="END_LINK_CROS_OSS" /> წყალობით.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> — Google Chrome Dev</translation> <translation id="6566149418543181476">მიმდინარეობს Google Chrome-ის განახლება (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS სისტემა</translation> <translation id="6650333065969705433">დაცული მედიის დასაკრავად Rosetta-ს გამოსაყენებლად საჭიროა Chrome-ის გადატვირთვა.</translation> <translation id="6676384891291319759">წვდომა ინტერნეტზე</translation> <translation id="6679975945624592337">Google Chrome-ისთვის ფონურ რეჟიმში მუშაობის დაშვება</translation> <translation id="6750954913813541382">მართლწერის შეცდომების შესასწორებლად Chrome უგზავნის Google-ს თქვენ მიერ ბრაუზერში აკრეფილ ტექსტს</translation> +<translation id="6755885556185485672">Chrome OS სათანადოდ არ გაითიშა.</translation> <translation id="677276454032249905">მაინც გსურთ Chrome-იდან გასვლა?</translation> <translation id="683440813066116847">შიდა წესი Google Chrome Canary-ისთვის mDNS ტრაფიკის დასაშვებად.</translation> <translation id="6885412569789873916">Chrome Beta აპები</translation> @@ -255,6 +260,7 @@ <translation id="8498858610309223613">Google Chrome-ს ეს-ესაა მიესადაგა უსაფრთხოების საგანგებო განახლება. გადატვირთეთ ის ახლავე და თქვენი ჩანართებიც აღდგება.</translation> <translation id="8521348052903287641">შემომავალი წესი Google Chrome Dev-ისთვის mDNS ტრაფიკის დასაშვებად.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">სამსახურის ეს პროფილი თქვენი პირადი პროფილისგან სრულიად დამოუკიდებლად ფუნქციონირებს.</translation> <translation id="8556340503434111824">ხელმისაწვდომია Google Chrome-ის უფრო ახალი ვერსია, რომელიც უფრო სწრაფია.</translation> <translation id="861359755029082151">Rosetta საშუალებას მისცემს Chrome-ს, ამ გვერდზე დაცული მედია დაუკრას.</translation> <translation id="8614913330719544658">Google Chrome არ პასუხობს. გავუშვათ ხელახლა?</translation> @@ -273,6 +279,7 @@ <translation id="8907709077090383765">Chrome-მა დაცული მედია რომ დაუკრას, საჭიროა Rosetta-ს ინსტალაცია. გსურთ მისი ახლავე ინსტალაცია?</translation> <translation id="8914504000324227558">Chrome-ის ხელახლა გაშვება</translation> <translation id="8922193594870374009"><ph name="ORIGIN" />-დან თქვენს Android ტელეფონზე ნომრის გასაგზავნად შედით Chrome-ში ორივე მოწყობილობაზე.</translation> +<translation id="8986207147630327271">თქვენ აპირებთ, ამ ბრაუზერს სამსახურის პროფილი დაამატოთ, რითაც თქვენს ადმინისტრატორს კონტროლს მხოლოდ სამსახურის პროფილზე მიანიჭებთ.</translation> <translation id="8999208279178790196">{0,plural, =0{ხელმისაწვდომია Chrome-ის განახლება}=1{ხელმისაწვდომია Chrome-ის განახლება}other{უკვე # დღეა, რაც ხელმისაწვდომია Chrome-ის განახლება}}</translation> <translation id="9026991721384951619">Chrome OS-მა ვერ დაასინქრონა თქვენი მონაცემები, რადგან თქვენი ანგარიშის შესვლის დეტალები მოძველდა.</translation> <translation id="9067395829937117663">Google Chrome-ის მუშაობისთვის საჭიროა Windows 7 ან უფრო ახალი ვერსია.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lo.xtb b/chrome/app/resources/google_chrome_strings_lo.xtb index 37c127ff..52ee3c0 100644 --- a/chrome/app/resources/google_chrome_strings_lo.xtb +++ b/chrome/app/resources/google_chrome_strings_lo.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">ນີ້ແມ່ນການຕິດຕັ້ງສຳຮອງຂອງ Google Chrome ແລະ ບໍ່ສາມາດຕັ້ງໃຫ້ເປັນໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນຂອງທ່ານໄດ້.</translation> <translation id="2348335408836342058">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຂອງທ່ານສຳລັບເວັບໄຊນີ້</translation> <translation id="234869673307233423">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ໃນພາຍຫລັງ.</translation> +<translation id="235650106824528204">ຜູ້ເບິ່ງແຍງລະບົບໂປຣໄຟລ໌ບ່ອນເຮັດວຽກສາມາດລຶບຂໍ້ມູນ Chrome ໃດໆກໍຕາມທີ່ສ້າງຂຶ້ນໃນລະຫວ່າງການນຳໃຊ້ໂປຣໄຟລ໌ນີ້ (ເຊັ່ນ: ການສ້າງບຸກມາກ, ປະຫວັດ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆ) ອອກໄດ້. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້ ເພາະວ່າບໍ່ມີການຊິງຄ໌ຢູ່ໃນໂດເມນຂອງທ່ານ.</translation> <translation id="2467438592969358367">Google Chrome ຕ້ອງການສົ່ງອອກລະຫັດຜ່ານຂອງທ່ານ. ກະລຸນາພິມລະຫັດຜ່ານ Windows ຂອງທ່ານ ເພື່ອອະນຸຍາດສິ່ງນີ້.</translation> <translation id="2485422356828889247">ຖອນຕິດຕັ້ງ</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">ກ່ຽວກັບ Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">ບໍ່ສາມາດເປີດໃຊ້ Chrome. ກະລຸນາລອງອີກຄັ້ງ.</translation> +<translation id="5851757216820085940">ຖ້າທ່ານມີບັນຊີ Google ຫຼາຍບັນຊີ, ທ່ານສາມາດເພີ່ມພວກມັນໃສ່ <ph name="DEVICE_TYPE" /> ຂອງທ່ານໄດ້. ບັນຊີຂອງທ່ານຈະມີໃຫ້ນຳໃຊ້ໃນໂປຣແກຣມທ່ອງເວັບ Chrome ແລະ Play Store, ເຊັ່ນດຽວກັບການບໍລິການຕ່າງໆ ເຊັ່ນ: Gmail, Drive ແລະ YouTube.<ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome ກໍາລັງພະຍາຍາມແກ້ໄຂລະຫັດຜ່ານ.</translation> <translation id="5895138241574237353">ເລີ່ມຕົ້ນໃໝ່</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - ການເຂົ້າສູ່ລະບົບເຄືອຂ່າຍ</translation> <translation id="5940385492829620908">ເວັບຂອງທ່ານ, ບຸກມາກສ໌, ແລະ Chrome ອື່ນສົດຢູ່ທີ່ນີ້.</translation> <translation id="5941830788786076944">ເຮັດ Google Chrome ເປັນບຣາວເຊີມາດຕະຖານ</translation> <translation id="6070348360322141662">ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, Google Chrome ຈະເຂົ້າລະຫັດລັບຂໍ້ມູນຂອງທ່ານ</translation> +<translation id="608006075545470555">ເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກໃສ່ໂປຣແກຣມທ່ອງເວັບນີ້</translation> <translation id="6113794647360055231">Chrome ດີກວ່າແລ້ວ</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS ເຮັດໃຫ້ເປັນໄປໄດ້ໂດຍ <ph name="BEGIN_LINK_CROS_OSS" />ຊອບແວ open source<ph name="END_LINK_CROS_OSS" /> ເພີ່ມເຕີມ.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">ກຳລັງອັບເດດ Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">ລະບົບ Chrome OS</translation> <translation id="6650333065969705433">ເພື່ອໃຊ້ Rosetta ຫຼິ້ນມີເດຍທີ່ມີການປ້ອງກັນ, ທ່ານຕ້ອງຣິສະຕາດ Chrome.</translation> <translation id="6676384891291319759">ການເຂົ້າຫາອິນເຕີເນັດ</translation> <translation id="6679975945624592337">ໃຫ້ Google Chrome ເປີດໃຊ້ຢູ່ໃນພື້ນຫຼັງ</translation> <translation id="6750954913813541382">ເພື່ອແກ້ໄຂຂໍ້ຜິດພາດກ່ຽວກັບການສະກົດຄຳ, Chrome ສົ່ງຂໍ້ຄວາມທີ່ທ່ານພິມໃນໂປຣແກຣມທ່ອງເວັບໃຫ້ Google</translation> +<translation id="6755885556185485672">Chrome OS ປິດຢ່າງບໍ່ຖືກຕ້ອງ.</translation> <translation id="677276454032249905">ຢືນຢັນການອອກຈາກ Chrome ບໍ?</translation> <translation id="683440813066116847">ກົດລະບຽບຂາເຂົ້າສໍາລັບ Google Chrome Canary ເພື່ອອະນຸຍາດໃຫ້ການຈາລະຈອນ mDNS.</translation> <translation id="6885412569789873916">ແອັບ Chrome Beta</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">ຫາກໍນຳໃຊ້ການອັບເດດຄວາມປອດໄພພິເສດສຳລັບ Google Chrome. ກະລຸນາປິດເປີດໃໝ່ຕອນນີ້ເລີຍ ແລ້ວພວກເຮົາຈະກູ້ຄືນແຖບຂອງທ່ານ.</translation> <translation id="8521348052903287641">ກົດລະບຽບຂາເຂົ້າສໍາລັບ Google Chrome Dev ເພື່ອອະນຸຍາດການຮັບສົ່ງຂໍ້ມູນ mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກນີ້ແຍກກັນຢ່າງສິ້ນເຊີງຈາກໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານ.</translation> <translation id="8556340503434111824">ມີ Google Chrome ລຸ້ນໃໝ່ຢູ່, ແລະມັນໄວກ່ວາຜ່ານມາ.</translation> <translation id="861359755029082151">Rosetta ເຮັດໃຫ້ Chrome ສາມາດຫຼິ້ນມີເດຍທີ່ມີການປ້ອງກັນໃນໜ້ານີ້ໄດ້.</translation> <translation id="8614913330719544658">Google Chrome ບໍ່ຕອບຮັບ. ເລີ່ມເປີດໃຊ້ໃໝ່ດຽວນີ້ບໍ?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">ເພື່ອໃຫ້ Chrome ສາມາດຫຼິ້ນມີເດຍທີ່ມີການປ້ອງກັນໄດ້, ທ່ານຈຳເປັນຕ້ອງຕິດຕັ້ງ Rosetta. ທ່ານຕ້ອງການຕິດຕັ້ງມັນຕອນນີ້ບໍ?</translation> <translation id="8914504000324227558">ເປີດໃຊ້ Chrome ຄືນໃໝ່</translation> <translation id="8922193594870374009">ເພື່ອສົ່ງເບີຈາກ <ph name="ORIGIN" /> ໃຫ້ໂທລະສັບ Android ຂອງທ່ານ, ກະລຸນາເຂົ້າສູ່ລະບົບ Chrome ຢູ່ໃນທັງສອງອຸປະກອນ.</translation> +<translation id="8986207147630327271">ທ່ານກຳລັງເພີ່ມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກໃສ່ໂປຣແກຣມທ່ອງເວັບນີ້ ແລະ ໃຫ້ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານຄວບຄຸມໂປຣໄຟລ໌ບ່ອນເຮັດວຽກດັ່ງກ່າວເທົ່ານັ້ນ.</translation> <translation id="8999208279178790196">{0,plural, =0{ມີການອັບເດດ Chrome}=1{ມີການອັບເດດ Chrome}other{ມີການອັບເດດ Chrome ເປັນເວລາ # ມື້ແລ້ວ}}</translation> <translation id="9026991721384951619">Chrome OS ບໍ່ສາມາດຊິງຄ໌ຂໍ້ມູນຂອງທ່ານໄດ້ ເພາະວ່າລາຍລະອຽດການລົງຊື່ເຂົ້າບັນຊີຂອງທ່ານຫຼ້າສະໄໝແລ້ວ.</translation> <translation id="9067395829937117663">Google Chrome ຕ້ອງການ Windows 7 ຫຼື ສູງກວ່າ.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb index fdd2c8a..c914e30 100644 --- a/chrome/app/resources/google_chrome_strings_lv.xtb +++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -54,6 +54,7 @@ <translation id="2309047409763057870">Šī ir Google Chrome papildu instalācija, un to nevar izmantot kā noklusējuma pārlūku.</translation> <translation id="2348335408836342058">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu kamerai un mikrofonam šajā vietnē.</translation> <translation id="234869673307233423">Pārlūkprogrammā Chrome nevar pārbaudīt jūsu paroles. Vēlāk mēģiniet vēlreiz.</translation> +<translation id="235650106824528204">Darba profila administrators var noņemt šī profila lietošanas laikā ģenerētos Chrome datus (piemēram, grāmatzīmes, vēsturi, paroles un citus iestatījumus). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome nevarēja sinhronizēt jūsu datus, jo jūsu domēnam nav pieejama sinhronizācija.</translation> <translation id="2467438592969358367">Pārlūkā Google Chrome tiek mēģināts eksportēt jūsu paroles. Lai to atļautu, ierakstiet savu Windows paroli.</translation> <translation id="2485422356828889247">Atinstalēt</translation> @@ -173,12 +174,14 @@ <translation id="573759479754913123">Par &Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> — Google Chrome Canary</translation> <translation id="5804318322022881572">Neizdevās palaist Chrome. Mēģiniet vēlreiz.</translation> +<translation id="5851757216820085940">Ja jums ir vairāki Google konti, varat tos pievienot, lai <ph name="DEVICE_TYPE" /> atcerētos tos visus. Jūsu konti būs pieejami pārlūkprogrammā Chrome un Play veikalā, kā arī tādos pakalpojumos kā Gmail, Disks un YouTube. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome mēģina rediģēt paroles.</translation> <translation id="5895138241574237353">Restartēt</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> — pierakstīšanās tīklā</translation> <translation id="5940385492829620908">Šeit atrodas jūsu tīmekļa saturs, grāmatzīmes un cits Chrome saturs.</translation> <translation id="5941830788786076944">Izveidot Google Chrome par noklusējuma pārlūku</translation> <translation id="6070348360322141662">Papildu drošības nolūkos Google Chrome šifrēs jūsu datus.</translation> +<translation id="608006075545470555">Darba profila pievienošana šai pārlūkprogrammai</translation> <translation id="6113794647360055231">Pārlūkā Chrome ir veikti uzlabojumi</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> — Google Chrome beta versija</translation> @@ -190,10 +193,12 @@ <translation id="6368958679917195344">Chrome OS ir kļuvusi iespējama, pateicoties papildu <ph name="BEGIN_LINK_CROS_OSS" />atklātā pirmkoda programmatūrai<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> — Google Chrome izstrādātāju versija</translation> <translation id="6566149418543181476">Notiek Google Chrome atjaunināšana (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS sistēma</translation> <translation id="6650333065969705433">Lai aizsargāta multivides satura atskaņošanai izmantotu Rosetta, jums jārestartē pārlūks Chrome.</translation> <translation id="6676384891291319759">Piekļūt internetam</translation> <translation id="6679975945624592337">Ļaut pārlūkam Google Chrome darboties fonā</translation> <translation id="6750954913813541382">Lai labotu pareizrakstības kļūdas, Chrome nosūta jūsu pārlūkprogrammā ievadīto tekstu Google serveriem</translation> +<translation id="6755885556185485672">Chrome OS netika pareizi izslēgta.</translation> <translation id="677276454032249905">Vai tik un tā aizvērt pārlūku Chrome?</translation> <translation id="683440813066116847">Ienākošo savienojumu kārtula pārlūkam Google Chrome Canary, lai atļautu mDNS datplūsmu.</translation> <translation id="6885412569789873916">Chrome Beta lietotnes</translation> @@ -252,6 +257,7 @@ <translation id="8498858610309223613">Tikko tika piemērots īpašs Google Chrome drošības atjauninājums. Restartējiet tūlīt, un mēs atjaunosim jūsu cilnes.</translation> <translation id="8521348052903287641">Ienākošo savienojumu kārtula pārlūkam Google Chrome Dev, lai atļautu mDNS datplūsmu.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Šis darba profils ir pilnīgi nesaistīts ar jūsu personīgo profilu.</translation> <translation id="8556340503434111824">Ir pieejama jauna Google Chrome versija, un tā ir ātrāka nekā jebkad agrāk.</translation> <translation id="861359755029082151">Izmantojot Rosetta, pārlūkā Chrome var atskaņot aizsargātu multivides saturu šajā lapā.</translation> <translation id="8614913330719544658">Google Chrome nereaģē. Vai restartēt to tūlīt?</translation> @@ -270,6 +276,7 @@ <translation id="8907709077090383765">Lai pārlūkā Chrome iespējotu aizsargāta multivides satura atskaņošanu, jums jāinstalē Rosetta. Vai vēlaties to instalēt tūlīt?</translation> <translation id="8914504000324227558">Atkārtoti palaist pārlūkprogrammu Chrome</translation> <translation id="8922193594870374009">Lai nosūtītu numuru no vietnes <ph name="ORIGIN" /> uz savu Android tālruni, abās ierīcēs pierakstieties pārlūkā Chrome.</translation> +<translation id="8986207147630327271">Jūs pievienosiet šai pārlūkprogrammai darba profilu un piešķirsiet administratoram kontroli tikai pār darba profilu.</translation> <translation id="8999208279178790196">{0,plural, =0{Ir pieejams Chrome atjauninājums}=1{Ir pieejams Chrome atjauninājums}zero{Chrome atjauninājums ir pieejams jau # dienu}one{Chrome atjauninājums ir pieejams jau # dienu}other{Chrome atjauninājums ir pieejams jau # dienas}}</translation> <translation id="9026991721384951619">Chrome OS nevarēja sinhronizēt jūsu datus, jo jūsu konta pierakstīšanās informācija ir novecojusi.</translation> <translation id="9067395829937117663">Pārlūka Google Chrome izmantošanai nepieciešama operētājsistēma Windows 7 vai jaunāka versija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb index af893f8a..ab9fed8 100644 --- a/chrome/app/resources/google_chrome_strings_mk.xtb +++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Ова е второстепена инсталација на Google Chrome и затоа не може да биде стандарден прелистувач.</translation> <translation id="2348335408836342058">На Chrome му треба дозвола за да пристапи до камерата и микрофонот за сајтов</translation> <translation id="234869673307233423">Chrome не може да ги провери вашите лозинки. Обидете се пак подоцна.</translation> +<translation id="235650106824528204">Податоците на Chrome што се генерирани при користењето на овој профил (како на пример, создавање обележувачи, историја, лозинки и други поставки) може да се отстранат од страна на администраторот на работниот профил. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome не може да ги синхронизира вашите податоци затоа што Sync не е достапен за вашиот домен.</translation> <translation id="2467438592969358367">Google Chrome сака да ги извезе вашите лозинки. Внесете ја лозинката за Windows за да го дозволите ова.</translation> <translation id="2485422356828889247">Деинсталирај</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">За Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Не може да се стартува Chrome. Обидете се повторно.</translation> +<translation id="5851757216820085940">Ако имате повеќе сметки на Google, може да ги додадете во вашиот <ph name="DEVICE_TYPE" />. Вашите сметки ќе бидат достапни во прелистувачот Chrome и во Play Store, но и на услугите како што се Gmail, Drive и YouTube.<ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome се обидува да измени лозинки.</translation> <translation id="5895138241574237353">Рестартирај</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Мрежно најавување</translation> <translation id="5940385492829620908">Вебот, обележувачите и останатите работи на Chrome живеат тука.</translation> <translation id="5941830788786076944">Постави го Google Chrome за стандарден прелистувач</translation> <translation id="6070348360322141662">За дополнителна безбедност, Google Chrome ќе ги шифрира вашите податоци</translation> +<translation id="608006075545470555">Додајте работен профил во овој прелистувач</translation> <translation id="6113794647360055231">Chrome тукушто се подобри</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS е овозможен од дополнителен <ph name="BEGIN_LINK_CROS_OSS" />софтвер со отворен код<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome се ажурира (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Систем Chrome OS</translation> <translation id="6650333065969705433">За да користите Rosetta за пуштање заштитени аудиовизуелни содржини, треба да го рестартирате Chrome.</translation> <translation id="6676384891291319759">Пристап до интернет</translation> <translation id="6679975945624592337">Остави Google Chrome да работи во заднина</translation> <translation id="6750954913813541382">За исправка на правописни грешки, Chrome го испраќа текстот што го пишувате во прелистувачот до Google</translation> +<translation id="6755885556185485672">Chrome OS не се исклучи правилно.</translation> <translation id="677276454032249905">Сепак да се излезе од Chrome?</translation> <translation id="683440813066116847">Дојдовно правило за Google Chrome Canary за да овозможи сообраќај mDNS.</translation> <translation id="6885412569789873916">Апликации на Chrome Beta</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Тукушто применивме посебно безбедносно ажурирање за Google Chrome. Рестартирајте сега и ќе ви ги вратиме картичките.</translation> <translation id="8521348052903287641">Дојдовно правило за Google Chrome Dev за овозможување mDNS-сообраќај.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Овој работен профил е целосно одделен од вашиот личен профил.</translation> <translation id="8556340503434111824">Достапна е нова верзија на Google Chrome и побрза е од кога било.</translation> <translation id="861359755029082151">Rosetta му овозможува на Chrome да пушта заштитени аудиовизуелни содржини на страницава.</translation> <translation id="8614913330719544658">Google Chrome не реагира. Да се рестартира сега?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">За да му овозможите на Chrome да пушта заштитени аудиовизуелни содржини, треба да инсталирате Rosetta. Дали сакате да се инсталира сега?</translation> <translation id="8914504000324227558">Рестартирајте го Chrome</translation> <translation id="8922193594870374009">За да испратите број од <ph name="ORIGIN" /> до телефонот со Android, најавете се на Chrome на двата уреда.</translation> +<translation id="8986207147630327271">Додавате работен профил во овој прелистувач и му давате контрола на администраторот само врз тој профил.</translation> <translation id="8999208279178790196">{0,plural, =0{Достапно е ажурирање за Chrome}=1{Достапно е ажурирање за Chrome}one{Достапно е ажурирање за Chrome веќе # ден}other{Достапно е ажурирање за Chrome веќе # дена}}</translation> <translation id="9026991721384951619">Chrome OS не може да ги синхронизира вашите податоци бидејќи вашите информации за пријавување на сметката се застарени.</translation> <translation id="9067395829937117663">Google Chrome бара Windows 7 или понова верзија.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb index c02a5ec6..d635d9d 100644 --- a/chrome/app/resources/google_chrome_strings_mn.xtb +++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Энэ нь Google Chrome-н хоёр дахь суулгалт тул таны өгөгдмөл хөтчөөр сонгох боломжгүй.</translation> <translation id="2348335408836342058">Энэ сайтыг ашиглахын тулд Chrome-д таны камер, микрофонд хандах зөвшөөрөл шаардлагатай</translation> <translation id="234869673307233423">Chrome таны нууц үгсийг шалгах боломжгүй байна. Дараа дахин оролдоно уу.</translation> +<translation id="235650106824528204">Энэ профайлыг ашиглах үед үүссэн Chrome-н аливаа өгөгдлийг (хавчуурга, түүх, нууц үг болон бусад тохиргоог үүсгэх зэрэг) ажлын профайлын админ хасах боломжтой. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Таны домэйнд sync хийх боломжгүй учраас Google Chrome нь таны өгөгдлийг sync хийж чадсангүй.</translation> <translation id="2467438592969358367">Google Chrome таны нууц үгийг экспортлох хүсэлтэй байна. Үүнийг зөвшөөрч байгаа бол Windows-н нууц үгээ оруулна уу.</translation> <translation id="2485422356828889247">Устгах</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">Chrome үйлдлийн системийн тухай</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Канари</translation> <translation id="5804318322022881572">Chrome-г эхлүүлж чадсангүй. Дахин оролдоно уу.</translation> +<translation id="5851757216820085940">Хэрэв танд олон Google Бүртгэл байгаа бол тэдгээрийг <ph name="DEVICE_TYPE" />-д нэмэх боломжтой. Таны бүртгэлүүд Chrome хөтөч, Play Store түүнчлэн Gmail, Драйв болон YouTube зэрэг үйлчилгээнүүдэд боломжтой болно.<ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome нь нууц үгсийг засах гэж оролдож байна.</translation> <translation id="5895138241574237353">Дахин асаах</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Сүлжээнд нэвтрэх</translation> <translation id="5940385492829620908">Таны веб, хавчуурга, болон Chrome-ийн бусад зүйлс энд хадгалагддаг.</translation> <translation id="5941830788786076944">Google Chrome-ыг анхдагч веб хөтөчөө болгоно уу</translation> <translation id="6070348360322141662">Таны аюулгүй байдлыг сайжруулахын тулд Google Chrome таны өгөгдлийг шифрлэнэ</translation> +<translation id="608006075545470555">Энэ хөтчид ажлын профайл нэмэх</translation> <translation id="6113794647360055231">Chrome илүү сайн боллоо</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Бета</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS-ийг нэмэлт <ph name="BEGIN_LINK_CROS_OSS" /> нээлттэй эхийн программ хангамжаар ажиллуулж байна <ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Дев</translation> <translation id="6566149418543181476">Google Chrome-г шинэчилж байна (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome үйлдлийн систем</translation> <translation id="6650333065969705433">Хамгаалагдсан медиаг тоглуулахын тулд Rosetta-г ашиглах бол та Chrome-г дахин эхлүүлэх ёстой.</translation> <translation id="6676384891291319759">Интернэтэд нэвтрэх</translation> <translation id="6679975945624592337">Google Chrome-г цаана ажиллуулахыг зөвшөөрөх</translation> <translation id="6750954913813541382">Зөв бичгийн алдааг засахын тулд Chrome таны хөтөч дээр бичсэн текстийг Google-д илгээдэг</translation> +<translation id="6755885556185485672">Chrome үйлдлийн системийг зөв унтраагаагүй байна.</translation> <translation id="677276454032249905">Chrome-с ямар ч үед гарах уу?</translation> <translation id="683440813066116847">mDNS-ийг зөвшөөрөх Google Chrome Canary-ийн гадаад дүрэм.</translation> <translation id="6885412569789873916">Chrome Бэта Апп</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Google Chrome-н аюулгүй байдлын тусгай шинэчлэлтийг хийж дууслаа. Одоо дахин эхлүүлнэ үү. Бид таны табыг сэргээх болно.</translation> <translation id="8521348052903287641">mDNS урсгалыг зөвшөөрөх Google Chrome-н дотоод дүрэм.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Энэ ажлын профайл нь таны хувийн профайлаас бүрэн тусдаа байна.</translation> <translation id="8556340503434111824">Google Chrome-ийн шинэ хувилбар боломжтой байгаа бөгөөд энэ нь урьд урьдныхаас ч илүү хурдан.</translation> <translation id="861359755029082151">Rosetta нь Chrome-г энэ хуудсан дээр хамгаалагдсан медиа тоглуулах боломжтой болгодог.</translation> <translation id="8614913330719544658">Google Chrome ажиллахгүй байна. Дахин эхүүлэх үү?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Chrome-г хамгаалагдсан медиа тоглуулах боломжтой болгохын тулд та Rosetta-г суулгах шаардлагатай. Та үүнийг одоо суулгамаар байна уу?</translation> <translation id="8914504000324227558">Chrome-г дахин эхлүүлэх</translation> <translation id="8922193594870374009"><ph name="ORIGIN" />-с Android утсандаа дугаар илгээхийн тулд хоёр төхөөрөмжийнхөө аль алинаас нь Chrome-д нэвтэрнэ үү.</translation> +<translation id="8986207147630327271">Та энэ хөтчид ажлын профайл нэмж байгаа бөгөөд администратордоо зөвхөн ажлын профайлын хяналтыг өгч байна.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome-н шинэчлэлт боломжтой байна}=1{Chrome-н шинэчлэлт боломжтой байна}other{Chromium-н шинэчлэлт # хоногийн турш боломжтой байсаар байна}}</translation> <translation id="9026991721384951619">Таны бүртгэлийн мэдээлэл хуучирсан учраас Chrome OS нь таны өгөгдлийг sync хийж чадсангүй.</translation> <translation id="9067395829937117663">Google Chrome-д Windows 7 болон үүнээс дээших хувилбарууд шаардлагатай.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index 8f337cba..b5b5e78 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Ini adalah pemasangan kedua Google Chrome dan tidak boleh dijadikan penyemak imbas lalai anda.</translation> <translation id="2348335408836342058">Chrome memerlukan kebenaran untuk mengakses kamera dan mikrofon anda bagi tapak ini</translation> <translation id="234869673307233423">Chrome tidak dapat menyemak kata laluan anda. Cuba lagi nanti.</translation> +<translation id="235650106824528204">Sebarang data Chrome yang dijana semasa penggunaan profil ini (seperti pembuatan penanda halaman, sejarah, kata laluan dan tetapan lain) boleh dialih keluar oleh pentadbir profil kerja. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome tidak dapat menyegerakkan data anda kerana Segerak tidak tersedia untuk domain anda.</translation> <translation id="2467438592969358367">Google Chrome mahu mengeksport kata laluan anda. Taip kata laluan Windows anda untuk membenarkannya.</translation> <translation id="2485422356828889247">Nyahpasang</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Mengenai Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Tidak dapat melancarkan Chrome. Cuba lagi.</translation> +<translation id="5851757216820085940">Jika anda mempunyai berbilang Akaun Google, anda boleh menambahkan akaun tersebut pada <ph name="DEVICE_TYPE" /> anda. Akaun anda akan tersedia dalam penyemak imbas Chrome dan Gedung Play, serta perkhidmatan seperti Gmail, Drive dan YouTube.<ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome cuba mengedit kata laluan.</translation> <translation id="5895138241574237353">Mulakan Semula</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Log Masuk Rangkaian</translation> <translation id="5940385492829620908">Web, penanda halaman dan barangan Chrome anda yang lain tinggal di sini.</translation> <translation id="5941830788786076944">Jadikan Google Chrome penyemak imbas lalai</translation> <translation id="6070348360322141662">Untuk keselamatan tambahan, Google Chrome akan menyulitkan data anda</translation> +<translation id="608006075545470555">Tambahkan Profil Kerja pada penyemak imbas ini</translation> <translation id="6113794647360055231">Chrome kini lebih baik</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">OS Chrome menjadi kenyataan dengan <ph name="BEGIN_LINK_CROS_OSS" />perisian sumber terbuka<ph name="END_LINK_CROS_OSS" /> tambahan.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Mengemas kini Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Sistem OS Chrome</translation> <translation id="6650333065969705433">Untuk menggunakan Rosetta untuk memainkan media yang dilindungi, anda mesti memulakan semula Chrome.</translation> <translation id="6676384891291319759">Akses Internet</translation> <translation id="6679975945624592337">Biarkan Google Chrome Dijalankan Di Latar Belakang</translation> <translation id="6750954913813541382">Untuk membetulkan kesalahan ejaan, Chrome akan menghantar teks yang anda taip dalam penyemak imbas kepada Google</translation> +<translation id="6755885556185485672">OS Chrome tidak dimatikan dengan betul.</translation> <translation id="677276454032249905">Keluar daripada Chrome juga?</translation> <translation id="683440813066116847">Peraturan masuk bagi Google Chrome Canary untuk membenarkan trafik mDNS.</translation> <translation id="6885412569789873916">Apl Chrome Beta</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">Kemas kini keselamatan khas untuk Google Chrome baru sahaja diterapkan. Mulakan semula sekarang dan kami akan memulihkan tab anda.</translation> <translation id="8521348052903287641">Peraturan masuk bagi Google Chrome Dev untuk membenarkan trafik mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Profil kerja ini terpisah sepenuhnya daripada profil peribadi anda.</translation> <translation id="8556340503434111824">Terdapat versi baharu Google Chrome yang tersedia, dan ia lebih pantas daripada biasa.</translation> <translation id="861359755029082151">Rosetta membolehkan Chrome memainkan media yang dilindungi pada halaman ini.</translation> <translation id="8614913330719544658">Google Chrome tidak responsif. Lancarkan semula sekarang?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Untuk membolehkan Chrome memainkan media yang dilindungi, anda perlu memasang Rosetta. Adakah anda ingin memasang Rosetta sekarang?</translation> <translation id="8914504000324227558">Lancarkan semula Chrome</translation> <translation id="8922193594870374009">Untuk menghantar nombor daripada <ph name="ORIGIN" /> ke telefon Android anda, log masuk ke Chrome pada kedua-dua peranti.</translation> +<translation id="8986207147630327271">Anda menambahkan profil kerja pada penyemak imbas ini dan memberi pentadbir anda kawalan terhadap profil kerja sahaja.</translation> <translation id="8999208279178790196">{0,plural, =0{Kemas kini Chrome tersedia}=1{Kemas kini Chrome tersedia}other{Kemas kini Chrome telah tersedia selama # hari}}</translation> <translation id="9026991721384951619">OS Chrome tidak dapat menyegerakkan data anda kerana butiran log masuk akaun anda sudah lapuk.</translation> <translation id="9067395829937117663">Google Chrome memerlukan Windows 7 atau lebih tinggi.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_my.xtb b/chrome/app/resources/google_chrome_strings_my.xtb index ec4d382..1e64b1bd 100644 --- a/chrome/app/resources/google_chrome_strings_my.xtb +++ b/chrome/app/resources/google_chrome_strings_my.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">ဤသည်မှာ Google Chrome ကို အရန်သဘော ထည့်သွင်းခြင်းဖြစ်ပြီး သင်၏မူရင်းဘရောင်ဇာအဖြစ် ၎င်းကို အသုံးပြု၍မရနိုင်ပါ။</translation> <translation id="2348335408836342058">ဤဝဘ်ဆိုက်အတွက် Chrome သည် သင်၏ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်ပါသည်</translation> <translation id="234869673307233423">Chrome က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation> +<translation id="235650106824528204">ဤပရိုဖိုင်အသုံးပြုစဉ်အတွင်း ရရှိလာသော Chrome ဒေတာမှန်သမျှ (လိပ်စာများ၊ မှတ်တမ်း၊ စကားဝှက်နှင့် အခြားဆက်တင်များပြုလုပ်ခြင်း ကဲ့သို့) ကို အလုပ်ပရိုဖိုင် စီမံခန့်ခွဲသူက ဖယ်ရှားနိုင်သည်။ <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">သင်၏ ဒိုမိန်းအတွက် စင့်က် လုပ်မရနိုင်သောကြောင့် Google Chrome က သင်၏ ဒေတာကို စင့်က် မလုပ်နိုင်ခဲ့ပါ။</translation> <translation id="2467438592969358367">Google Chrome သည် သင်၏ စကားဝှက်များကို တင်ပို့လိုသည်။ ၎င်းကို ခွင့်ပြုရန် သင်၏ Windows စကားဝှက်ကို ထည့်ပါ။</translation> <translation id="2485422356828889247">ဖြုတ်ရန်</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">Chrome OS အကြောင်း</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome ကို ဖွင့်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။</translation> +<translation id="5851757216820085940">သင့်တွင် Google Account အများအပြားရှိလျှင် ၎င်းတို့ကို သင်၏ <ph name="DEVICE_TYPE" /> သို့ ထည့်နိုင်သည်။ သင့်အကောင့်များကို Chrome ဘရောင်ဇာနှင့် Play Store အပြင် Gmail၊ Drive နှင့် YouTube ကဲ့သို့ ဝန်ဆောင်မှုများတွင် အသုံးပြုနိုင်သည်။<ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome က စကားဝှက်များ တည်းဖြတ်ရန် ကြိုးပမ်းနေသည်။</translation> <translation id="5895138241574237353">ပြန်စတင်မည</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - ကွန်ရက် လက်မှတ်ထိုးဝင်ခြင်း</translation> <translation id="5940385492829620908">သင်၏ ဝဘ်၊ စာညှပ်များ၊ နှင့် အခြားသော Chrome အရာများဟာ ဒီမှာ နေထိုင်ကြပါသည်။</translation> <translation id="5941830788786076944">Google Chrome ကို ပုံသေ ဘရောင်ဇာ ပြုလုပ်ပါ။</translation> <translation id="6070348360322141662">လုံခြုံရေး ပိုမိုတင်းကြပ်စေရန်အတွက် Google Chrome သည် သင်၏ ဒေတာများကို အသွင်ဝှက်ထားပါမည်</translation> +<translation id="608006075545470555">ဤဘရောင်ဇာတွင် အလုပ်ပရိုဖိုင်ထည့်ခြင်း</translation> <translation id="6113794647360055231">Chrome သည် ပိုလို့ကို ကောင်းလာပါပြီ</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS ကို ထပ်ဖြည့်ပေးခဲ့သည့် <ph name="BEGIN_LINK_CROS_OSS" />အခမဲ့ ရင်းမြစ် ဆော့ဝဲ<ph name="END_LINK_CROS_OSS" />များဖြင့် အားဖြည့်ပေးထားသည်။</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome ကို အပ်ဒိတ်လုပ်နေသည် (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS စနစ်</translation> <translation id="6650333065969705433">ကာကွယ်ထားသောမီဒီယာ ဖွင့်ရန်အတွက် Rosetta အသုံးပြုရန် Chrome ကို ပြန်စရမည်။</translation> <translation id="6676384891291319759">အင်တာနက် ရယူရန်</translation> <translation id="6679975945624592337">Google Chrome ကို နောက်ခံတွင် ဖွင့်ခွင့်ပေးပါ</translation> <translation id="6750954913813541382">စာလုံးပေါင်း အမှားများ ပြင်ရန် Chrome က ဘရောင်ဇာတွင် သင်ရိုက်သည့် စာသားကို Google သို့ ပို့ပါသည်</translation> +<translation id="6755885556185485672">Chrome OS ကို မှန်ကန်စွာ ပိတ်မထားပါ။</translation> <translation id="677276454032249905">မည်သို့ပင်ဖြစ်စေ Chrome မှ ထွက်လိုပါသလား။</translation> <translation id="683440813066116847">Google Chrome ကိန္နရီ အတွက် mDNS သွားလာမှု ခွင့်ပြုရေး အဝင် စည်းကမ်းချက်</translation> <translation id="6885412569789873916">Chrome စမ်းသပ်ဆော့ဖ်ဝဲ အက်ပ်များ</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Google Chrome အတွက် အထူးလုံခြုံရေးအပ်ဒိတ်ကို ယခုလေးတင် ထည့်သွင်းထားသည်။ ယခုပြန်လည်စတင်လိုက်ပါက သင်၏ တဘ်များကို ပြန်ဖွင့်ပေးပါမည်။</translation> <translation id="8521348052903287641">Google Chrome Dev က mDNS အသွားအလာကို ခွင့်ပြုပေးနိုင်ရန်အတွက် ချမှတ်ထားသော အတွင်းစည်းမျဉ်း။</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">ဤအလုပ်ပရိုဖိုင်ကို သင်၏ကိုယ်ပိုင်ပရိုဖိုင်မှ လုံးဝခွဲထုတ်ထားသည်။</translation> <translation id="8556340503434111824">Google Chrome ၏ ဗားရှင်း အသစ်ကို ရနိုင်ပါပြီ၊ ၎င်းသည် မကြုံစဖူး ပိုမြန်ပါသည်။</translation> <translation id="861359755029082151">Rosetta သည် Chrome အား ဤစာမျက်နှာရှိ ကာကွယ်ထားသောမီဒီယာကို ဖွင့်ခွင့်ပေးသည်။</translation> <translation id="8614913330719544658">Google Chrome သည် မတုံ့ပြန်ပါ။ ယခု ပြန်ပြီးဖွင့်တင်ရမလား?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">ကာကွယ်ထားသောမီဒီယာကို Chrome က ဖွင့်ရန်အတွက် Rosetta ထည့်သွင်းရပါမည်။ ၎င်းကို ယခုထည့်သွင်းလိုသလား။</translation> <translation id="8914504000324227558">Chromium ကို အသစ်တစ်ဖန် ပြန်စရန်</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> မှ သင်၏ Android ဖုန်းသို့ နံပါတ်တစ်ခုပို့ရန် စက်နှစ်ခုလုံးတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation> +<translation id="8986207147630327271">သင်သည် ဤဘရောင်ဇာတွင် အလုပ်ပရိုဖိုင်ကိုထည့်နေပြီး သင့်စီမံခန့်ခွဲသူကို အလုပ်ပရိုဖိုင်အတွက်သာ ထိန်းချုပ်ခွင့်ပေးနေခြင်း ဖြစ်ပါသည်။</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome အပ်ဒိတ်တစ်ခု ရနိုင်ပါသည်}=1{Chrome အပ်ဒိတ်တစ်ခု ရနိုင်ပါသည်}other{Chrome အပ်ဒိတ်တစ်ခု ရနိုင်သည်မှာ # ရက်ရှိပါပြီ}}</translation> <translation id="9026991721384951619">သင်၏ လက်မှတ်ထိုးရေး အသေးစိတ်များမှာ ဟောင်းသွားကြပြီ ဖြစ်၍ Chrome OSသည် သင်၏ ဒေတာကို စင့်က် မလုပ်နိုင်ခဲ့ပါ။</translation> <translation id="9067395829937117663">Google Chrome ကိုထည့်သွင်းရန် Windows 7 နှင့်အထက် လိုအပ်ပါသည်။</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index 01edd36..8a76b5f 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Dette er en sekundær installering av Google Chrome. Den kan ikke brukes som standardnettleser.</translation> <translation id="2348335408836342058">Chrome trenger tilgang til kameraet ditt og mikrofonen din for dette nettstedet</translation> <translation id="234869673307233423">Chrome kan ikke sjekke passordene dine. Prøv igjen senere.</translation> +<translation id="235650106824528204">Alle Chrome-data som genereres mens denne profilen brukes (f.eks. oppretting av bokmerker, logg, passord og andre innstillinger), kan fjernes av administratoren for jobbprofilen. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dataene dine fordi synkronisering ikke er tilgjengelig for domenet ditt.</translation> <translation id="2467438592969358367">Google Chrome forsøker å eksportere passordene dine. Skriv inn Windows-passordet ditt for å tillate dette.</translation> <translation id="2485422356828889247">Avinstaller</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Om Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Kunne ikke starte Chrome. Prøv på nytt.</translation> +<translation id="5851757216820085940">Hvis du har flere Google-kontoer, kan du legge dem til på <ph name="DEVICE_TYPE" />. Kontoene dine blir tilgjengelige i Chrome-nettleseren, Play-butikken og tjenester som Gmail, Disk og YouTube.<ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome prøver å redigere passord.</translation> <translation id="5895138241574237353">Start på nytt</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – nettverkspålogging</translation> <translation id="5940385492829620908">Her finner du nettinnholdet, bokmerkene og de andre Chrome-tingene dine.</translation> <translation id="5941830788786076944">Gjør Google Chrome til standardleser</translation> <translation id="6070348360322141662">Google Chrome krypterer dataene dine for å øke sikkerheten</translation> +<translation id="608006075545470555">Legg til en jobbprofil i denne nettleseren</translation> <translation id="6113794647360055231">Nå er Chrome blitt enda bedre</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – betaversjon av Google Chrome</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">Chrome OS muliggjøres av <ph name="BEGIN_LINK_CROS_OSS" />tilleggsprogramvare med åpen kildekode<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome for utviklere</translation> <translation id="6566149418543181476">Oppdaterer Google Chrome (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Chrome OS-systemet</translation> <translation id="6650333065969705433">For å bruke Rosetta til å spille av beskyttede medier må du starte Chrome på nytt.</translation> <translation id="6676384891291319759">Gå til Internett</translation> <translation id="6679975945624592337">La Google Chrome kjøre i bakgrunnen</translation> <translation id="6750954913813541382">For å rette stavefeil sender Chrome teksten du skriver inn i nettleseren, til Google</translation> +<translation id="6755885556185485672">Chrome OS ble ikke avsluttet på riktig måte.</translation> <translation id="677276454032249905">Vil du avslutte Chrome likevel?</translation> <translation id="683440813066116847">Regel om innkommende trafikk for Google Chrome Canary for å tillate mDNS-trafikk.</translation> <translation id="6885412569789873916">Chrome Beta-apper</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">En spesiell sikkerhetsoppdatering for Google Chrome ble nettopp installert. Start på nytt nå, så gjenoppretter vi fanene dine.</translation> <translation id="8521348052903287641">Regel for å tillate innkommende mDNS-trafikk i Google Chrome Dev.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Denne jobbprofilen er helt separat fra den personlige profilen din.</translation> <translation id="8556340503434111824">En ny versjon av Google Chrome er tilgjengelig, og den er nå raskere en noen sinne.</translation> <translation id="861359755029082151">Rosetta gjør Chrome i stand til å spille av de beskyttede mediene på denne siden.</translation> <translation id="8614913330719544658">Google Chrome svarer ikke. Vil du starte på nytt nå?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">For at Chrome skal kunne spille av beskyttede medier, må du installere Rosetta. Vil du installere det nå?</translation> <translation id="8914504000324227558">Start Chrome på nytt</translation> <translation id="8922193594870374009">For å sende numre fra <ph name="ORIGIN" /> til Android-telefonen din, logg på Chrome på begge enhetene.</translation> +<translation id="8986207147630327271">Du er i ferd med å legge til en jobbprofil i denne nettleseren og gi administratoren din kontroll over kun jobbprofilen.</translation> <translation id="8999208279178790196">{0,plural, =0{En Chrome-oppdatering er tilgjengelig}=1{En Chrome-oppdatering er tilgjengelig}other{En Chrome-oppdatering har vært tilgjengelig i # dager}}</translation> <translation id="9026991721384951619">Chrome OS kunne ikke synkronisere dataene fordi påloggingsopplysningene dine er foreldede.</translation> <translation id="9067395829937117663">Google Chrome krever Windows 7 eller nyere.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb index a261b31..ec937b6a 100644 --- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Esta é uma instalação secundária do Google Chrome, pelo que não pode tornar-se o navegador predefinido.</translation> <translation id="2348335408836342058">O Chrome necessita de autorização de acesso à câmara e ao microfone para este site.</translation> <translation id="234869673307233423">O Chrome não consegue verificar as suas palavras-passe. Tente novamente mais tarde.</translation> +<translation id="235650106824528204">Os dados do Chromium gerados durante a utilização deste perfil (como a criação de marcadores, histórico, palavras-passe e outras definições) podem ser removidos pelo administrador do perfil de trabalho. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">O Google Chrome não conseguiu sincronizar os dados porque a Sincronização não está disponível para o seu domínio.</translation> <translation id="2467438592969358367">O Google Chrome pretende exportar as suas palavras-passe. Escreva a sua palavra-passe do Windows para permitir esta ação.</translation> <translation id="2485422356828889247">Desinstalar</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Acerca do Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Não foi possível iniciar o Chrome. Tente novamente.</translation> +<translation id="5851757216820085940">Se tiver várias Contas Google, pode adicioná-las ao dispositivo <ph name="DEVICE_TYPE" />. As suas contas estarão disponíveis no navegador Chrome e na Play Store, bem como serviços como o Gmail, o Drive e o YouTube.<ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" />.</translation> <translation id="5867197326698922595">O Google Chrome está a tentar editar palavras-passe.</translation> <translation id="5895138241574237353">Reiniciar</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Início de sessão na rede</translation> <translation id="5940385492829620908">A sua Web, os seus marcadores e os seus outros itens do Chrome estão aqui.</translation> <translation id="5941830788786076944">Tornar o Google Chrome no browser padrão.</translation> <translation id="6070348360322141662">Para uma segurança adicional, o Google Chrome encripta os seus dados</translation> +<translation id="608006075545470555">Adicione um perfil de trabalho a este navegador</translation> <translation id="6113794647360055231">O Chrome está ainda melhor</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">O Chrome OS é possível através de <ph name="BEGIN_LINK_CROS_OSS" />software de código aberto<ph name="END_LINK_CROS_OSS" /> adicional.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">A atualizar o Google Chrome (<ph name="PROGRESS_PERCENT" />)…</translation> +<translation id="6568793831116033768">Sistema Chrome OS</translation> <translation id="6650333065969705433">Para utilizar o Rosetta para reproduzir conteúdo multimédia protegido, tem de reiniciar o Chrome.</translation> <translation id="6676384891291319759">Aceder à Internet</translation> <translation id="6679975945624592337">Permitir que o Google Chrome seja executado em segundo plano</translation> <translation id="6750954913813541382">Para corrigir erros ortográficos, o Chrome envia o texto que escrever no navegador para o Google.</translation> +<translation id="6755885556185485672">O Chrome OS não foi corretamente encerrado.</translation> <translation id="677276454032249905">Pretende sair do Chrome mesmo assim?</translation> <translation id="683440813066116847">Regra de importação para o Google Chrome Canary permitir o tráfego mDNS.</translation> <translation id="6885412569789873916">Apps do Chrome Beta</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">Acabou de ser instalada uma atualização de segurança especial para o Google Chrome. Reinicie agora e iremos restaurar os seus separadores.</translation> <translation id="8521348052903287641">Regra de importação para o Google Chrome Dev permitir o tráfego mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Este perfil de trabalho está completamente separado do seu perfil pessoal.</translation> <translation id="8556340503434111824">Está disponível uma nova versão do Google Chrome, mais rápida do que nunca.</translation> <translation id="861359755029082151">O Rosetta permite que o Chrome reproduza o conteúdo multimédia protegido nesta página.</translation> <translation id="8614913330719544658">O Google Chrome não responde. Reiniciar agora?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Para permitir que o Chrome reproduza conteúdo multimédia protegido, tem de instalar o Rosetta. Pretende instalá-lo agora?</translation> <translation id="8914504000324227558">Reiniciar o Chrome</translation> <translation id="8922193594870374009">Para enviar um número de <ph name="ORIGIN" /> para o seu telemóvel Android, inicie sessão no Chrome em ambos os dispositivos.</translation> +<translation id="8986207147630327271">Está a adicionar um perfil de trabalho a este navegador e a conceder ao seu administrador controlo apenas sobre o perfil de trabalho.</translation> <translation id="8999208279178790196">{0,plural, =0{Está disponível uma atualização do Chrome}=1{Está disponível uma atualização do Chrome}other{Está disponível uma atualização do Chrome há # dias}}</translation> <translation id="9026991721384951619">O Chrome OS não conseguiu sincronizar os dados porque os detalhes de início de sessão da sua conta estão desatualizados.</translation> <translation id="9067395829937117663">O Google Chrome requer o Windows 7 ou superior.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index c3d4eeb9..38d5eaf 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -52,6 +52,7 @@ <translation id="2309047409763057870">Aceasta este o instalare secundară a browserului Google Chrome și nu poate fi setat ca browser prestabilit.</translation> <translation id="2348335408836342058">Chrome are nevoie de permisiune ca să acceseze camera foto și microfonul pentru acest site</translation> <translation id="234869673307233423">Chrome nu îți poate verifica parolele. Încearcă din nou mai târziu.</translation> +<translation id="235650106824528204">Toate datele Chrome generate în timpul folosirii acestui profil (precum marcajele create, istoricul, parolele și alte setări) pot fi eliminate de administratorul profilului de serviciu. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome nu a putut sincroniza datele, deoarece sincronizarea nu este disponibilă pentru domeniul dvs.</translation> <translation id="2467438592969358367">Google Chrome vrea să îți exporte parolele. Pentru a permite asta, introdu parola pentru Windows.</translation> <translation id="2485422356828889247">Dezinstalează</translation> @@ -169,12 +170,14 @@ <translation id="573759479754913123">Despre sistemul de operare Chrome</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome nu a putut fi lansat. Încearcă din nou.</translation> +<translation id="5851757216820085940">Dacă ai mai multe Conturi Google, le poți adăuga pe <ph name="DEVICE_TYPE" />. Conturile vor fi disponibile în browserul Chrome și în Magazinul Play și în servicii cum ar fi Gmail, Drive și YouTube.<ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome încearcă să modifice parolele.</translation> <translation id="5895138241574237353">Reîncepe</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – conectare la rețea</translation> <translation id="5940385492829620908">Experiența web personalizată, marcajele și celelalte date Chrome chiar aici.</translation> <translation id="5941830788786076944">Setează Google Chrome ca browser prestabilit</translation> <translation id="6070348360322141662">Pentru un plus de securitate, Google Chrome îți va cripta datele</translation> +<translation id="608006075545470555">Adaugă un profil de serviciu în acest browser</translation> <translation id="6113794647360055231">Chrome a devenit și mai bun</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome Beta</translation> @@ -186,10 +189,12 @@ <translation id="6368958679917195344">Sistemul de operare Chrome este posibil datorită unui <ph name="BEGIN_LINK_CROS_OSS" />software open source<ph name="END_LINK_CROS_OSS" /> suplimentar.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation> <translation id="6566149418543181476">Google Chrome se actualizează (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Sistemul de operare Chrome</translation> <translation id="6650333065969705433">Ca să poți reda conținut media protejat în Rosetta, trebuie să repornești Chrome.</translation> <translation id="6676384891291319759">Accesează internetul</translation> <translation id="6679975945624592337">Permite Google Chrome să ruleze în fundal</translation> <translation id="6750954913813541382">Pentru a corecta erorile de scriere, Chrome trimite la Google textul pe care îl introduci în browser</translation> +<translation id="6755885556185485672">Sistemul de operare Chrome nu s-a închis corect.</translation> <translation id="677276454032249905">Ieși din Chrome oricum?</translation> <translation id="683440813066116847">Regula de intrare pentru Google Chrome Canary pentru a permite traficul mDNS.</translation> <translation id="6885412569789873916">Aplicații Chrome Beta</translation> @@ -248,6 +253,7 @@ <translation id="8498858610309223613">Tocmai a fost aplicată o actualizare de securitate specială pentru Google Chrome. Repornește acum și filele vor fi restabilite.</translation> <translation id="8521348052903287641">Regula de intrare pentru Google Chrome Dev pentru a permite traficul mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Acest profil de serviciu este complet separat de profilul tău personal.</translation> <translation id="8556340503434111824">Este disponibilă o nouă versiune de Google Chrome, iar aceasta este mai rapidă ca oricând.</translation> <translation id="861359755029082151">Rosetta face posibilă redarea conținutului media protejat din această pagină în Chrome.</translation> <translation id="8614913330719544658">Google Chrome nu mai răspunde. Îl repornești acum?</translation> @@ -266,6 +272,7 @@ <translation id="8907709077090383765">Ca să poți reda conținut media protejat în Chrome, trebuie să instalezi Rosetta. Vrei să instalezi acum?</translation> <translation id="8914504000324227558">Relansați Chrome</translation> <translation id="8922193594870374009">Pentru a trimite un număr de pe <ph name="ORIGIN" /> pe telefonul Android, conectează-te la Chrome pe ambele dispozitive.</translation> +<translation id="8986207147630327271">Adaugi un profil de serviciu în acest browser și îi acorzi administratorului permisiunea de a gestiona numai profilul de serviciu.</translation> <translation id="8999208279178790196">{0,plural, =0{Este disponibilă o actualizare Chrome}=1{Este disponibilă o actualizare Chrome}few{O actualizare Chrome este disponibilă de # zile}other{O actualizare Chrome este disponibilă de # de zile}}</translation> <translation id="9026991721384951619">Sistemul de operare Chrome nu a putut sincroniza datele, deoarece detaliile de conectare pentru contul dvs. nu sunt actualizate.</translation> <translation id="9067395829937117663">Google Chrome necesită Windows 7 sau o versiune ulterioară.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb index 94305f7..32ae0a0 100644 --- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb +++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chrome-a pa ne možete da ga podesite kao podrazumevani pregledač.</translation> <translation id="2348335408836342058">Chrome traži dozvolu da pristupi kameri i mikrofonu za ovaj sajt</translation> <translation id="234869673307233423">Chrome ne može da vam proverava lozinke. Probajte ponovo kasnije.</translation> +<translation id="235650106824528204">Administrator poslovnog profila može da ukloni sve podatke Chrome-a koji se generišu tokom korišćenja ovog profila (poput pravljenja obeleživača, istorije, lozinki i drugih podešavanja). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome ne može da sinhronizuje podatke jer Sinhronizacija nije dostupna za domen.</translation> <translation id="2467438592969358367">Google Chrome želi da izveze lozinke. Unesite lozinku za Windows da biste to omogućili.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">O Chrome OS-u</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Nije moguće pokrenuti Chrome. Pokušajte ponovo.</translation> +<translation id="5851757216820085940">Ako imate više Google naloga, možete da ih dodate na <ph name="DEVICE_TYPE" />. Nalozi će biti dostupni u pregledaču Chrome i Play prodavnici i u uslugama, kao što su Gmail, Disk i YouTube.<ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome pokušava da izmeni lozinke.</translation> <translation id="5895138241574237353">Pokreni ponovo</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – prijavljivanje na mrežu</translation> <translation id="5940385492829620908">Veb, obeleživači i drugi Chrome sadržaj se ovde uživo prikazuju.</translation> <translation id="5941830788786076944">Podesite Google Chrome kao podrazumevani pregledač</translation> <translation id="6070348360322141662">Google Chrome će šifrovati podatke radi dodatne sigurnosti</translation> +<translation id="608006075545470555">Dodajte poslovni profil u ovaj pregledač</translation> <translation id="6113794647360055231">Upravo smo poboljšali Chrome</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome beta</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS je moguć zahvaljujući dodatnom <ph name="BEGIN_LINK_CROS_OSS" />softver otvorenog koda<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Programerska verzija Google Chrome-a</translation> <translation id="6566149418543181476">Ažuriranje Google Chrome-a (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Sistem Chrome OS</translation> <translation id="6650333065969705433">Da biste koristili aplikaciju Rosetta za puštanje zaštićenog medijskog sadržaja, morate da restartujete Chrome.</translation> <translation id="6676384891291319759">Pristupite Internetu</translation> <translation id="6679975945624592337">Neka Google Chrome radi u pozadini</translation> <translation id="6750954913813541382">Da bi ispravio pravopisne greške, Chrome Google-u šalje tekst koji unosite u pregledač</translation> +<translation id="6755885556185485672">Chrome OS se nije ispravno isključio.</translation> <translation id="677276454032249905">Želite li ipak da zatvorite Chrome?</translation> <translation id="683440813066116847">Pravilo za dolazni saobraćaj za Google Chrome Canary da biste omogućili mDNS saobraćaj.</translation> <translation id="6885412569789873916">Chrome aplikacije za beta kanal</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Posebno bezbednosno ažuriranje za Google Chrome je upravo primenjeno. Restartujte ga i vratićemo vam kartice.</translation> <translation id="8521348052903287641">Pravilo za dolazni saobraćaj za programersku verziju Google Chrome-a da biste omogućili mDNS saobraćaj.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Ovaj poslovni profil je potpuno odvojen od ličnog profila.</translation> <translation id="8556340503434111824">Dostupna je nova verzija Google Chrome pregledača, brža nego ikad pre.</translation> <translation id="861359755029082151">Rosetta omogućava da Chrome pušta zaštićeni medijski sadržaj na ovoj stranici.</translation> <translation id="8614913330719544658">Google Chrome ne reaguje. Želite li da ga odmah ponovo pokrenete?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Da biste omogućili da Chrome pušta zaštićeni medijski sadržaj, morate da instalirate aplikaciju Rosetta. Da li želite da je odmah instalirate?</translation> <translation id="8914504000324227558">Ponovo pokreni Chrome</translation> <translation id="8922193594870374009">Da biste poslali broj sa <ph name="ORIGIN" /> na Android telefon, prijavite se u Chrome na oba uređaja.</translation> +<translation id="8986207147630327271">Dodajete poslovni profil u ovaj pregledač i dajete administratoru kontrolu samo nad ovim poslovnim profilom.</translation> <translation id="8999208279178790196">{0,plural, =0{Ažuriranje za Chrome je dostupno}=1{Ažuriranje za Chrome je dostupno}one{Ažuriranje za Chrome je dostupno već # dan}few{Ažuriranje za Chrome je dostupno već # dana}other{Ažuriranje za Chrome je dostupno već # dana}}</translation> <translation id="9026991721384951619">Chrome OS ne može da sinhronizuje podatke zato što su podaci za prijavljivanje na nalog zastareli.</translation> <translation id="9067395829937117663">Za Google Chrome je potreban Windows 7 ili novija verzija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index c4c2a88..2b4bb720 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Ово је секундарна инсталација Google Chrome-а па не можете да га подесите као подразумевани прегледач.</translation> <translation id="2348335408836342058">Chrome тражи дозволу да приступи камери и микрофону за овај сајт</translation> <translation id="234869673307233423">Chrome не може да вам проверава лозинке. Пробајте поново касније.</translation> +<translation id="235650106824528204">Администратор пословног профила може да уклони све податке Chrome-а који се генеришу током коришћења овог профила (попут прављења обележивача, историје, лозинки и других подешавања). <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome не може да синхронизује податке јер Синхронизација није доступна за домен.</translation> <translation id="2467438592969358367">Google Chrome жели да извезе лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation> <translation id="2485422356828889247">Деинсталирај</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">О Chrome ОС-у</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> – Google Chrome Canary</translation> <translation id="5804318322022881572">Није могуће покренути Chrome. Покушајте поново.</translation> +<translation id="5851757216820085940">Ако имате више Google налога, можете да их додате на <ph name="DEVICE_TYPE" />. Налози ће бити доступни у прегледачу Chrome и Play продавници и у услугама, као што су Gmail, Диск и YouTube.<ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome покушава да измени лозинке.</translation> <translation id="5895138241574237353">Покрени поново</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – пријављивање на мрежу</translation> <translation id="5940385492829620908">Веб, обележивачи и други Chrome садржај се овде уживо приказују.</translation> <translation id="5941830788786076944">Подесите Google Chrome као подразумевани прегледач</translation> <translation id="6070348360322141662">Google Chrome ће шифровати податке ради додатне сигурности</translation> +<translation id="608006075545470555">Додајте пословни профил у овај прегледач</translation> <translation id="6113794647360055231">Управо смо побољшали Chrome</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> – Google Chrome бета</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OС je могућ захваљујући додатном <ph name="BEGIN_LINK_CROS_OSS" />софтвер отвореног кода<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Програмерска верзија Google Chrome-а</translation> <translation id="6566149418543181476">Ажурирање Google Chrome-а (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="6568793831116033768">Систем Chrome ОС</translation> <translation id="6650333065969705433">Да бисте користили апликацију Rosetta за пуштање заштићеног медијског садржаја, морате да рестартујете Chrome.</translation> <translation id="6676384891291319759">Приступите Интернету</translation> <translation id="6679975945624592337">Нека Google Chrome ради у позадини</translation> <translation id="6750954913813541382">Да би исправио правописне грешке, Chrome Google-у шаље текст који уносите у прегледач</translation> +<translation id="6755885556185485672">Chrome ОС се није исправно искључио.</translation> <translation id="677276454032249905">Желите ли ипак да затворите Chrome?</translation> <translation id="683440813066116847">Правило за долазни саобраћај за Google Chrome Canary да бисте омогућили mDNS саобраћај.</translation> <translation id="6885412569789873916">Chrome апликације за бета канал</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Посебно безбедносно ажурирање за Google Chrome је управо примењено. Рестартујте га и вратићемо вам картице.</translation> <translation id="8521348052903287641">Правило за долазни саобраћај за програмерску верзију Google Chrome-а да бисте омогућили mDNS саобраћај.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Овај пословни профил је потпуно одвојен од личног профила.</translation> <translation id="8556340503434111824">Доступна је нова верзија Google Chrome прегледача, бржа него икад пре.</translation> <translation id="861359755029082151">Rosetta омогућава да Chrome пушта заштићени медијски садржај на овој страници.</translation> <translation id="8614913330719544658">Google Chrome не реагује. Желите ли да га одмах поново покренете?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Да бисте омогућили да Chrome пушта заштићени медијски садржај, морате да инсталирате апликацију Rosetta. Да ли желите да је одмах инсталирате?</translation> <translation id="8914504000324227558">Поново покрени Chrome</translation> <translation id="8922193594870374009">Да бисте послали број са <ph name="ORIGIN" /> на Android телефон, пријавите се у Chrome на оба уређаја.</translation> +<translation id="8986207147630327271">Додајете пословни профил у овај прегледач и дајете администратору контролу само над овим пословним профилом.</translation> <translation id="8999208279178790196">{0,plural, =0{Ажурирање за Chrome је доступно}=1{Ажурирање за Chrome је доступно}one{Ажурирање за Chrome је доступно већ # дан}few{Ажурирање за Chrome је доступно већ # дана}other{Ажурирање за Chrome је доступно већ # дана}}</translation> <translation id="9026991721384951619">Chrome ОС не може да синхронизује податке зато што су подаци за пријављивање на налог застарели.</translation> <translation id="9067395829937117663">За Google Chrome је потребан Windows 7 или новија верзија.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index abc0a1a..f902f81 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -56,6 +56,7 @@ <translation id="2309047409763057870">Huu ni usakinishaji wa pili wa Google Chrome, na haiwezi kufanywa kuwa kivinjari chako chaguomsingi.</translation> <translation id="2348335408836342058">Chrome inahitaji ruhusa ya kufikia kamera na maikrofoni yako katika tovuti hii</translation> <translation id="234869673307233423">Chrome imeshindwa kukagua manenosiri yako. Jaribu tena baadaye.</translation> +<translation id="235650106824528204">Data yoyote ya Chrome inayozalishwa unapotumia wasifu huu (kama vile alamisho ulizoweka, historia, manenosiri na mipangilio mingine) inaweza kuondolewa na msimamizi wa wasifu huu wa kazini. <ph name="LEARN_MORE" /></translation> <translation id="2429317896000329049">Google Chrome haikuweza kusawazisha data yako kwa sababu Usawazishaji haupatikani kwa kikoa chako.</translation> <translation id="2467438592969358367">Google Chrome ingependa kuhamisha manenosiri yako. Andika nenosiri lako la Windows ili uruhusu shughuli hii.</translation> <translation id="2485422356828889247">Ondoa</translation> @@ -177,12 +178,14 @@ <translation id="573759479754913123">Kuhusu Chrome OS</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Toleo la Jaribio la Google Chrome</translation> <translation id="5804318322022881572">Imeshindwa kuanzisha Chrome. Jaribu tena.</translation> +<translation id="5851757216820085940">Ikiwa una Akaunti nyingi za Google, unaweza kuziongeza kwenye <ph name="DEVICE_TYPE" /> yako. Akaunti zako zitapatikana katika kivinjari cha Chrome na Duka la Google Play na pia katika huduma kama vile Gmail, Hifadhi na YouTube.<ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation> <translation id="5867197326698922595">Google Chrome inajaribu kubadilisha manenosiri.</translation> <translation id="5895138241574237353">Zzima na uwashe</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - Kuingia katika Akaunti ya Mtandao</translation> <translation id="5940385492829620908">Wavuti, alamisho, na vitu vyako vingine vya Chrome vinapatikana hapa.</translation> <translation id="5941830788786076944">Fanya Google Chrome iwe kivinjari chaguomsingi</translation> <translation id="6070348360322141662">Kwa usalama wa ziada, Google Chrome itasimba data yako kwa njia fiche</translation> +<translation id="608006075545470555">Ongeza Wasifu wa Kazini kwenye kivinjari hiki</translation> <translation id="6113794647360055231">Chrome imeboreshwa zaidi</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Toleo la Beta la Google Chrome</translation> @@ -194,10 +197,12 @@ <translation id="6368958679917195344">Chrome OS imewezeshwa na programu ya ziada ya <ph name="BEGIN_LINK_CROS_OSS" />programu huria<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome ya Wasanidi Programu</translation> <translation id="6566149418543181476">Inasasisha Google Chrome <ph name="PROGRESS_PERCENT" /></translation> +<translation id="6568793831116033768">Mfumo wa Uendeshaji wa Chrome</translation> <translation id="6650333065969705433">Ili uweze kutumia Rosetta kucheza maudhui yaliyolindwa, ni lazima ufunge kisha ufungue Chrome.</translation> <translation id="6676384891291319759">Fikia wavuti</translation> <translation id="6679975945624592337">Ruhusu Google Chrome itumike Chinichini</translation> <translation id="6750954913813541382">Ili kurekebisha makosa ya tahajia, Chrome hutuma kwa Google maandishi unayoandika kwenye kivinjari</translation> +<translation id="6755885556185485672">Mfumo wa Uendeshaji wa Chrome haukuzima kwa njia sahihi.</translation> <translation id="677276454032249905">Ungependa kufunga Chrome?</translation> <translation id="683440813066116847">Sheria ya ndani ya Google Chrome Canary ili kuruhusu trafiki ya mDNS.</translation> <translation id="6885412569789873916">Programu za Chrome Beta</translation> @@ -256,6 +261,7 @@ <translation id="8498858610309223613">Sasisho maalum la usalama wa Google Chrome limewekwa sasa hivi. Ifunge kisha uifungue sasa na tutarejesha vichupo vyako.</translation> <translation id="8521348052903287641">Sheria ya kuingia ya Google Chrome Dev ili kuruhusu trafiki ya mDNS.</translation> <translation id="8540666473246803645">Google Chrome</translation> +<translation id="8550334526674375523">Wasifu huu wa kazini ni tofauti kabisa na wasifu wako wa binafsi.</translation> <translation id="8556340503434111824">Kuna toleo jipya linalopatikana la Google Chrome, na ni la kasi kuliko la awali.</translation> <translation id="861359755029082151">Rosetta huiwezesha Chrome kucheza maudhui yaliyolindwa kwenye ukurasa huu.</translation> <translation id="8614913330719544658">Google Chrome imelemazwa. Izindue upya sasa?</translation> @@ -274,6 +280,7 @@ <translation id="8907709077090383765">Ili uiwezeshe Chrome kucheza maudhui yaliyolindwa, unahitaji kusakinisha Rosetta. Ungependa kuisakinisha sasa?</translation> <translation id="8914504000324227558">Zindua upya Chrome</translation> <translation id="8922193594870374009">Ili uweze kutuma nambari kwa simu yako ya Android kutoka <ph name="ORIGIN" />, ingia katika akaunti kwenye Chrome ukitumia vifaa vyote viwili.</translation> +<translation id="8986207147630327271">Unaongeza wasifu wa kazini kwenye kivinjari hiki na unampa msimamizi wako uwezo wa kudhibiti wasifu huo wa kazini pekee.</translation> <translation id="8999208279178790196">{0,plural, =0{Sasisho la Chrome linapatikana}=1{Sasisho la Chrome linapatikana}other{Sasisho la Chrome limekuwepo kwa siku #}}</translation> <translation id="9026991721384951619">Mfumo wa Uendeshaji wa Chrome haukuweza kusawazisha data yako kwa sababu maelezo yako ya kuingia katika akaunti yanahitaji kusasishwa.</translation> <translation id="9067395829937117663">Google Chrome inahitaji Windows 7 au toleo jipya zaidi.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 145e154..1193d40d 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3214,6 +3214,7 @@ "//chrome/browser/android/webapk:proto", "//chrome/browser/banners/android:jni_headers", "//chrome/browser/consent_auditor/android:jni_headers", + "//chrome/browser/continuous_search", "//chrome/browser/download/internal/android", "//chrome/browser/endpoint_fetcher:jni_headers", "//chrome/browser/feedback/android", @@ -5963,8 +5964,6 @@ "plugins/chrome_content_browser_client_plugins_part.h", "plugins/chrome_plugin_service_filter.cc", "plugins/chrome_plugin_service_filter.h", - "plugins/flash_permission_context.cc", - "plugins/flash_permission_context.h", "plugins/flash_temporary_permission_tracker.cc", "plugins/flash_temporary_permission_tracker.h", "plugins/flash_temporary_permission_tracker_factory.cc", @@ -6262,6 +6261,7 @@ if (is_android) { if (enable_arcore) { deps += [ + "//chrome/browser/android/vr:ar_jni_headers", "//components/webxr/android", "//device/vr/android/arcore", ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 657114c..b2a53ed 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -194,6 +194,7 @@ #if defined(OS_ANDROID) #include "chrome/browser/android/explore_sites/explore_sites_feature.h" +#include "chrome/browser/continuous_search/features.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/browser/notifications/chime/android/features.h" #include "components/browser_ui/site_settings/android/features.h" @@ -1484,17 +1485,6 @@ nullptr, }}; -const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}; -const FeatureEntry::FeatureParam kMarkHttpAsWarningAndDangerousOnFormEdits[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features:: - kMarkHttpAsParameterWarningAndDangerousOnFormEdits}}; -const FeatureEntry::FeatureParam kMarkHttpAsDangerWarning[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerWarning}}; - // The "Enabled" state for this feature is "0" and representing setting A. const FeatureEntry::FeatureParam kTabHoverCardsSettingB[] = { {features::kTabHoverCardsFeatureParameterName, "1"}}; @@ -1505,15 +1495,6 @@ {"B", kTabHoverCardsSettingB, base::size(kTabHoverCardsSettingB), nullptr}, {"C", kTabHoverCardsSettingC, base::size(kTabHoverCardsSettingC), nullptr}}; -const FeatureEntry::FeatureVariation kMarkHttpAsFeatureVariations[] = { - {"(mark as actively dangerous)", kMarkHttpAsDangerous, - base::size(kMarkHttpAsDangerous), nullptr}, - {"(mark with a Not Secure warning and dangerous on form edits)", - kMarkHttpAsWarningAndDangerousOnFormEdits, - base::size(kMarkHttpAsWarningAndDangerousOnFormEdits), nullptr}, - {"(mark with a grey triangle icon)", kMarkHttpAsDangerWarning, - base::size(kMarkHttpAsDangerWarning), nullptr}}; - const FeatureEntry::FeatureParam kPromoBrowserCommandUnknownCommandParam[] = { {features::kPromoBrowserCommandIdParam, "0"}}; const FeatureEntry::FeatureParam @@ -3043,6 +3024,10 @@ {"enable-virtual-keyboard", flag_descriptions::kVirtualKeyboardName, flag_descriptions::kVirtualKeyboardDescription, kOsCrOS, SINGLE_VALUE_TYPE(keyboard::switches::kEnableVirtualKeyboard)}, + {"disable-virtual-keyboard", + flag_descriptions::kVirtualKeyboardDisabledName, + flag_descriptions::kVirtualKeyboardDisabledDescription, kOsCrOS, + SINGLE_VALUE_TYPE(keyboard::switches::kDisableVirtualKeyboard)}, #endif // OS_CHROMEOS #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) {"device-discovery-notifications", @@ -4609,13 +4594,6 @@ flag_descriptions::kEnableNetworkLoggingToFileDescription, kOsAll, SINGLE_VALUE_TYPE(network::switches::kLogNetLog)}, - {"enable-mark-http-as", flag_descriptions::kMarkHttpAsName, - flag_descriptions::kMarkHttpAsDescription, kOsAll, - FEATURE_WITH_PARAMS_VALUE_TYPE( - security_state::features::kMarkHttpAsFeature, - kMarkHttpAsFeatureVariations, - "HTTPReallyBadFinal")}, - {"enable-web-authentication-cable-v2-support", flag_descriptions::kEnableWebAuthenticationCableV2SupportName, flag_descriptions::kEnableWebAuthenticationCableV2SupportDescription, @@ -6645,11 +6623,6 @@ FEATURE_VALUE_TYPE(password_manager::features::kPasswordsWeaknessCheck)}, #endif // !defined(OS_ANDROID) - {"well-known-change-password", - flag_descriptions::kWellKnownChangePasswordName, - flag_descriptions::kWellKnownChangePasswordDescription, kOsAll, - FEATURE_VALUE_TYPE(password_manager::features::kWellKnownChangePassword)}, - {"window-naming", flag_descriptions::kWindowNamingName, flag_descriptions::kWindowNamingDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWindowNaming)}, @@ -6902,6 +6875,7 @@ flag_descriptions::kSwipeToMoveCursorDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kSwipeToMoveCursor)}, #endif // defined(OS_ANDROID) + {"change-password-affiliation", flag_descriptions::kChangePasswordAffiliationInfoName, flag_descriptions::kChangePasswordAffiliationInfoDescription, kOsAll, @@ -6919,6 +6893,12 @@ flag_descriptions::kSafetyCheckWeakPasswordsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kSafetyCheckWeakPasswords)}, +#if defined(OS_ANDROID) + {"continuous-search", flag_descriptions::kContinuousSearchName, + flag_descriptions::kContinuousSearchDescription, kOsAndroid, + FEATURE_VALUE_TYPE(continuous_search::features::kContinuousSearch)}, +#endif // defined(OS_ANDROID) + // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index c3e0f3a..59038f5b 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -61,10 +61,6 @@ "vrcore_install_helper.h", ] - if (enable_arcore) { - sources += [ "arcore_device/arcore_device_utils.cc" ] - } - deps = [ ":ui_factory", "//base", @@ -169,10 +165,7 @@ if (enable_arcore) { generate_jni("ar_jni_headers") { - sources = [ - "//chrome/android/java/src/org/chromium/chrome/browser/vr/ArCompositorDelegateProviderImpl.java", - "//chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreDeviceUtils.java", - ] + sources = [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/ArCompositorDelegateProviderImpl.java" ] } }
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device_utils.cc b/chrome/browser/android/vr/arcore_device/arcore_device_utils.cc deleted file mode 100644 index fcb877b..0000000 --- a/chrome/browser/android/vr/arcore_device/arcore_device_utils.cc +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <memory> - -#include "chrome/browser/android/vr/ar_jni_headers/ArCompositorDelegateProviderImpl_jni.h" -#include "chrome/browser/android/vr/ar_jni_headers/ArCoreDeviceUtils_jni.h" -#include "components/webxr/android/ar_compositor_delegate_provider.h" -#include "components/webxr/android/arcore_device_provider.h" -#include "device/vr/android/arcore/arcore_device_provider_factory.h" - -namespace vr { - -namespace { -class ArCoreDeviceProviderFactoryImpl - : public device::ArCoreDeviceProviderFactory { - public: - ArCoreDeviceProviderFactoryImpl() = default; - ~ArCoreDeviceProviderFactoryImpl() override = default; - std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() override; - - private: - DISALLOW_COPY_AND_ASSIGN(ArCoreDeviceProviderFactoryImpl); -}; - -std::unique_ptr<device::VRDeviceProvider> -ArCoreDeviceProviderFactoryImpl::CreateDeviceProvider() { - base::android::ScopedJavaLocalRef<jobject> j_ar_compositor_delegate_provider = - vr::Java_ArCompositorDelegateProviderImpl_Constructor( - base::android::AttachCurrentThread()); - - return std::make_unique<webxr::ArCoreDeviceProvider>( - webxr::ArCompositorDelegateProvider( - std::move(j_ar_compositor_delegate_provider))); -} - -} // namespace - -static void JNI_ArCoreDeviceUtils_InstallArCoreDeviceProviderFactory( - JNIEnv* env) { - device::ArCoreDeviceProviderFactory::Install( - std::make_unique<ArCoreDeviceProviderFactoryImpl>()); -} - -} // namespace vr
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index b92dc0ba..1a37dc7 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -235,6 +235,7 @@ "//chromeos/system", "//chromeos/timezone", "//chromeos/tpm", + "//chromeos/tpm:buildflags", "//chromeos/ui/base", "//chromeos/ui/frame", "//components/arc", @@ -2026,6 +2027,8 @@ "net/network_diagnostics/tls_prober.h", "net/network_diagnostics/udp_prober.cc", "net/network_diagnostics/udp_prober.h", + "net/network_diagnostics/video_conferencing_routine.cc", + "net/network_diagnostics/video_conferencing_routine.h", "net/network_health/network_health.cc", "net/network_health/network_health.h", "net/network_health/network_health_localized_strings.cc", @@ -3657,6 +3660,7 @@ "net/network_diagnostics/signal_strength_routine_unittest.cc", "net/network_diagnostics/tls_prober_unittest.cc", "net/network_diagnostics/udp_prober_unittest.cc", + "net/network_diagnostics/video_conferencing_routine_unittest.cc", "net/network_health/network_health_unittest.cc", "net/network_portal_detector_impl_unittest.cc", "net/network_pref_state_observer_unittest.cc",
diff --git a/chrome/browser/chromeos/DIR_METADATA b/chrome/browser/chromeos/DIR_METADATA new file mode 100644 index 0000000..eb90f60 --- /dev/null +++ b/chrome/browser/chromeos/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell" +}
diff --git a/chrome/browser/chromeos/OWNERS b/chrome/browser/chromeos/OWNERS index b9aae13..9ee98ea 100644 --- a/chrome/browser/chromeos/OWNERS +++ b/chrome/browser/chromeos/OWNERS
@@ -18,5 +18,3 @@ # Sandbox selection needs security review per-file service_sandbox_type.h=set noparent per-file service_sandbox_type.h=file://ipc/SECURITY_OWNERS - -# COMPONENT: UI>Shell
diff --git a/chrome/browser/chromeos/accessibility/DIR_METADATA b/chrome/browser/chromeos/accessibility/DIR_METADATA new file mode 100644 index 0000000..6849a4f8 --- /dev/null +++ b/chrome/browser/chromeos/accessibility/DIR_METADATA
@@ -0,0 +1,4 @@ +monorail: { + component: "UI>Accessibility" +} +team_email: "chromium-accessibility@chromium.org"
diff --git a/chrome/browser/chromeos/accessibility/OWNERS b/chrome/browser/chromeos/accessibility/OWNERS index 2c85844e..976b955 100644 --- a/chrome/browser/chromeos/accessibility/OWNERS +++ b/chrome/browser/chromeos/accessibility/OWNERS
@@ -1,4 +1 @@ file://ui/accessibility/OWNERS - -# TEAM: chromium-accessibility@chromium.org -# COMPONENT: UI>Accessibility
diff --git a/chrome/browser/chromeos/app_mode/DIR_METADATA b/chrome/browser/chromeos/app_mode/DIR_METADATA new file mode 100644 index 0000000..a940a13 --- /dev/null +++ b/chrome/browser/chromeos/app_mode/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Kiosk" +}
diff --git a/chrome/browser/chromeos/app_mode/OWNERS b/chrome/browser/chromeos/app_mode/OWNERS index 2c621f1..9743b3f9 100644 --- a/chrome/browser/chromeos/app_mode/OWNERS +++ b/chrome/browser/chromeos/app_mode/OWNERS
@@ -1,5 +1,3 @@ anqing@chromium.org apotapchuk@chromium.org poromov@chromium.org - -# COMPONENT: UI>Shell>Kiosk
diff --git a/chrome/browser/chromeos/apps/intent_helper/DIR_METADATA b/chrome/browser/chromeos/apps/intent_helper/DIR_METADATA new file mode 100644 index 0000000..00289ad --- /dev/null +++ b/chrome/browser/chromeos/apps/intent_helper/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Platform>Apps>Foundation" +}
diff --git a/chrome/browser/chromeos/apps/intent_helper/OWNERS b/chrome/browser/chromeos/apps/intent_helper/OWNERS index be3430d..33259440 100644 --- a/chrome/browser/chromeos/apps/intent_helper/OWNERS +++ b/chrome/browser/chromeos/apps/intent_helper/OWNERS
@@ -1,3 +1 @@ mxcai@chromium.org - -# COMPONENT: Platform>Apps>Foundation \ No newline at end of file
diff --git a/chrome/browser/chromeos/arc/accessibility/DIR_METADATA b/chrome/browser/chromeos/arc/accessibility/DIR_METADATA new file mode 100644 index 0000000..6849a4f8 --- /dev/null +++ b/chrome/browser/chromeos/arc/accessibility/DIR_METADATA
@@ -0,0 +1,4 @@ +monorail: { + component: "UI>Accessibility" +} +team_email: "chromium-accessibility@chromium.org"
diff --git a/chrome/browser/chromeos/arc/accessibility/OWNERS b/chrome/browser/chromeos/arc/accessibility/OWNERS index 9b4d223e..7822214f 100644 --- a/chrome/browser/chromeos/arc/accessibility/OWNERS +++ b/chrome/browser/chromeos/arc/accessibility/OWNERS
@@ -3,6 +3,3 @@ sarakato@chromium.org file://ui/accessibility/OWNERS - -# TEAM: chromium-accessibility@chromium.org -# COMPONENT: UI>Accessibility
diff --git a/chrome/browser/chromeos/arc/policy/DIR_METADATA b/chrome/browser/chromeos/arc/policy/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/arc/policy/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/arc/policy/OWNERS b/chrome/browser/chromeos/arc/policy/OWNERS index aac9691..e943cb9 100644 --- a/chrome/browser/chromeos/arc/policy/OWNERS +++ b/chrome/browser/chromeos/arc/policy/OWNERS
@@ -1,5 +1,3 @@ bartfab@chromium.org phweiss@chromium.org pbond@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/assistant/DIR_METADATA b/chrome/browser/chromeos/assistant/DIR_METADATA new file mode 100644 index 0000000..0267debb --- /dev/null +++ b/chrome/browser/chromeos/assistant/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Assistant" +}
diff --git a/chrome/browser/chromeos/assistant/OWNERS b/chrome/browser/chromeos/assistant/OWNERS index 0c730475..dd0c97af 100644 --- a/chrome/browser/chromeos/assistant/OWNERS +++ b/chrome/browser/chromeos/assistant/OWNERS
@@ -1,3 +1 @@ file://chromeos/assistant/OWNERS - -# COMPONENT: UI>Shell>Assistant
diff --git a/chrome/browser/chromeos/attestation/DIR_METADATA b/chrome/browser/chromeos/attestation/DIR_METADATA new file mode 100644 index 0000000..6aa0d32 --- /dev/null +++ b/chrome/browser/chromeos/attestation/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Security" +}
diff --git a/chrome/browser/chromeos/attestation/OWNERS b/chrome/browser/chromeos/attestation/OWNERS index 880cada..57c540d2 100644 --- a/chrome/browser/chromeos/attestation/OWNERS +++ b/chrome/browser/chromeos/attestation/OWNERS
@@ -7,5 +7,3 @@ per-file *tpm_challenge_key*=pmarko@chromium.org per-file *tpm_challenge_key*=emaxx@chromium.org per-file *tpm_challenge_key*=drcrash@chromium.org - -# COMPONENT: OS>Systems>Security
diff --git a/chrome/browser/chromeos/authpolicy/DIR_METADATA b/chrome/browser/chromeos/authpolicy/DIR_METADATA new file mode 100644 index 0000000..5383b5e --- /dev/null +++ b/chrome/browser/chromeos/authpolicy/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise>ActiveDirectory" +}
diff --git a/chrome/browser/chromeos/authpolicy/OWNERS b/chrome/browser/chromeos/authpolicy/OWNERS index 3719bfa..da69f3f 100644 --- a/chrome/browser/chromeos/authpolicy/OWNERS +++ b/chrome/browser/chromeos/authpolicy/OWNERS
@@ -5,5 +5,3 @@ rsorokin@chromium.org fsandrade@chromium.org tomdobro@chromium.org - -# COMPONENT: Enterprise>ActiveDirectory
diff --git a/chrome/browser/chromeos/bluetooth/DIR_METADATA b/chrome/browser/chromeos/bluetooth/DIR_METADATA new file mode 100644 index 0000000..c12bf7e --- /dev/null +++ b/chrome/browser/chromeos/bluetooth/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Bluetooth" +}
diff --git a/chrome/browser/chromeos/bluetooth/OWNERS b/chrome/browser/chromeos/bluetooth/OWNERS index 66256300..692254c7 100644 --- a/chrome/browser/chromeos/bluetooth/OWNERS +++ b/chrome/browser/chromeos/bluetooth/OWNERS
@@ -1,3 +1,2 @@ khorimoto@chromium.org hansberry@chromium.org -# COMPONENT: OS>Systems>Bluetooth
diff --git a/chrome/browser/chromeos/camera_mic/DIR_METADATA b/chrome/browser/chromeos/camera_mic/DIR_METADATA new file mode 100644 index 0000000..f461eb4 --- /dev/null +++ b/chrome/browser/chromeos/camera_mic/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers" +}
diff --git a/chrome/browser/chromeos/camera_mic/OWNERS b/chrome/browser/chromeos/camera_mic/OWNERS index c25a8fc3..dc48383c 100644 --- a/chrome/browser/chromeos/camera_mic/OWNERS +++ b/chrome/browser/chromeos/camera_mic/OWNERS
@@ -1,3 +1 @@ file://chrome/browser/chromeos/guest_os/OWNERS - -# COMPONENT: UI>Shell>Containers
diff --git a/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.cc b/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.cc index 14ed689..0333ebd7 100644 --- a/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.cc +++ b/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.cc
@@ -12,7 +12,6 @@ #include "base/feature_list.h" #include "base/notreached.h" #include "base/strings/string16.h" -#include "base/system/sys_info.h" #include "base/time/time.h" #include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/chromeos/camera_mic/vm_camera_mic_manager_factory.h" @@ -26,9 +25,6 @@ #include "chrome/grit/generated_resources.h" #include "chromeos/constants/chromeos_features.h" #include "components/vector_icons/vector_icons.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom-shared.h" #include "ui/base/l10n/l10n_util.h" #include "ui/message_center/public/cpp/message_center_constants.h" #include "ui/message_center/public/cpp/notification.h" @@ -105,21 +101,11 @@ active_map_[std::make_pair(vm, device)] = false; } } - - // Camera service does not behave in non ChromeOS environment (e.g. testing, - // linux chromeos). - if (base::SysInfo::IsRunningOnChromeOS()) { - // OnActiveClientChange() will be called automatically after the - // subscription, so there is no need to get the current status here. - camera_observation_.Observe(media::CameraHalDispatcherImpl::GetInstance()); - } } VmCameraMicManager::~VmCameraMicManager() = default; void VmCameraMicManager::SetActive(VmType vm, DeviceType device, bool active) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - auto active_it = active_map_.find(std::make_pair(vm, device)); CHECK(active_it != active_map_.end()); if (active_it->second != active) { @@ -150,20 +136,6 @@ return false; } -void VmCameraMicManager::OnActiveClientChange( - cros::mojom::CameraClientType type, - bool is_active) { - // TODO(b/167491603): UNKNOWN means PluginVM for now. We should switch to - // `PLUGINVM` once the API work on b/173677647 is done. - if (type == cros::mojom::CameraClientType::UNKNOWN) { - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(&VmCameraMicManager::SetActive, - weak_ptr_factory_.GetWeakPtr(), VmType::kPluginVm, - DeviceType::kCamera, is_active)); - } -} - void VmCameraMicManager::AddObserver(Observer* observer) { observers_.AddObserver(observer); }
diff --git a/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.h b/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.h index 0a0b332..760b6838 100644 --- a/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.h +++ b/chrome/browser/chromeos/camera_mic/vm_camera_mic_manager.h
@@ -11,10 +11,8 @@ #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/observer_list_types.h" -#include "base/scoped_observation.h" #include "base/timer/timer.h" #include "components/keyed_service/core/keyed_service.h" -#include "media/capture/video/chromeos/camera_hal_dispatcher_impl.h" #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_delegate.h" @@ -27,8 +25,7 @@ // the primary and non-incognito profile. We might need to change this if we // extend this class to support the browser, in which case we will also need to // make the notification ids different for different profiles. -class VmCameraMicManager : public KeyedService, - public media::CameraActiveClientObserver { +class VmCameraMicManager : public KeyedService { public: enum class VmType { kCrostiniVm, kPluginVm }; @@ -54,17 +51,11 @@ void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); - // TODO(b/167491603): Make `SetActive()` private after we implement audio - // service observer. void SetActive(VmType vm, DeviceType device, bool active); bool GetActive(VmType vm, DeviceType device) const; // Return true if any of the VMs is using the device. bool GetDeviceActive(DeviceType device) const; - // media::CameraActiveClientObserver - void OnActiveClientChange(cros::mojom::CameraClientType type, - bool is_active) override; - private: using ActiveMap = base::flat_map<std::pair<VmType, DeviceType>, bool>; @@ -100,15 +91,6 @@ base::RetainingOneShotTimer observer_timer_; base::ObserverList<Observer> observers_; - - base::ScopedObservation< - media::CameraHalDispatcherImpl, - media::CameraActiveClientObserver, - &media::CameraHalDispatcherImpl::AddActiveClientObserver, - &media::CameraHalDispatcherImpl::RemoveActiveClientObserver> - camera_observation_{this}; - - base::WeakPtrFactory<VmCameraMicManager> weak_ptr_factory_{this}; }; } // namespace chromeos
diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.cc b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.cc index 8e152328..6e63ef1 100644 --- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.cc +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.cc
@@ -713,6 +713,7 @@ FailedWorkerInfo info; info.state_before_failure = worker.GetPreviousState(); + info.cert_profile_name = worker.GetCertProfile().name; info.public_key = worker.GetPublicKey(); info.last_update_time = worker.GetLastUpdateTime();
diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.h b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.h index 2d9f965..6dad7ba 100644 --- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.h +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.h
@@ -50,6 +50,8 @@ CertProvisioningWorkerState::kInitState; // The DER-encoded X.509 SPKI. std::string public_key; + // Human-readable certificate profile name (UTF-8). + std::string cert_profile_name; // The time the worker was last updated, i.e. when it transferred to the // failed state. base::Time last_update_time;
diff --git a/chrome/browser/chromeos/cert_provisioning/mock_cert_provisioning_worker.cc b/chrome/browser/chromeos/cert_provisioning/mock_cert_provisioning_worker.cc index a824fc3..f31459c0 100644 --- a/chrome/browser/chromeos/cert_provisioning/mock_cert_provisioning_worker.cc +++ b/chrome/browser/chromeos/cert_provisioning/mock_cert_provisioning_worker.cc
@@ -53,6 +53,9 @@ // ================ MockCertProvisioningWorker ================================= MockCertProvisioningWorker::MockCertProvisioningWorker() { + // Makes MockCertProvisioningWorker return empty key by default. Because the + // return type is a reference, the object must exist to be able to return a + // default value. static const std::string default_public_key; ON_CALL(*this, GetPublicKey).WillByDefault(ReturnRef(default_public_key)); }
diff --git a/chrome/browser/chromeos/certificate_provider/DIR_METADATA b/chrome/browser/chromeos/certificate_provider/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/certificate_provider/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/certificate_provider/OWNERS b/chrome/browser/chromeos/certificate_provider/OWNERS index 6835e98..325f7c3 100644 --- a/chrome/browser/chromeos/certificate_provider/OWNERS +++ b/chrome/browser/chromeos/certificate_provider/OWNERS
@@ -1,3 +1 @@ emaxx@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/crosapi/browser_manager.cc b/chrome/browser/chromeos/crosapi/browser_manager.cc index b1c292f..e10d7944 100644 --- a/chrome/browser/chromeos/crosapi/browser_manager.cc +++ b/chrome/browser/chromeos/crosapi/browser_manager.cc
@@ -304,6 +304,9 @@ options.environment["GOOGLE_DEFAULT_CLIENT_SECRET"] = google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN); + // This sets the channel for Lacros. + options.environment["CHROME_VERSION_EXTRA"] = "dev"; + options.kill_on_parent_death = true; // Paths are UTF-8 safe on Chrome OS.
diff --git a/chrome/browser/chromeos/crostini/DIR_METADATA b/chrome/browser/chromeos/crostini/DIR_METADATA new file mode 100644 index 0000000..f461eb4 --- /dev/null +++ b/chrome/browser/chromeos/crostini/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers" +}
diff --git a/chrome/browser/chromeos/crostini/OWNERS b/chrome/browser/chromeos/crostini/OWNERS index 3a2b81f..df5ff9b 100644 --- a/chrome/browser/chromeos/crostini/OWNERS +++ b/chrome/browser/chromeos/crostini/OWNERS
@@ -2,5 +2,3 @@ per-file *.mojom=set noparent per-file *.mojom=file://ipc/SECURITY_OWNERS - -# COMPONENT: UI>Shell>Containers
diff --git a/chrome/browser/chromeos/cryptauth/DIR_METADATA b/chrome/browser/chromeos/cryptauth/DIR_METADATA new file mode 100644 index 0000000..81d0548 --- /dev/null +++ b/chrome/browser/chromeos/cryptauth/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice" +}
diff --git a/chrome/browser/chromeos/cryptauth/OWNERS b/chrome/browser/chromeos/cryptauth/OWNERS index 8eaf92b2..7027ab73 100644 --- a/chrome/browser/chromeos/cryptauth/OWNERS +++ b/chrome/browser/chromeos/cryptauth/OWNERS
@@ -1,3 +1 @@ file://chromeos/components/multidevice/OWNERS - -# COMPONENT: OS>Systems>Multidevice
diff --git a/chrome/browser/chromeos/device_sync/DIR_METADATA b/chrome/browser/chromeos/device_sync/DIR_METADATA new file mode 100644 index 0000000..81d0548 --- /dev/null +++ b/chrome/browser/chromeos/device_sync/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice" +}
diff --git a/chrome/browser/chromeos/device_sync/OWNERS b/chrome/browser/chromeos/device_sync/OWNERS index 8eaf92b2..7027ab73 100644 --- a/chrome/browser/chromeos/device_sync/OWNERS +++ b/chrome/browser/chromeos/device_sync/OWNERS
@@ -1,3 +1 @@ file://chromeos/components/multidevice/OWNERS - -# COMPONENT: OS>Systems>Multidevice
diff --git a/chrome/browser/chromeos/exo/DIR_METADATA b/chrome/browser/chromeos/exo/DIR_METADATA new file mode 100644 index 0000000..f461eb4 --- /dev/null +++ b/chrome/browser/chromeos/exo/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers" +}
diff --git a/chrome/browser/chromeos/exo/OWNERS b/chrome/browser/chromeos/exo/OWNERS index a8103d1..f1108f1 100644 --- a/chrome/browser/chromeos/exo/OWNERS +++ b/chrome/browser/chromeos/exo/OWNERS
@@ -1,5 +1,2 @@ joelhockey@chromium.org oshima@chromium.org - -# COMPONENT: Internals>Exosphere -# COMPONENT: UI>Shell>Containers
diff --git a/chrome/browser/chromeos/extensions/DIR_METADATA b/chrome/browser/chromeos/extensions/DIR_METADATA new file mode 100644 index 0000000..9a42572 --- /dev/null +++ b/chrome/browser/chromeos/extensions/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Platform>Extensions" +}
diff --git a/chrome/browser/chromeos/extensions/OWNERS b/chrome/browser/chromeos/extensions/OWNERS index 6881c17..4273d00c 100644 --- a/chrome/browser/chromeos/extensions/OWNERS +++ b/chrome/browser/chromeos/extensions/OWNERS
@@ -23,5 +23,3 @@ per-file device_local_account*=atwilson@chromium.org per-file device_local_account*=bartfab@chromium.org per-file device_local_account*=poromov@chromium.org - -# COMPONENT: Platform>Extensions
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/DIR_METADATA b/chrome/browser/chromeos/extensions/quick_unlock_private/DIR_METADATA new file mode 100644 index 0000000..704a8962 --- /dev/null +++ b/chrome/browser/chromeos/extensions/quick_unlock_private/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Settings" +}
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/OWNERS b/chrome/browser/chromeos/extensions/quick_unlock_private/OWNERS index af0efcd..965fbf7 100644 --- a/chrome/browser/chromeos/extensions/quick_unlock_private/OWNERS +++ b/chrome/browser/chromeos/extensions/quick_unlock_private/OWNERS
@@ -1,5 +1,3 @@ alemate@chromium.org file://chrome/browser/resources/settings/chromeos/OWNERS - -# COMPONENT: UI>Settings
diff --git a/chrome/browser/chromeos/extensions/users_private/DIR_METADATA b/chrome/browser/chromeos/extensions/users_private/DIR_METADATA new file mode 100644 index 0000000..eeb8ec9 --- /dev/null +++ b/chrome/browser/chromeos/extensions/users_private/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Settings" +}
diff --git a/chrome/browser/chromeos/extensions/users_private/OWNERS b/chrome/browser/chromeos/extensions/users_private/OWNERS index 2957b1d..7f062de0 100644 --- a/chrome/browser/chromeos/extensions/users_private/OWNERS +++ b/chrome/browser/chromeos/extensions/users_private/OWNERS
@@ -2,5 +2,3 @@ alemate@chromium.org emaxx@chromium.org michaelpg@chromium.org - -# COMPONENT: OS>Systems>Settings
diff --git a/chrome/browser/chromeos/guest_os/DIR_METADATA b/chrome/browser/chromeos/guest_os/DIR_METADATA new file mode 100644 index 0000000..f461eb4 --- /dev/null +++ b/chrome/browser/chromeos/guest_os/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers" +}
diff --git a/chrome/browser/chromeos/guest_os/OWNERS b/chrome/browser/chromeos/guest_os/OWNERS index 58ea631..25812e7 100644 --- a/chrome/browser/chromeos/guest_os/OWNERS +++ b/chrome/browser/chromeos/guest_os/OWNERS
@@ -6,5 +6,3 @@ nverne@chromium.org sidereal@google.com timloh@chromium.org - -# COMPONENT: UI>Shell>Containers
diff --git a/chrome/browser/chromeos/input_method/ui/DIR_METADATA b/chrome/browser/chromeos/input_method/ui/DIR_METADATA new file mode 100644 index 0000000..1d28f0a --- /dev/null +++ b/chrome/browser/chromeos/input_method/ui/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Input>Text>IME" +}
diff --git a/chrome/browser/chromeos/input_method/ui/OWNERS b/chrome/browser/chromeos/input_method/ui/OWNERS index 36802a7..918ad0cde 100644 --- a/chrome/browser/chromeos/input_method/ui/OWNERS +++ b/chrome/browser/chromeos/input_method/ui/OWNERS
@@ -8,4 +8,3 @@ komatsu@chromium.org mukai@chromium.org yukishiino@chromium.org -# COMPONENT: UI>Input>Text>IME
diff --git a/chrome/browser/chromeos/kerberos/DIR_METADATA b/chrome/browser/chromeos/kerberos/DIR_METADATA new file mode 100644 index 0000000..5383b5e --- /dev/null +++ b/chrome/browser/chromeos/kerberos/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise>ActiveDirectory" +}
diff --git a/chrome/browser/chromeos/kerberos/OWNERS b/chrome/browser/chromeos/kerberos/OWNERS index be79187..4e32090 100644 --- a/chrome/browser/chromeos/kerberos/OWNERS +++ b/chrome/browser/chromeos/kerberos/OWNERS
@@ -9,5 +9,3 @@ # Previous owners (ask if current owners are not available) # Commented out so automatic tools don't prefer. # ljusten@chromium.org - -# COMPONENT: Enterprise>ActiveDirectory
diff --git a/chrome/browser/chromeos/login/lock/fingerprint_unlock_browsertest.cc b/chrome/browser/chromeos/login/lock/fingerprint_unlock_browsertest.cc index cda467fc..f43ec32 100644 --- a/chrome/browser/chromeos/login/lock/fingerprint_unlock_browsertest.cc +++ b/chrome/browser/chromeos/login/lock/fingerprint_unlock_browsertest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/chromeos/login/lock/screen_locker.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/simple_test_clock.h" #include "base/test/simple_test_tick_clock.h" #include "chrome/browser/chromeos/login/lock/screen_locker_tester.h" @@ -21,6 +22,7 @@ #include "components/session_manager/core/session_manager.h" #include "components/user_manager/user_names.h" #include "content/public/test/browser_test.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" @@ -245,4 +247,45 @@ profile->GetPrefs()->GetInteger(prefs::kQuickUnlockFingerprintRecord), 0); } +IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, FingerprintScanResult) { + base::HistogramTester histogram_tester; + + // Simulate fingerprint enrollment. + FakeBiodClient::Get()->StartEnrollSession( + "test-user", std::string(), + base::BindOnce([](const dbus::ObjectPath& result) {})); + FakeBiodClient::Get()->SendEnrollScanDone( + kFingerprint, biod::SCAN_RESULT_TOO_SLOW, false /* is_complete */, + -1 /* percent_complete */); + FakeBiodClient::Get()->SendEnrollScanDone( + kFingerprint, biod::SCAN_RESULT_SUCCESS, true /* is_complete */, + 100 /* percent_complete */); + + // Simulate fingerprint authentication. + FakeBiodClient::Get()->StartAuthSession( + base::BindOnce([](const dbus::ObjectPath& result) {})); + FakeBiodClient::Get()->SendAuthScanDone(kFingerprint, + biod::SCAN_RESULT_TOO_FAST); + FakeBiodClient::Get()->SendAuthScanDone(kFingerprint, + biod::SCAN_RESULT_SUCCESS); + base::RunLoop().RunUntilIdle(); + EXPECT_THAT(histogram_tester.GetAllSamples("Fingerprint.Enroll.ScanResult"), + ::testing::ElementsAre( + base::Bucket(static_cast<base::HistogramBase::Sample>( + device::mojom::ScanResult::SUCCESS), + 1), + base::Bucket(static_cast<base::HistogramBase::Sample>( + device::mojom::ScanResult::TOO_SLOW), + 1))); + + EXPECT_THAT(histogram_tester.GetAllSamples("Fingerprint.Auth.ScanResult"), + ::testing::ElementsAre( + base::Bucket(static_cast<base::HistogramBase::Sample>( + device::mojom::ScanResult::SUCCESS), + 1), + base::Bucket(static_cast<base::HistogramBase::Sample>( + device::mojom::ScanResult::TOO_FAST), + 1))); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.cc b/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.cc index 1f27532..d36638a 100644 --- a/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.cc +++ b/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h" +#include "base/metrics/histogram_functions.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/profiles/profile.h" @@ -12,10 +13,37 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "content/public/browser/device_service.h" +#include "services/device/public/mojom/fingerprint.mojom.h" namespace chromeos { namespace quick_unlock { +class FingerprintMetricsReporter : public device::mojom::FingerprintObserver { + public: + // device::mojom::FingerprintObserver: + void OnRestarted() override {} + void OnEnrollScanDone(device::mojom::ScanResult scan_result, + bool is_complete, + int32_t percent_complete) override { + base::UmaHistogramEnumeration("Fingerprint.Enroll.ScanResult", scan_result); + } + void OnAuthScanDone( + device::mojom::ScanResult scan_result, + const base::flat_map<std::string, std::vector<std::string>>& matches) + override { + base::UmaHistogramEnumeration("Fingerprint.Auth.ScanResult", scan_result); + } + void OnSessionFailed() override {} + + mojo::PendingRemote<device::mojom::FingerprintObserver> GetRemote() { + return fingerprint_observer_receiver_.BindNewPipeAndPassRemote(); + } + + private: + mojo::Receiver<device::mojom::FingerprintObserver> + fingerprint_observer_receiver_{this}; +}; + // static void FingerprintStorage::RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterIntegerPref(prefs::kQuickUnlockFingerprintRecord, 0); @@ -34,6 +62,9 @@ fp_service_->GetRecordsForUser( user_id, base::BindOnce(&FingerprintStorage::OnGetRecords, weak_factory_.GetWeakPtr())); + + metrics_reporter_ = std::make_unique<FingerprintMetricsReporter>(); + fp_service_->AddFingerprintObserver(metrics_reporter_->GetRemote()); } FingerprintStorage::~FingerprintStorage() {}
diff --git a/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h b/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h index 8f2426f5..2c5b3e1 100644 --- a/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h +++ b/chrome/browser/chromeos/login/quick_unlock/fingerprint_storage.h
@@ -20,6 +20,7 @@ namespace quick_unlock { +class FingerprintMetricsReporter; class QuickUnlockStorage; class FingerprintStorage { @@ -63,6 +64,8 @@ mojo::Remote<device::mojom::Fingerprint> fp_service_; + std::unique_ptr<FingerprintMetricsReporter> metrics_reporter_; + base::WeakPtrFactory<FingerprintStorage> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(FingerprintStorage);
diff --git a/chrome/browser/chromeos/login/session/user_session_initializer.cc b/chrome/browser/chromeos/login/session/user_session_initializer.cc index a883684..3545413 100644 --- a/chrome/browser/chromeos/login/session/user_session_initializer.cc +++ b/chrome/browser/chromeos/login/session/user_session_initializer.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" -#include "chrome/browser/chromeos/camera_mic/vm_camera_mic_manager_factory.h" #include "chrome/browser/chromeos/child_accounts/child_status_reporting_service_factory.h" #include "chrome/browser/chromeos/child_accounts/child_user_service_factory.h" #include "chrome/browser/chromeos/child_accounts/family_user_metrics_service_factory.h" @@ -211,8 +210,6 @@ plugin_vm::PluginVmManagerFactory::GetForProfile(primary_profile_); if (plugin_vm_manager) plugin_vm_manager->OnPrimaryUserSessionStarted(); - - VmCameraMicManagerFactory::GetForProfile(primary_profile_); } }
diff --git a/chrome/browser/chromeos/multidevice_setup/DIR_METADATA b/chrome/browser/chromeos/multidevice_setup/DIR_METADATA new file mode 100644 index 0000000..81d0548 --- /dev/null +++ b/chrome/browser/chromeos/multidevice_setup/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice" +}
diff --git a/chrome/browser/chromeos/multidevice_setup/OWNERS b/chrome/browser/chromeos/multidevice_setup/OWNERS index 8eaf92b2..7027ab73 100644 --- a/chrome/browser/chromeos/multidevice_setup/OWNERS +++ b/chrome/browser/chromeos/multidevice_setup/OWNERS
@@ -1,3 +1 @@ file://chromeos/components/multidevice/OWNERS - -# COMPONENT: OS>Systems>Multidevice
diff --git a/chrome/browser/chromeos/net/network_diagnostics/README.md b/chrome/browser/chromeos/net/network_diagnostics/README.md index 69cd7510..ed2099d 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/README.md +++ b/chrome/browser/chromeos/net/network_diagnostics/README.md
@@ -168,6 +168,26 @@ * `kHighLatency`: HTTPS request latency is high. * `kVeryHighLatency`: HTTPS request latency is very high. +#### VideoConferencing + +Tests the device's video conferencing capabalities by testing whether the device +can: +1. Contact either a default or specified STUN server via UDP. +2. Contact either a default or specified STUN server via TCP. +3. Reach common media endpoints. + +Problems: +* `kPotentialProblemUdpFailure`: Failed requests to a STUN server via UDP. +* `kPotentialProblemTcpFailure`: Failed requests to a STUN server via TCP. +* `kPotentialProblemMediaFailure`: Failed to establish a TLS connection to media hostnames. +* `kPotentialProblemUdpAndMediaFailure`: Failed requests to a STUN server via +UDP and failed to establish a TLS connection to media hostnames. +* `kUdpAndTcpFailure`: Failed requests to a STUN server via UDP and TCP. +* `kTcpAndMediaFailure`: Failed requests to a STUN server via TCP and failed to +established a TLS connection to media hostnames. +* `kUdpAndTcpAndMediaFailure`: Failed requests to a STUN server via UDP and TCP, +and failed to establish a TLS connection to media hostnames. + [Network Health and Configuration]: https://docs.google.com/document/d/10DSy-jZXaRo9I9aq1UqERy76t7HkgGvInWk57pHEkzg [network_diagnostics.mojom]: https://source.chromium.org/chromium/chromium/src/+/master:chromeos/services/network_health/public/mojom/network_diagnostics.mojom?originalUrl=https:%2F%2Fcs.chromium.org%2F [NetworkHealthService]: https://source.chromium.org/chromium/chromium/src/+/master:chrome/browser/chromeos/net/network_health/network_health_service.h?originalUrl=https:%2F%2Fcs.chromium.org%2F
diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.cc b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.cc index 99c49fa1..abb553c 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.cc +++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/bind.h" +#include "base/optional.h" #include "chrome/browser/chromeos/net/network_diagnostics/captive_portal_routine.h" #include "chrome/browser/chromeos/net/network_diagnostics/dns_latency_routine.h" #include "chrome/browser/chromeos/net/network_diagnostics/dns_resolution_routine.h" @@ -19,6 +20,7 @@ #include "chrome/browser/chromeos/net/network_diagnostics/https_latency_routine.h" #include "chrome/browser/chromeos/net/network_diagnostics/lan_connectivity_routine.h" #include "chrome/browser/chromeos/net/network_diagnostics/signal_strength_routine.h" +#include "chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.h" #include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "components/device_event_log/device_event_log.h" @@ -209,5 +211,26 @@ std::move(routine), std::move(callback))); } +void NetworkDiagnostics::VideoConferencing( + const base::Optional<std::string>& stun_server_name, + VideoConferencingCallback callback) { + auto routine = std::make_unique<VideoConferencingRoutine>(); + if (stun_server_name.has_value()) { + routine = + std::make_unique<VideoConferencingRoutine>(stun_server_name.value()); + } + // RunRoutine() takes a lambda callback that takes ownership of the routine. + // This ensures that the routine stays alive when it makes asynchronous mojo + // calls. The routine will be destroyed when the lambda exits. + routine->RunRoutine(base::BindOnce( + [](std::unique_ptr<VideoConferencingRoutine> routine, + VideoConferencingCallback callback, mojom::RoutineVerdict verdict, + const std::vector<mojom::VideoConferencingProblem>& problems, + const base::Optional<std::string>& support_details) { + std::move(callback).Run(verdict, problems, support_details); + }, + std::move(routine), std::move(callback))); +} + } // namespace network_diagnostics } // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.h b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.h index 04352ef..ce17a7d 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.h +++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics.h
@@ -5,7 +5,10 @@ #ifndef CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_NETWORK_DIAGNOSTICS_H_ #define CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_NETWORK_DIAGNOSTICS_H_ +#include <string> + #include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "chromeos/services/network_health/public/mojom/network_diagnostics.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" @@ -39,6 +42,8 @@ void DnsResolution(DnsResolutionCallback callback) override; void CaptivePortal(CaptivePortalCallback callback) override; void HttpsLatency(HttpsLatencyCallback callback) override; + void VideoConferencing(const base::Optional<std::string>& stun_server_name, + VideoConferencingCallback callback) override; private: // An unowned pointer to the DebugDaemonClient instance.
diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc index c138b64..118d6bb 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc +++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.cc
@@ -182,6 +182,35 @@ )"); } +std::vector<int> GetUdpPortsForGoogleStunServer() { + return {19302, 19303, 19304, 19305, 19306, 19307, 19308, 19309}; +} + +std::vector<int> GetUdpPortsForCustomStunServer() { + return {3478}; +} + +std::vector<int> GetTcpPortsForGoogleStunServer() { + return {19305, 19306, 19307, 19308}; +} + +std::vector<int> GetTcpPortsForCustomStunServer() { + return {3478}; +} + +std::vector<GURL> GetDefaultMediaUrls() { + const char* const kHostnames[] = { + "https://apis.google.com", "https://talkgadget.google.com", + "https://clients6.google.com", "https://hangouts.google.com", + "https://client-channel.google.com", "https://googleapis.com", + "https://accounts.google.com", "https://clients4.google.com"}; + std::vector<GURL> hostnames; + for (auto* const& hostname : kHostnames) { + hostnames.push_back(GURL(hostname)); + } + return hostnames; +} + } // namespace util } // namespace network_diagnostics
diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h index 850c67a..d2419f77 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h +++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h
@@ -90,6 +90,21 @@ // Returns the traffic annotation tag for STUN traffic. net::NetworkTrafficAnnotationTag GetStunNetworkAnnotationTag(); +// Returns the ports used to speak to Google's STUN server over UDP. +std::vector<int> GetUdpPortsForGoogleStunServer(); + +// Returns the ports used to speak to a custom STUN server over UDP. +std::vector<int> GetUdpPortsForCustomStunServer(); + +// Returns the ports used to speak to Google's STUN server over TCP. +std::vector<int> GetTcpPortsForGoogleStunServer(); + +// Returns the ports used to speak to a custom STUN server over TCP. +std::vector<int> GetTcpPortsForCustomStunServer(); + +// Returns the list of urls related to Google media. +std::vector<GURL> GetDefaultMediaUrls(); + } // namespace util } // namespace network_diagnostics
diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util_unittest.cc b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util_unittest.cc index 47c1fb69..1c57e32 100644 --- a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util_unittest.cc +++ b/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util_unittest.cc
@@ -76,5 +76,11 @@ } } +TEST(NetworkDiagnosticsUtilTest, TestDefaultMediaHostnamesAreValidUrls) { + for (const GURL& url : util::GetDefaultMediaUrls()) { + EXPECT_TRUE(url.is_valid()); + } +} + } // namespace network_diagnostics } // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc new file mode 100644 index 0000000..aeb9dcf81 --- /dev/null +++ b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc
@@ -0,0 +1,215 @@ +// 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/chromeos/net/network_diagnostics/video_conferencing_routine.h" + +#include <string> +#include <utility> + +#include "base/logging.h" +#include "base/optional.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h" +#include "chrome/browser/chromeos/net/network_diagnostics/udp_prober.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "content/public/browser/storage_partition.h" +#include "net/base/net_errors.h" +#include "services/network/public/mojom/network_context.mojom.h" + +namespace chromeos { +namespace network_diagnostics { + +namespace { + +const char kDefaultStunServer[] = "stun.l.google.com"; + +} // namespace + +const char kSupportDetails[] = "https://support.google.com/a/answer/1279090"; +const base::TimeDelta kTimeoutAfterHostResolution = + base::TimeDelta::FromSeconds(10); + +VideoConferencingRoutine::VideoConferencingRoutine() + : stun_server_hostname_(kDefaultStunServer), + udp_prober_getter_callback_(base::BindRepeating( + &VideoConferencingRoutine::CreateAndExecuteUdpProber)), + tls_prober_getter_callback_(base::BindRepeating( + &VideoConferencingRoutine::CreateAndExecuteTlsProber)), + udp_ports_(util::GetUdpPortsForGoogleStunServer()), + tcp_ports_(util::GetTcpPortsForGoogleStunServer()), + media_hostnames_(util::GetDefaultMediaUrls()) {} + +VideoConferencingRoutine::VideoConferencingRoutine( + const std::string& stun_server_hostname) + : stun_server_hostname_(stun_server_hostname), + udp_prober_getter_callback_(base::BindRepeating( + &VideoConferencingRoutine::CreateAndExecuteUdpProber)), + tls_prober_getter_callback_(base::BindRepeating( + &VideoConferencingRoutine::CreateAndExecuteTlsProber)), + udp_ports_(util::GetUdpPortsForCustomStunServer()), + tcp_ports_(util::GetTcpPortsForCustomStunServer()), + media_hostnames_(util::GetDefaultMediaUrls()) {} + +VideoConferencingRoutine::~VideoConferencingRoutine() = default; + +void VideoConferencingRoutine::AnalyzeResultsAndExecuteCallback() { + base::Optional<std::string> support_details = kSupportDetails; + set_verdict(mojom::RoutineVerdict::kProblem); + if (!open_udp_port_found_) { + problems_.push_back(mojom::VideoConferencingProblem::kUdpFailure); + } + if (!open_tcp_port_found_) { + problems_.push_back(mojom::VideoConferencingProblem::kTcpFailure); + } + if (!media_hostnames_reachable_) { + problems_.push_back(mojom::VideoConferencingProblem::kMediaFailure); + } + if (problems_.empty()) { + set_verdict(mojom::RoutineVerdict::kNoProblem); + support_details = base::nullopt; + } + std::move(routine_completed_callback_) + .Run(verdict(), std::move(problems_), support_details); +} + +void VideoConferencingRoutine::RunRoutine( + VideoConferencingRoutineCallback callback) { + if (!CanRun()) { + std::move(callback).Run(verdict(), std::move(problems_), base::nullopt); + return; + } + routine_completed_callback_ = std::move(callback); + ProbeStunServerOverUdp(); +} + +void VideoConferencingRoutine::ProbeStunServerOverUdp() { + if (udp_ports_.empty()) { + ProbeStunServerOverTcp(); + return; + } + int port = udp_ports_.back(); + udp_ports_.pop_back(); + AttemptUdpProbe(net::HostPortPair(stun_server_hostname_, port)); +} + +void VideoConferencingRoutine::ProbeStunServerOverTcp() { + if (tcp_ports_.empty()) { + ProbeMediaHostnames(); + return; + } + int port = tcp_ports_.back(); + tcp_ports_.pop_back(); + AttemptTcpProbe(net::HostPortPair(stun_server_hostname_, port)); +} + +void VideoConferencingRoutine::ProbeMediaHostnames() { + if (media_hostnames_.empty()) { + AnalyzeResultsAndExecuteCallback(); + return; + } + const GURL& url = media_hostnames_.back(); + media_hostnames_.pop_back(); + AttemptTlsProbe(net::HostPortPair::FromURL(url)); +} + +network::mojom::NetworkContext* VideoConferencingRoutine::GetNetworkContext() { + Profile* profile = util::GetUserProfile(); + DCHECK(profile); + + return content::BrowserContext::GetDefaultStoragePartition(profile) + ->GetNetworkContext(); +} + +std::unique_ptr<UdpProber> VideoConferencingRoutine::CreateAndExecuteUdpProber( + UdpProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + base::span<const uint8_t> data, + net::NetworkTrafficAnnotationTag tag, + base::TimeDelta timeout_after_host_resolution, + UdpProber::UdpProbeCompleteCallback callback) { + return UdpProber::Start(std::move(network_context_getter), host_port_pair, + std::move(data), tag, timeout_after_host_resolution, + std::move(callback)); +} + +std::unique_ptr<TlsProber> VideoConferencingRoutine::CreateAndExecuteTlsProber( + TlsProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + bool negotiate_tls, + TlsProber::TlsProbeCompleteCallback callback) { + return std::make_unique<TlsProber>(std::move(network_context_getter), + host_port_pair, negotiate_tls, + std::move(callback)); +} + +void VideoConferencingRoutine::AttemptUdpProbe( + net::HostPortPair host_port_pair) { + // Store the instance of UdpProber. + udp_prober_ = udp_prober_getter_callback_.Run( + base::BindRepeating(&VideoConferencingRoutine::GetNetworkContext), + host_port_pair, util::GetStunHeader(), + util::GetStunNetworkAnnotationTag(), kTimeoutAfterHostResolution, + base::BindOnce(&VideoConferencingRoutine::OnUdpProbeComplete, + weak_ptr())); +} + +void VideoConferencingRoutine::AttemptTcpProbe( + net::HostPortPair host_port_pair) { + tls_prober_ = tls_prober_getter_callback_.Run( + base::BindRepeating(&VideoConferencingRoutine::GetNetworkContext), + host_port_pair, + /*negotiate_tls=*/false, + base::BindOnce(&VideoConferencingRoutine::OnTcpProbeComplete, + weak_ptr())); +} + +void VideoConferencingRoutine::AttemptTlsProbe( + net::HostPortPair host_port_pair) { + // Store the instance of TlsProber. + tls_prober_ = tls_prober_getter_callback_.Run( + base::BindRepeating(&VideoConferencingRoutine::GetNetworkContext), + host_port_pair, + /*negotiate_tls=*/true, + base::BindOnce(&VideoConferencingRoutine::OnTlsProbeComplete, + weak_ptr())); +} + +void VideoConferencingRoutine::OnUdpProbeComplete( + int result, + UdpProber::ProbeExitEnum probe_exit_enum) { + if (result == net::OK) { + open_udp_port_found_ = true; + // Only one open UDP port needs to be detected. + ProbeStunServerOverTcp(); + return; + } + ProbeStunServerOverUdp(); +} + +void VideoConferencingRoutine::OnTcpProbeComplete( + int result, + TlsProber::ProbeExitEnum probe_exit_enum) { + if (result == net::OK) { + open_tcp_port_found_ = true; + // Only one open TCP port needs to be detected. + ProbeMediaHostnames(); + return; + } + ProbeStunServerOverTcp(); +} + +void VideoConferencingRoutine::OnTlsProbeComplete( + int result, + TlsProber::ProbeExitEnum probe_exit_enum) { + if (result != net::OK) { + media_hostnames_reachable_ = false; + // All media hostnames must be reachable. + AnalyzeResultsAndExecuteCallback(); + return; + } + ProbeMediaHostnames(); +} + +} // namespace network_diagnostics +} // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.h b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.h new file mode 100644 index 0000000..68e64bf --- /dev/null +++ b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.h
@@ -0,0 +1,151 @@ +// 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_CHROMEOS_NET_NETWORK_DIAGNOSTICS_VIDEO_CONFERENCING_ROUTINE_H_ +#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_VIDEO_CONFERENCING_ROUTINE_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "base/callback.h" +#include "base/containers/span.h" +#include "base/memory/weak_ptr.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_routine.h" +#include "chrome/browser/chromeos/net/network_diagnostics/tls_prober.h" +#include "chrome/browser/chromeos/net/network_diagnostics/udp_prober.h" +#include "net/base/net_errors.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "url/gurl.h" + +namespace chromeos { +namespace network_diagnostics { + +extern const char kSupportDetails[]; +extern const base::TimeDelta kTimeoutAfterHostResolution; + +// Tests the device's video conferencing capabilities by testing the connection +// to a sample of Google servers used in various GVC offerings. See the +// README.md file for more details. +class VideoConferencingRoutine : public NetworkDiagnosticsRoutine { + public: + using VideoConferencingRoutineCallback = + mojom::NetworkDiagnosticsRoutines::VideoConferencingCallback; + using UdpProberGetterCallback = + base::RepeatingCallback<std::unique_ptr<UdpProber>( + UdpProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + base::span<const uint8_t> data, + net::NetworkTrafficAnnotationTag tag, + base::TimeDelta timeout_after_host_resolution, + UdpProber::UdpProbeCompleteCallback callback)>; + using TlsProberGetterCallback = + base::RepeatingCallback<std::unique_ptr<TlsProber>( + TlsProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + bool negotiate_tls, + TlsProber::TlsProbeCompleteCallback callback)>; + + // Creates a routine using a default STUN server. + VideoConferencingRoutine(); + // Creates a routine using a custom STUN server. + explicit VideoConferencingRoutine(const std::string& stun_server_hostname); + VideoConferencingRoutine(const VideoConferencingRoutine&) = delete; + VideoConferencingRoutine& operator=(const VideoConferencingRoutine&) = delete; + ~VideoConferencingRoutine() override; + + // NetworkDiagnosticsRoutine: + void AnalyzeResultsAndExecuteCallback() override; + + // Run the core logic of this routine. Set |callback| to + // |routine_completed_callback_|, which is to be executed in + // AnalyzeResultsAndExecuteCallback(). + void RunRoutine(VideoConferencingRoutineCallback callback); + + void set_udp_prober_getter_callback_for_testing( + UdpProberGetterCallback udp_prober_getter_callback) { + udp_prober_getter_callback_ = std::move(udp_prober_getter_callback); + } + + void set_tls_prober_getter_callback_for_testing( + TlsProberGetterCallback tls_prober_getter_callback) { + tls_prober_getter_callback_ = std::move(tls_prober_getter_callback); + } + + private: + // Probes the STUN server over UDP to determine whether an open port + // connection exists. + void ProbeStunServerOverUdp(); + + // Probes the STUN server over TCP to determine whether an open port + // connection exists. + void ProbeStunServerOverTcp(); + + // Probes media endpoints over TCP with TLS. + void ProbeMediaHostnames(); + + // Returns the network context. + static network::mojom::NetworkContext* GetNetworkContext(); + + // Creates and instance of UdpProber. + static std::unique_ptr<UdpProber> CreateAndExecuteUdpProber( + UdpProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + base::span<const uint8_t> data, + net::NetworkTrafficAnnotationTag tag, + base::TimeDelta timeout_after_host_resolution, + UdpProber::UdpProbeCompleteCallback callback); + + // Creates an instance of TlsProber. + static std::unique_ptr<TlsProber> CreateAndExecuteTlsProber( + TlsProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + bool negotiate_tls, + TlsProber::TlsProbeCompleteCallback callback); + + // Launches a UDP probe. + void AttemptUdpProbe(net::HostPortPair host_port_pair); + + // Launches a TCP probe. + void AttemptTcpProbe(net::HostPortPair host_port_pair); + + // Launches a TLS probe. + void AttemptTlsProbe(net::HostPortPair host_port_pair); + + // Handles UDP probe completion. + void OnUdpProbeComplete(int result, UdpProber::ProbeExitEnum probe_exit_enum); + + // Handles TCP probe completion. + void OnTcpProbeComplete(int result, TlsProber::ProbeExitEnum probe_exit_enum); + + // Handles TLS probe completion. + void OnTlsProbeComplete(int result, TlsProber::ProbeExitEnum probe_exit_enum); + + // Returns the weak pointer to |this|. + base::WeakPtr<VideoConferencingRoutine> weak_ptr() { + return weak_factory_.GetWeakPtr(); + } + + std::vector<mojom::VideoConferencingProblem> problems_; + VideoConferencingRoutineCallback routine_completed_callback_; + std::string stun_server_hostname_; + bool open_udp_port_found_ = false; + bool open_tcp_port_found_ = false; + bool media_hostnames_reachable_ = true; + UdpProberGetterCallback udp_prober_getter_callback_; + TlsProberGetterCallback tls_prober_getter_callback_; + std::unique_ptr<UdpProber> udp_prober_; + std::unique_ptr<TlsProber> tls_prober_; + std::vector<int> udp_ports_; + std::vector<int> tcp_ports_; + std::vector<GURL> media_hostnames_; + + base::WeakPtrFactory<VideoConferencingRoutine> weak_factory_{this}; +}; + +} // namespace network_diagnostics +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_DIAGNOSTICS_VIDEO_CONFERENCING_ROUTINE_H_
diff --git a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine_unittest.cc b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine_unittest.cc new file mode 100644 index 0000000..bc09d5e --- /dev/null +++ b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine_unittest.cc
@@ -0,0 +1,542 @@ +// 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/chromeos/net/network_diagnostics/video_conferencing_routine.h" + +#include <deque> +#include <memory> +#include <string> +#include <utility> + +#include "base/optional.h" +#include "base/run_loop.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/net/network_diagnostics/network_diagnostics_util.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chromeos { +namespace network_diagnostics { + +namespace { + +// Test implementation of UdpProber. +class TestUdpProber final : public UdpProber { + public: + TestUdpProber(UdpProber::UdpProbeCompleteCallback callback, + int result, + UdpProber::ProbeExitEnum probe_exit_enum) { + // Post an asynchronus task simulating a completed probe. This mimics the + // behavior of the production UdpProber constructor since the TestUdpProber + // instance will be complete before FinishProbe is invoked. In the + // production UdpProber, the constructor completes before DNS host + // resolution is complete. + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&TestUdpProber::FinishProbe, weak_factory_.GetWeakPtr(), + std::move(callback), result, probe_exit_enum)); + } + + TestUdpProber(const TestUdpProber&) = delete; + TestUdpProber& operator=(const TestUdpProber&) = delete; + ~TestUdpProber() override = default; + + private: + void FinishProbe(UdpProber::UdpProbeCompleteCallback callback, + int result, + UdpProber::ProbeExitEnum probe_exit_enum) { + std::move(callback).Run(result, probe_exit_enum); + } + + base::WeakPtrFactory<TestUdpProber> weak_factory_{this}; +}; + +// Test implementation of TlsProber. +class TestTlsProber final : public TlsProber { + public: + TestTlsProber(TlsProber::TlsProbeCompleteCallback callback, + int result, + TlsProber::ProbeExitEnum probe_exit_enum) { + // Post an asynchronus task simulating a completed probe. This mimics the + // behavior of the production TlsProber constructor since the TestTlsProber + // instance will be complete before FinishProbe is invoked. In the + // production TlsProber, the constructor completes before DNS host + // resolution is complete. + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&TestTlsProber::FinishProbe, weak_factory_.GetWeakPtr(), + std::move(callback), result, probe_exit_enum)); + } + + TestTlsProber(const TestTlsProber&) = delete; + TestTlsProber& operator=(const TestTlsProber&) = delete; + ~TestTlsProber() override = default; + + private: + void FinishProbe(TlsProber::TlsProbeCompleteCallback callback, + int result, + TlsProber::ProbeExitEnum probe_exit_enum) { + std::move(callback).Run(result, probe_exit_enum); + } + + base::WeakPtrFactory<TestTlsProber> weak_factory_{this}; +}; + +} // namespace + +class VideoConferencingRoutineTest : public ::testing::Test { + public: + struct UdpProberReturnValue { + net::Error result; + UdpProber::ProbeExitEnum probe_exit_enum; + }; + struct TlsProberReturnValue { + net::Error result; + TlsProber::ProbeExitEnum probe_exit_enum; + }; + + VideoConferencingRoutineTest() = default; + VideoConferencingRoutineTest(const VideoConferencingRoutineTest&) = delete; + VideoConferencingRoutineTest& operator=(const VideoConferencingRoutineTest&) = + delete; + ~VideoConferencingRoutineTest() override = default; + + void CompareVerdict( + mojom::RoutineVerdict expected_verdict, + const std::vector<mojom::VideoConferencingProblem>& expected_problems, + const base::Optional<std::string>& expected_support_details, + mojom::RoutineVerdict actual_verdict, + const std::vector<mojom::VideoConferencingProblem>& actual_problems, + const base::Optional<std::string>& actual_support_details) { + EXPECT_EQ(expected_verdict, actual_verdict); + EXPECT_EQ(expected_problems, actual_problems); + EXPECT_EQ(expected_support_details.has_value(), + actual_support_details.has_value()); + if (expected_support_details.has_value() && + actual_support_details.has_value()) { + EXPECT_EQ(expected_support_details.has_value(), + actual_support_details.has_value()); + } + run_loop_.Quit(); + } + + std::unique_ptr<UdpProber> CreateAndExecuteUdpProber( + UdpProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + base::span<const uint8_t> data, + net::NetworkTrafficAnnotationTag tag, + base::TimeDelta timeout_after_host_resolution, + UdpProber::UdpProbeCompleteCallback callback) { + DCHECK(fake_udp_probe_results_.size() > 0); + + auto value = fake_udp_probe_results_.front(); + fake_udp_probe_results_.pop_front(); + auto test_udp_prober = std::make_unique<TestUdpProber>( + std::move(callback), value.result, value.probe_exit_enum); + return std::move(test_udp_prober); + } + + std::unique_ptr<TlsProber> CreateAndExecuteTlsProber( + TlsProber::NetworkContextGetter network_context_getter, + net::HostPortPair host_port_pair, + bool negotiate_tls, + TlsProber::TlsProbeCompleteCallback callback) { + DCHECK(fake_tls_probe_results_.size() > 0); + + auto value = fake_tls_probe_results_.front(); + fake_tls_probe_results_.pop_front(); + auto test_tls_prober = std::make_unique<TestTlsProber>( + std::move(callback), value.result, value.probe_exit_enum); + return std::move(test_tls_prober); + } + + protected: + void RunRoutine( + mojom::RoutineVerdict expected_routine_verdict, + const std::vector<mojom::VideoConferencingProblem>& expected_problems, + const base::Optional<std::string>& expected_support_details) { + video_conferencing_routine_->RunRoutine(base::BindOnce( + &VideoConferencingRoutineTest::CompareVerdict, weak_ptr(), + expected_routine_verdict, expected_problems, expected_support_details)); + run_loop_.Run(); + } + + void SetUpRoutine(std::deque<UdpProberReturnValue> fake_udp_probe_results, + std::deque<TlsProberReturnValue> fake_tls_probe_results) { + fake_udp_probe_results_ = std::move(fake_udp_probe_results); + fake_tls_probe_results_ = std::move(fake_tls_probe_results); + video_conferencing_routine_ = std::make_unique<VideoConferencingRoutine>(); + video_conferencing_routine_->set_udp_prober_getter_callback_for_testing( + base::BindRepeating( + &VideoConferencingRoutineTest::CreateAndExecuteUdpProber, + base::Unretained(this))); + video_conferencing_routine_->set_tls_prober_getter_callback_for_testing( + base::BindRepeating( + &VideoConferencingRoutineTest::CreateAndExecuteTlsProber, + base::Unretained(this))); + } + + // Sets up required properties (via fakes) and runs the test. + // + // Parameters: + // |fake_udp_probe_results|: Represents the results of UDP probes. + // |fake_tls_probe_results|: Represents the results of TCP and TLS probes. + // |expected_routine_verdict|: Represents the expected verdict + // reported by this test. + // |expected_problems|: Represents the expected problem + // reported by this test. + void SetUpAndRunRoutine( + std::deque<UdpProberReturnValue> fake_udp_probe_results, + std::deque<TlsProberReturnValue> fake_tls_probe_results, + mojom::RoutineVerdict expected_routine_verdict, + const std::vector<mojom::VideoConferencingProblem>& expected_problems, + const base::Optional<std::string>& expected_support_details) { + SetUpRoutine(std::move(fake_udp_probe_results), + std::move(fake_tls_probe_results)); + RunRoutine(expected_routine_verdict, expected_problems, + expected_support_details); + } + + base::WeakPtr<VideoConferencingRoutineTest> weak_ptr() { + return weak_factory_.GetWeakPtr(); + } + + private: + content::BrowserTaskEnvironment task_environment_; + base::RunLoop run_loop_; + std::deque<UdpProberReturnValue> fake_udp_probe_results_; + std::deque<TlsProberReturnValue> fake_tls_probe_results_; + std::unique_ptr<VideoConferencingRoutine> video_conferencing_routine_; + base::WeakPtrFactory<VideoConferencingRoutineTest> weak_factory_{this}; +}; + +// Tests the scenario where: +// (1) An open port to the STUN server is found via UDP and TCP. +// (2) All media hostnames are reachable. +TEST_F(VideoConferencingRoutineTest, TestSuccessfulPath) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + if (i < num_udp_ports_tested - 1) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + continue; + } + fake_udp_probe_results.push_back( + UdpProberReturnValue{net::OK, UdpProber::ProbeExitEnum::kSuccess}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + if (i < num_tcp_ports_tested - 1) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + continue; + } + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + // Results corresponding to the TLS requests to media hostnames. + int num_media_hostnames_tested = util::GetDefaultMediaUrls().size(); + for (int i = 0; i < num_media_hostnames_tested; i++) { + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + SetUpAndRunRoutine( + std::move(fake_udp_probe_results), std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kNoProblem, + /*expected_problems=*/{}, /*expected_support_problems=*/base::nullopt); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via UDP. +TEST_F(VideoConferencingRoutineTest, TestUdpFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + if (i < num_tcp_ports_tested - 1) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + continue; + } + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + // Results corresponding to the TLS requests to media hostnames. + int num_media_hostnames_tested = util::GetDefaultMediaUrls().size(); + for (int i = 0; i < num_media_hostnames_tested; i++) { + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + SetUpAndRunRoutine( + std::move(fake_udp_probe_results), std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kUdpFailure}, kSupportDetails); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via TCP. +TEST_F(VideoConferencingRoutineTest, TestTcpFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + if (i < num_udp_ports_tested - 1) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + continue; + } + fake_udp_probe_results.push_back( + UdpProberReturnValue{net::OK, UdpProber::ProbeExitEnum::kSuccess}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + } + + // Results corresponding to the TLS requests to media hostnames. + int num_media_hostnames_tested = util::GetDefaultMediaUrls().size(); + for (int i = 0; i < num_media_hostnames_tested; i++) { + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + SetUpAndRunRoutine( + std::move(fake_udp_probe_results), std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kTcpFailure}, kSupportDetails); +} + +// Tests the scenario where: +// (1) Requests to one or more media hostnames failed. +TEST_F(VideoConferencingRoutineTest, TestMediaFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + if (i < num_udp_ports_tested - 1) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + continue; + } + fake_udp_probe_results.push_back( + UdpProberReturnValue{net::OK, UdpProber::ProbeExitEnum::kSuccess}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + if (i < num_tcp_ports_tested - 1) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + continue; + } + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + // Results corresponding to the TLS requests to media hostnames. + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTlsUpgradeFailure}); + + SetUpAndRunRoutine( + std::move(fake_udp_probe_results), std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kMediaFailure}, kSupportDetails); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via UDP. +// (2) No open port to the STUN server is found via TCP. +TEST_F(VideoConferencingRoutineTest, TestUdpAndTcpFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + } + + // Results corresponding to the TLS requests to media hostnames. + int num_media_hostnames_tested = util::GetDefaultMediaUrls().size(); + for (int i = 0; i < num_media_hostnames_tested; i++) { + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + SetUpAndRunRoutine(std::move(fake_udp_probe_results), + std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kUdpFailure, + mojom::VideoConferencingProblem::kTcpFailure}, + kSupportDetails); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via UDP. +// (2) Requests to one or more media hostnames failed. +TEST_F(VideoConferencingRoutineTest, TestUdpAndMediaFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + if (i < num_tcp_ports_tested - 1) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + continue; + } + fake_tls_probe_results.push_back( + TlsProberReturnValue{net::OK, TlsProber::ProbeExitEnum::kSuccess}); + } + + // Results corresponding to the TLS requests to media hostnames. + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTlsUpgradeFailure}); + + SetUpAndRunRoutine(std::move(fake_udp_probe_results), + std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kUdpFailure, + mojom::VideoConferencingProblem::kMediaFailure}, + kSupportDetails); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via TCP. +// (2) Requests to one or more media hostnames failed. +TEST_F(VideoConferencingRoutineTest, TestTcpAndMediaFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + if (i < num_udp_ports_tested - 1) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + continue; + } + fake_udp_probe_results.push_back( + UdpProberReturnValue{net::OK, UdpProber::ProbeExitEnum::kSuccess}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + } + + // Results corresponding to the TLS requests to media hostnames. + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTlsUpgradeFailure}); + + SetUpAndRunRoutine(std::move(fake_udp_probe_results), + std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kTcpFailure, + mojom::VideoConferencingProblem::kMediaFailure}, + kSupportDetails); +} + +// Tests the scenario where: +// (1) No open port to the STUN server is found via UDP. +// (2) No open port to the STUN server is found via TCP. +// (3) Requests to one or more media hostnames failed. +TEST_F(VideoConferencingRoutineTest, TestTcpAndUdpAndMediaFailure) { + // Results corresponding to UDP requests to the STUN server. + int num_udp_ports_tested = util::GetUdpPortsForGoogleStunServer().size(); + std::deque<UdpProberReturnValue> fake_udp_probe_results; + for (int i = 0; i < num_udp_ports_tested; i++) { + fake_udp_probe_results.push_back(UdpProberReturnValue{ + net::ERR_FAILED, UdpProber::ProbeExitEnum::kNoDataReceivedFailure}); + } + + // Tracks the results corresponding to TCP requests to the STUN server and + // TLS requests to media hostnames. + std::deque<TlsProberReturnValue> fake_tls_probe_results; + + // Results corresponding to the STUN server via TCP. + int num_tcp_ports_tested = util::GetTcpPortsForGoogleStunServer().size(); + for (int i = 0; i < num_tcp_ports_tested; i++) { + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTcpConnectionFailure}); + } + + // Results corresponding to the TLS requests to media hostnames. + fake_tls_probe_results.push_back(TlsProberReturnValue{ + net::ERR_FAILED, TlsProber::ProbeExitEnum::kTlsUpgradeFailure}); + + SetUpAndRunRoutine(std::move(fake_udp_probe_results), + std::move(fake_tls_probe_results), + mojom::RoutineVerdict::kProblem, + {mojom::VideoConferencingProblem::kUdpFailure, + mojom::VideoConferencingProblem::kTcpFailure, + mojom::VideoConferencingProblem::kMediaFailure}, + kSupportDetails); +} + +} // namespace network_diagnostics +} // namespace chromeos
diff --git a/chrome/browser/chromeos/phonehub/DIR_METADATA b/chrome/browser/chromeos/phonehub/DIR_METADATA new file mode 100644 index 0000000..3532c57 --- /dev/null +++ b/chrome/browser/chromeos/phonehub/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice>PhoneHub" +}
diff --git a/chrome/browser/chromeos/phonehub/OWNERS b/chrome/browser/chromeos/phonehub/OWNERS index f603cffa..7cce0fd 100644 --- a/chrome/browser/chromeos/phonehub/OWNERS +++ b/chrome/browser/chromeos/phonehub/OWNERS
@@ -1,3 +1 @@ file://chromeos/components/phonehub/OWNERS - -# COMPONENT: OS>Systems>Multidevice>PhoneHub
diff --git a/chrome/browser/chromeos/platform_keys/DIR_METADATA b/chrome/browser/chromeos/platform_keys/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/platform_keys/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/platform_keys/OWNERS b/chrome/browser/chromeos/platform_keys/OWNERS index d95b35b6..ea64ac8a 100644 --- a/chrome/browser/chromeos/platform_keys/OWNERS +++ b/chrome/browser/chromeos/platform_keys/OWNERS
@@ -1,5 +1,3 @@ emaxx@chromium.org omorsi@google.com pmarko@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/plugin_vm/DIR_METADATA b/chrome/browser/chromeos/plugin_vm/DIR_METADATA new file mode 100644 index 0000000..73a0e94 --- /dev/null +++ b/chrome/browser/chromeos/plugin_vm/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers>PluginVM" +}
diff --git a/chrome/browser/chromeos/plugin_vm/OWNERS b/chrome/browser/chromeos/plugin_vm/OWNERS index b9eaf8c..1783e5d 100644 --- a/chrome/browser/chromeos/plugin_vm/OWNERS +++ b/chrome/browser/chromeos/plugin_vm/OWNERS
@@ -1,5 +1,3 @@ joelhockey@chromium.org okalitova@chromium.org timloh@chromium.org - -# COMPONENT: UI>Shell>Containers>PluginVM
diff --git a/chrome/browser/chromeos/policy/DIR_METADATA b/chrome/browser/chromeos/policy/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/policy/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/policy/OWNERS b/chrome/browser/chromeos/policy/OWNERS index 24f22c9..099e08ae 100644 --- a/chrome/browser/chromeos/policy/OWNERS +++ b/chrome/browser/chromeos/policy/OWNERS
@@ -1,5 +1,3 @@ file://chromeos/policy/OWNERS per-file *install_event*=swapnilgupta@google.com - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/policy/dlp/DIR_METADATA b/chrome/browser/chromeos/policy/dlp/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/policy/dlp/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/policy/dlp/OWNERS b/chrome/browser/chromeos/policy/dlp/OWNERS index 31f32f3..1725fcc7 100644 --- a/chrome/browser/chromeos/policy/dlp/OWNERS +++ b/chrome/browser/chromeos/policy/dlp/OWNERS
@@ -1,5 +1,3 @@ ayaelattar@chromium.org nikitapodguzov@chromium.org poromov@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/policy/off_hours/DIR_METADATA b/chrome/browser/chromeos/policy/off_hours/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/policy/off_hours/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/policy/off_hours/OWNERS b/chrome/browser/chromeos/policy/off_hours/OWNERS index e0cc5f1..6090b08 100644 --- a/chrome/browser/chromeos/policy/off_hours/OWNERS +++ b/chrome/browser/chromeos/policy/off_hours/OWNERS
@@ -1,3 +1 @@ poromov@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/printing/DIR_METADATA b/chrome/browser/chromeos/printing/DIR_METADATA new file mode 100644 index 0000000..939d296 --- /dev/null +++ b/chrome/browser/chromeos/printing/DIR_METADATA
@@ -0,0 +1,4 @@ +monorail: { + component: "Internals>Printing>CUPS" +} +team_email: "cros-printing-dev@chromium.org"
diff --git a/chrome/browser/chromeos/printing/OWNERS b/chrome/browser/chromeos/printing/OWNERS index 24e01ad..b67d268 100644 --- a/chrome/browser/chromeos/printing/OWNERS +++ b/chrome/browser/chromeos/printing/OWNERS
@@ -1,4 +1 @@ file://chromeos/printing/OWNERS - -# TEAM: cros-printing-dev@chromium.org -# COMPONENT: Internals>Printing>CUPS
diff --git a/chrome/browser/chromeos/release_notes/DIR_METADATA b/chrome/browser/chromeos/release_notes/DIR_METADATA new file mode 100644 index 0000000..659360b --- /dev/null +++ b/chrome/browser/chromeos/release_notes/DIR_METADATA
@@ -0,0 +1,7 @@ +monorail: { + component: "Platform>Apps>Default" +} +team_email: "cros-essential-apps-dev@chromium.org" +buganizer: { + component_id: 690873 +}
diff --git a/chrome/browser/chromeos/release_notes/OWNERS b/chrome/browser/chromeos/release_notes/OWNERS index ac124ae..3a4a625 100644 --- a/chrome/browser/chromeos/release_notes/OWNERS +++ b/chrome/browser/chromeos/release_notes/OWNERS
@@ -1,5 +1 @@ file://chromeos/components/help_app_ui/OWNERS - -# TEAM: cros-essential-apps-dev@chromium.org -# COMPONENT: Platform>Apps>Default -# Internal Component: b/components/690873
diff --git a/chrome/browser/chromeos/scanning/scan_service.cc b/chrome/browser/chromeos/scanning/scan_service.cc index 789811c96..176f532 100644 --- a/chrome/browser/chromeos/scanning/scan_service.cc +++ b/chrome/browser/chromeos/scanning/scan_service.cc
@@ -21,6 +21,13 @@ #include "base/time/time.h" #include "chrome/browser/chromeos/scanning/lorgnette_scanner_manager.h" #include "chrome/browser/chromeos/scanning/scanning_type_converters.h" +#include "third_party/skia/include/codec/SkCodec.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkData.h" +#include "third_party/skia/include/core/SkImage.h" +#include "third_party/skia/include/core/SkStream.h" +#include "third_party/skia/include/core/SkTypes.h" +#include "third_party/skia/include/docs/SkPDFDocument.h" #include "ui/gfx/image/image.h" #include "ui/gfx/image/image_util.h" @@ -39,6 +46,36 @@ // The max progress percent that can be reported for a scanned page. constexpr uint32_t kMaxProgressPercent = 100; +// Contains information extracted from a PNG image necessary for conversion to +// PDF. +struct PngImageData { + SkImageInfo png_info; + std::vector<uint8_t> pixels; +}; + +// Creates a filename for a scanned image using |start_time|, |page_number|, and +// |file_ext|. +std::string CreateFilename(const base::Time::Exploded& start_time, + uint32_t page_number, + const std::string& file_ext) { + return base::StringPrintf( + "scan_%02d%02d%02d-%02d%02d%02d_%d.%s", start_time.year, start_time.month, + start_time.day_of_month, start_time.hour, start_time.minute, + start_time.second, page_number, file_ext.c_str()); +} + +// Helper function that writes |scanned_image| to |file_path|. +// Returns whether the image was successfully written. +bool WriteImage(const base::FilePath& file_path, + const std::string& scanned_image) { + if (!base::WriteFile(file_path, scanned_image)) { + LOG(ERROR) << "Failed to save scanned image: " << file_path.value().c_str(); + return false; + } + + return true; +} + // Converts |png_img| to JPG. std::string PngToJpg(const std::string& png_img) { std::vector<uint8_t> jpg_img; @@ -52,6 +89,97 @@ return std::string(jpg_img.begin(), jpg_img.end()); } +// Creates a new page for the PDF document and adds |image_data| to the page. +// Returns whether the page was successfully created. +bool AddPdfPage(sk_sp<SkDocument> pdf_doc, PngImageData& image_data) { + SkBitmap img_bitmap; + if (!img_bitmap.setInfo(image_data.png_info, + image_data.png_info.minRowBytes())) { + LOG(ERROR) << "Unable to set bitmap image info."; + return false; + } + + img_bitmap.setPixels(static_cast<void*>(image_data.pixels.data())); + SkCanvas* page_canvas = pdf_doc->beginPage(image_data.png_info.width(), + image_data.png_info.height()); + if (!page_canvas) { + LOG(ERROR) << "Unable to access PDF page canvas."; + return false; + } + page_canvas->drawBitmap(img_bitmap, /*left=*/0, /*top=*/0); + pdf_doc->endPage(); + return true; +} + +// Given PNG image data, returns the image info and pixels as a struct. +base::Optional<PngImageData> GetPngData(sk_sp<SkData> img_data) { + PngImageData acquired_data; + std::unique_ptr<SkCodec> png_codec = SkCodec::MakeFromData(img_data, nullptr); + if (!png_codec) { + LOG(ERROR) << "Unable to make SkCodec from data."; + return base::nullopt; + } + + acquired_data.png_info = png_codec->getInfo(); + if (acquired_data.png_info.isEmpty()) { + LOG(ERROR) << "Unable to get image info from codec."; + return base::nullopt; + } + + // Calculations for vector size provided by SkCodec.h. + acquired_data.pixels = + std::vector<uint8_t>(acquired_data.png_info.computeMinByteSize()); + auto result = png_codec->getPixels( + acquired_data.png_info, static_cast<void*>(acquired_data.pixels.data()), + acquired_data.png_info.minRowBytes()); + if (result != SkCodec::kSuccess) { + LOG(ERROR) << "Unable to get pixels from codec. Returned error: " + << SkCodec::ResultToString(result); + return base::nullopt; + } + + return acquired_data; +} + +// Converts |png_img| to PDF and writes the PDF to |file_path|. +// Returns whether the converted image was successfully saved. +bool SaveAsPdf(const std::string& png_img, const base::FilePath& file_path) { + SkDynamicMemoryWStream img_stream; + if (!img_stream.write(png_img.c_str(), png_img.size())) { + LOG(ERROR) << "Unable to write image to dynamic memory stream."; + return false; + } + + sk_sp<SkData> img_data = img_stream.detachAsData(); + if (img_data->isEmpty()) { + LOG(ERROR) << "Stream data is empty."; + return false; + } + + base::Optional<PngImageData> acquired_data = GetPngData(img_data); + if (!acquired_data.has_value()) { + LOG(ERROR) << "Unable to process image data."; + return false; + } + + SkFILEWStream pdf_outfile(file_path.value().c_str()); + if (!pdf_outfile.isValid()) { + LOG(ERROR) << "Unable to open output file."; + return false; + } + + sk_sp<SkDocument> pdf_doc = SkPDF::MakeDocument(&pdf_outfile); + SkASSERT(pdf_doc); + if (!AddPdfPage(pdf_doc, acquired_data.value())) { + LOG(ERROR) << "Unable to add new PDF page."; + return false; + } + + // TODO(kmoed): Add multipage scan functionality. + pdf_doc->close(); + return true; +} + // Saves |scanned_image| to a file after converting it if necessary. Returns the // file path to the saved file if the save succeeds. base::FilePath SavePage(const base::FilePath& scan_to_path, @@ -59,34 +187,31 @@ std::string scanned_image, uint32_t page_number, const base::Time::Exploded& start_time) { - std::string file_ext; + std::string filename; switch (file_type) { case mojo_ipc::FileType::kPng: - file_ext = "png"; - break; - case mojo_ipc::FileType::kJpg: - file_ext = "jpg"; - scanned_image = PngToJpg(scanned_image); - if (scanned_image.empty()) + filename = CreateFilename(start_time, page_number, "png"); + if (!WriteImage(scan_to_path.Append(filename), scanned_image)) return base::FilePath(); break; - default: - LOG(ERROR) << "Selected file type not supported."; - return base::FilePath(); + case mojo_ipc::FileType::kJpg: + filename = CreateFilename(start_time, page_number, "jpg"); + scanned_image = PngToJpg(scanned_image); + if (scanned_image.empty() || + !WriteImage(scan_to_path.Append(filename), scanned_image)) { + return base::FilePath(); + } + break; + case mojo_ipc::FileType::kPdf: + filename = CreateFilename(start_time, page_number, "pdf"); + if (!SaveAsPdf(scanned_image, scan_to_path.Append(filename))) + return base::FilePath(); + + break; } - const std::string filename = base::StringPrintf( - "scan_%02d%02d%02d-%02d%02d%02d_%d.%s", start_time.year, start_time.month, - start_time.day_of_month, start_time.hour, start_time.minute, - start_time.second, page_number, file_ext.c_str()); - const auto file_path = scan_to_path.Append(filename); - if (!base::WriteFile(file_path, scanned_image)) { - LOG(ERROR) << "Failed to save scanned image: " << file_path.value().c_str(); - return base::FilePath(); - } - - return file_path; + return scan_to_path.Append(filename); } } // namespace
diff --git a/chrome/browser/chromeos/scanning/scan_service_unittest.cc b/chrome/browser/chromeos/scanning/scan_service_unittest.cc index 74fc2071..8393337 100644 --- a/chrome/browser/chromeos/scanning/scan_service_unittest.cc +++ b/chrome/browser/chromeos/scanning/scan_service_unittest.cc
@@ -27,6 +27,8 @@ #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/codec/png_codec.h" namespace chromeos { @@ -83,6 +85,16 @@ return file_paths; } +// Returns a manually generated PNG image. +std::string CreatePng() { + SkBitmap bitmap; + bitmap.allocN32Pixels(100, 100); + bitmap.eraseARGB(255, 0, 255, 0); + std::vector<unsigned char> bytes; + gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &bytes); + return std::string(bytes.begin(), bytes.end()); +} + } // namespace class FakeScanJobObserver : public mojo_ipc::ScanJobObserver { @@ -309,8 +321,8 @@ TEST_F(ScanServiceTest, Scan) { fake_lorgnette_scanner_manager_.SetGetScannerNamesResponse( {kFirstTestScannerName}); - const std::vector<std::string> scan_data = {"TestData1", "TestData2", - "TestData3"}; + const std::vector<std::string> scan_data = {CreatePng(), CreatePng(), + CreatePng()}; fake_lorgnette_scanner_manager_.SetScanResponse(scan_data); auto scanners = GetScanners(); ASSERT_EQ(scanners.size(), 1u); @@ -323,7 +335,9 @@ mojo_ipc::ScanSettings settings; settings.scan_to_path = temp_dir_.GetPath(); std::map<std::string, mojo_ipc::FileType> file_types = { - {"png", mojo_ipc::FileType::kPng}, {"jpg", mojo_ipc::FileType::kJpg}}; + {"png", mojo_ipc::FileType::kPng}, + {"jpg", mojo_ipc::FileType::kJpg}, + {"pdf", mojo_ipc::FileType::kPdf}}; for (const auto& type : file_types) { const std::vector<base::FilePath> saved_scan_paths = CreateSavedScanPaths( temp_dir_.GetPath(), scan_time, type.first, scan_data.size());
diff --git a/chrome/browser/chromeos/secure_channel/DIR_METADATA b/chrome/browser/chromeos/secure_channel/DIR_METADATA new file mode 100644 index 0000000..81d0548 --- /dev/null +++ b/chrome/browser/chromeos/secure_channel/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice" +}
diff --git a/chrome/browser/chromeos/secure_channel/OWNERS b/chrome/browser/chromeos/secure_channel/OWNERS index 8eaf92b2..7027ab73 100644 --- a/chrome/browser/chromeos/secure_channel/OWNERS +++ b/chrome/browser/chromeos/secure_channel/OWNERS
@@ -1,3 +1 @@ file://chromeos/components/multidevice/OWNERS - -# COMPONENT: OS>Systems>Multidevice
diff --git a/chrome/browser/chromeos/settings/DIR_METADATA b/chrome/browser/chromeos/settings/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/settings/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/settings/OWNERS b/chrome/browser/chromeos/settings/OWNERS index 68741cc..e30711a 100644 --- a/chrome/browser/chromeos/settings/OWNERS +++ b/chrome/browser/chromeos/settings/OWNERS
@@ -1,3 +1 @@ file://chromeos/settings/OWNERS - -# COMPONENT: Enterprise
diff --git a/chrome/browser/chromeos/smb_client/DIR_METADATA b/chrome/browser/chromeos/smb_client/DIR_METADATA new file mode 100644 index 0000000..5345fc2 --- /dev/null +++ b/chrome/browser/chromeos/smb_client/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Platform>Apps>FileManager" +}
diff --git a/chrome/browser/chromeos/smb_client/OWNERS b/chrome/browser/chromeos/smb_client/OWNERS index 7d236cb..73220a8 100644 --- a/chrome/browser/chromeos/smb_client/OWNERS +++ b/chrome/browser/chromeos/smb_client/OWNERS
@@ -1,2 +1 @@ file://ui/file_manager/OWNERS -# COMPONENT: Platform>Apps>FileManager
diff --git a/chrome/browser/chromeos/system_logs/DIR_METADATA b/chrome/browser/chromeos/system_logs/DIR_METADATA new file mode 100644 index 0000000..b5697710 --- /dev/null +++ b/chrome/browser/chromeos/system_logs/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Platform>Apps>Feedback" +}
diff --git a/chrome/browser/chromeos/system_logs/OWNERS b/chrome/browser/chromeos/system_logs/OWNERS index fae7a0ce..220e699 100644 --- a/chrome/browser/chromeos/system_logs/OWNERS +++ b/chrome/browser/chromeos/system_logs/OWNERS
@@ -1,3 +1 @@ file://components/feedback/OWNERS - -# COMPONENT: Platform>Apps>Feedback
diff --git a/chrome/browser/chromeos/system_token_cert_db_initializer.cc b/chrome/browser/chromeos/system_token_cert_db_initializer.cc index e03c265..3d37a2173 100644 --- a/chrome/browser/chromeos/system_token_cert_db_initializer.cc +++ b/chrome/browser/chromeos/system_token_cert_db_initializer.cc
@@ -13,6 +13,7 @@ #include "base/location.h" #include "base/logging.h" #include "base/sequence_checker.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "build/branding_buildflags.h" #include "build/buildflag.h" @@ -21,6 +22,7 @@ #include "chromeos/dbus/tpm_manager/tpm_manager.pb.h" #include "chromeos/dbus/tpm_manager/tpm_manager_client.h" #include "chromeos/network/network_cert_loader.h" +#include "chromeos/tpm/buildflags.h" #include "chromeos/tpm/tpm_token_loader.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -32,6 +34,10 @@ namespace { +constexpr base::TimeDelta kInitialRequestDelay = + base::TimeDelta::FromMilliseconds(100); +constexpr base::TimeDelta kMaxRequestDelay = base::TimeDelta::FromMinutes(5); + // Called on UI Thread when the system slot has been retrieved. void GotSystemSlotOnUIThread( base::OnceCallback<void(crypto::ScopedPK11Slot)> callback_ui_thread, @@ -77,6 +83,24 @@ #endif } +// Checks if the build flag system_slot_software_fallback is enabled. +bool IsSystemSlotSoftwareFallbackEnabled() { +#if BUILDFLAG(SYSTEM_SLOT_SOFTWARE_FALLBACK) + return true; +#else + return false; +#endif +} + +// Calculates the delay before running next attempt to get the TPM state +// (enabled/disabled), if |last_delay| was the last or initial delay. +base::TimeDelta GetNextRequestDelay(base::TimeDelta last_delay) { + // This implements an exponential backoff, as we don't know in which order of + // magnitude the TPM token changes it's state. The delay is capped to prevent + // overflow. This threshold is arbitrarily chosen. + return std::min(last_delay * 2, kMaxRequestDelay); +} + // ChromeBrowserMainPartsChromeos owns this. SystemTokenCertDBInitializer* g_system_token_cert_db_initializer = nullptr; @@ -85,7 +109,8 @@ constexpr base::TimeDelta SystemTokenCertDBInitializer::kMaxCertDbRetrievalDelay; -SystemTokenCertDBInitializer::SystemTokenCertDBInitializer() { +SystemTokenCertDBInitializer::SystemTokenCertDBInitializer() + : tpm_request_delay_(kInitialRequestDelay) { // Only start loading the system token once cryptohome is available and only // if the TPM is ready (available && owned && not being owned). CryptohomeClient::Get()->WaitForServiceToBeAvailable( @@ -177,6 +202,50 @@ VLOG(1) << "SystemTokenCertDBInitializer: Cryptohome available."; TpmManagerClient::Get()->AddObserver(this); + + CheckTpm(); +} + +void SystemTokenCertDBInitializer::CheckTpm() { + if (IsSystemSlotSoftwareFallbackEnabled()) { + TpmManagerClient::Get()->GetTpmNonsensitiveStatus( + ::tpm_manager::GetTpmNonsensitiveStatusRequest(), + base::BindOnce(&SystemTokenCertDBInitializer::OnGetTpmStatus, + weak_ptr_factory_.GetWeakPtr())); + } else { + CryptohomeClient::Get()->TpmIsReady( + base::BindOnce(&SystemTokenCertDBInitializer::OnGotTpmIsReady, + weak_ptr_factory_.GetWeakPtr())); + } +} + +void SystemTokenCertDBInitializer::RetryCheckTpmLater() { + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&SystemTokenCertDBInitializer::CheckTpm, + weak_ptr_factory_.GetWeakPtr()), + tpm_request_delay_); + tpm_request_delay_ = GetNextRequestDelay(tpm_request_delay_); +} + +void SystemTokenCertDBInitializer::OnGetTpmStatus( + const ::tpm_manager::GetTpmNonsensitiveStatusReply& reply) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + if (reply.status() != ::tpm_manager::STATUS_SUCCESS) { + LOG(WARNING) << "Failed to get tpm status; status: " << reply.status(); + RetryCheckTpmLater(); + return; + } + + // When the software fallback flag is set and the TPM is disabled, we skip the + // TpmIsReady() call. Otherwise, because the TPM won't be ready and will never + // be signaled as such, we won't proceed to the database initialization. + if (!reply.is_enabled()) { + MaybeStartInitializingDatabase(); + return; + } + CryptohomeClient::Get()->TpmIsReady( base::BindOnce(&SystemTokenCertDBInitializer::OnGotTpmIsReady, weak_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/chromeos/system_token_cert_db_initializer.h b/chrome/browser/chromeos/system_token_cert_db_initializer.h index 868a986..98e1893b 100644 --- a/chrome/browser/chromeos/system_token_cert_db_initializer.h +++ b/chrome/browser/chromeos/system_token_cert_db_initializer.h
@@ -19,6 +19,7 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" +#include "chromeos/dbus/tpm_manager/tpm_manager.pb.h" #include "chromeos/dbus/tpm_manager/tpm_manager_client.h" #include "crypto/scoped_nss_types.h" @@ -86,6 +87,22 @@ // Called once the cryptohome service is available. void OnCryptohomeAvailable(bool available); + // Verifies the value of the build flag system_slot_software_fallback and + // decides the initialization flow based on that. + void CheckTpm(); + + // If GetTpmNonsensitiveStatus() fails (e.g. if TPM token is not yet ready) + // schedules the initialization step retry attempt after a timeout. + void RetryCheckTpmLater(); + + // This is a callback for the GetTpmNonsensitiveStatus() query. It is only + // called when the build flag system_slot_software_fallback is enabled. If the + // build flag is enabled and TPM is disabled, we skip the cryptohome + // TpmIsReady() check during initialization, otherwise we continue the normal + // flow with TpmIsReady() and its callback. + void OnGetTpmStatus( + const ::tpm_manager::GetTpmNonsensitiveStatusReply& reply); + // This is a callback for the cryptohome TpmIsReady query. Note that this is // not a listener which would be called once TPM becomes ready if it was not // ready on startup - that event is observed by `OnOwnershipTakenSignal()`. @@ -124,6 +141,10 @@ base::OneShotTimer system_token_cert_db_retrieval_timer_; + // The current request delay before the next attempt to retrieve the TPM + // state. Will be adapted after each attempt. + base::TimeDelta tpm_request_delay_; + SEQUENCE_CHECKER(sequence_checker_); base::WeakPtrFactory<SystemTokenCertDBInitializer> weak_ptr_factory_{this};
diff --git a/chrome/browser/chromeos/usb/DIR_METADATA b/chrome/browser/chromeos/usb/DIR_METADATA new file mode 100644 index 0000000..f461eb4 --- /dev/null +++ b/chrome/browser/chromeos/usb/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "UI>Shell>Containers" +}
diff --git a/chrome/browser/chromeos/usb/OWNERS b/chrome/browser/chromeos/usb/OWNERS index c25a8fc3..dc48383c 100644 --- a/chrome/browser/chromeos/usb/OWNERS +++ b/chrome/browser/chromeos/usb/OWNERS
@@ -1,3 +1 @@ file://chrome/browser/chromeos/guest_os/OWNERS - -# COMPONENT: UI>Shell>Containers
diff --git a/chrome/browser/chromeos/web_applications/DIR_METADATA b/chrome/browser/chromeos/web_applications/DIR_METADATA new file mode 100644 index 0000000..636969cb --- /dev/null +++ b/chrome/browser/chromeos/web_applications/DIR_METADATA
@@ -0,0 +1,4 @@ +monorail: { + component: "Platform>Apps>SystemWebApps" +} +team_email: "cros-essential-apps-dev@chromium.org"
diff --git a/chrome/browser/chromeos/web_applications/OWNERS b/chrome/browser/chromeos/web_applications/OWNERS index 5418232f..3d9e3cd2 100644 --- a/chrome/browser/chromeos/web_applications/OWNERS +++ b/chrome/browser/chromeos/web_applications/OWNERS
@@ -11,6 +11,3 @@ per-file terminal_source*=calamity@chromium.org per-file terminal_source*=joelhockey@chromium.org per-file default_web_app_ids.h=jshikaram@chromium.org - -# TEAM: cros-essential-apps-dev@chromium.org -# COMPONENT: Platform>Apps>SystemWebApps
diff --git a/chrome/browser/chromeos/wilco_dtc_supportd/DIR_METADATA b/chrome/browser/chromeos/wilco_dtc_supportd/DIR_METADATA new file mode 100644 index 0000000..f37723a --- /dev/null +++ b/chrome/browser/chromeos/wilco_dtc_supportd/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "Enterprise" +}
diff --git a/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS b/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS index 6eb1eaf..d8e5be5 100644 --- a/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS +++ b/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS
@@ -5,5 +5,3 @@ emaxx@chromium.org pbond@chromium.org pmarko@chromium.org - -# COMPONENT: Enterprise
diff --git a/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java b/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java index b8fecf0..bdb77218 100644 --- a/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java +++ b/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java
@@ -186,6 +186,11 @@ void onOpenInChrome(String linkUrl, String pageUrl); /** + * Returns true if menu entries should be added for open in chrome. + */ + boolean supportsOpenInChromeFromCct(); + + /** * Called when the {@code url} should be opened in a new Chrome tab from CCT. * @param linkUrl The URL to open. * @param isIncognito true if the {@code url} should be opened in a new incognito tab.
diff --git a/chrome/browser/continuous_search/BUILD.gn b/chrome/browser/continuous_search/BUILD.gn new file mode 100644 index 0000000..a1aa236 --- /dev/null +++ b/chrome/browser/continuous_search/BUILD.gn
@@ -0,0 +1,53 @@ +# 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("//build/config/android/rules.gni") + +android_library("java") { + sources = [ "android/java/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelper.java" ] + + deps = [ + "//base:base_java", + "//chrome/browser/continuous_search/internal:java", + "//chrome/browser/flags:java", + "//chrome/browser/tab:java", + ] +} + +android_library("javatests") { + testonly = true + + sources = [ "android/javatests/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelperTest.java" ] + + deps = [ + ":java", + "//base:base_java", + "//base:base_java_test_support", + "//chrome/android:chrome_java", + "//chrome/browser/continuous_search/internal:java", + "//chrome/browser/flags:java", + "//chrome/browser/tab:java", + "//chrome/test/android:chrome_java_test_support", + "//components/embedder_support/android:util_java", + "//content/public/android:content_java", + "//content/public/test/android:content_java_test_support", + "//net/android:net_java_test_support", + "//third_party/android_deps:androidx_annotation_annotation_java", + "//third_party/android_deps:androidx_test_runner_java", + "//third_party/android_support_test_runner:runner_java", + "//third_party/junit", + "//url:gurl_java", + ] +} + +source_set("continuous_search") { + sources = [ + "features.cc", + "features.h", + ] + deps = [ + "//base", + "//chrome/browser/continuous_search/internal", + ] +}
diff --git a/chrome/browser/continuous_search/DEPS b/chrome/browser/continuous_search/DEPS new file mode 100644 index 0000000..a3e941f --- /dev/null +++ b/chrome/browser/continuous_search/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java", +]
diff --git a/chrome/browser/continuous_search/OWNERS b/chrome/browser/continuous_search/OWNERS new file mode 100644 index 0000000..f204f71 --- /dev/null +++ b/chrome/browser/continuous_search/OWNERS
@@ -0,0 +1,6 @@ +ckitagawa@chromium.org +fredmello@chromium.org +mahmoudi@chromium.org +# TEAM: TODO +# COMPONENT: TODO +# OS: Android
diff --git a/chrome/browser/continuous_search/android/java/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelper.java b/chrome/browser/continuous_search/android/java/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelper.java new file mode 100644 index 0000000..e50c77e --- /dev/null +++ b/chrome/browser/continuous_search/android/java/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelper.java
@@ -0,0 +1,30 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.base.FeatureList; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.tab.Tab; + +/** + * Bootstraps continuous search by creating appropriate observers and user data objects. + */ +public class ContinuousSearchTabHelper { + private ContinuousSearchTabHelper() {} + + /** + * Activates continuous search navigation support for a tab. + * @param tab to enable continuous search support for. + */ + public static void createForTab(Tab tab) { + if (!FeatureList.isNativeInitialized() + || !ChromeFeatureList.isEnabled(ChromeFeatureList.CONTINUOUS_SEARCH)) { + return; + } + + ContinuousSearchTabObserver observer = new ContinuousSearchTabObserver(tab); + tab.addObserver(observer); + } +}
diff --git a/chrome/browser/continuous_search/android/javatests/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelperTest.java b/chrome/browser/continuous_search/android/javatests/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelperTest.java new file mode 100644 index 0000000..de98cb9 --- /dev/null +++ b/chrome/browser/continuous_search/android/javatests/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabHelperTest.java
@@ -0,0 +1,168 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import static org.chromium.base.test.util.Batch.PER_CLASS; + +import android.os.Handler; +import android.support.test.InstrumentationRegistry; + +import androidx.test.filters.MediumTest; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.components.embedder_support.util.UrlConstants; +import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.content_public.common.ContentSwitches; +import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.url.GURL; + +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * Integration tests for the {@link ContinuousSearchTabHelper} class. + * + * To serve a https://www.google.com/search?q= URL we need to set flags so that the {@link + * EmbeddedTestServer} serves the files properly and {@link SearchUrlHelper} can work without + * being mocked. It is also necessary to ignore port numbers as only 80 and 443 are expected, but + * the {@link EmbeddedTestServer} will use any open port. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@Features.EnableFeatures({ChromeFeatureList.CONTINUOUS_SEARCH}) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "ignore-google-port-numbers", + "ignore-certificate-errors", ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) +@Batch(PER_CLASS) +public class ContinuousSearchTabHelperTest { + private static final String TEST_SERVER_DIR = "chrome/browser/continuous_search/testdata"; + private static final String TEST_URL = "/search"; + + @Rule + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + + private EmbeddedTestServer mServer; + + /** + * Fake implementation of {@link SearchResultProducer} that returns the data passed to it and no + * results. + */ + public class FakeSearchResultProducer extends SearchResultProducer { + private String mQuery; + private GURL mSearchUrl; + + FakeSearchResultProducer(Tab tab, SearchResultListener listener) { + super(tab, listener); + } + + @Override + public void fetchResults(GURL url, String query) { + mSearchUrl = url; + mQuery = query; + new Handler().postDelayed(() -> { + mListener.onResult(new SearchResultMetadata( + mSearchUrl, mQuery, 0, new ArrayList<SearchResultGroup>())); + }, 50); + } + + @Override + public void cancel() {} + } + + /** + * A {@link SearchResultUserDataObserver} used to wait on events. + */ + public class WaitableSearchResultUserDataObserver implements SearchResultUserDataObserver { + public CallbackHelper mInvalidateCallbackHelper = new CallbackHelper(); + public CallbackHelper mOnUpdateCallbackHelper = new CallbackHelper(); + public SearchResultMetadata mMetadata; + public GURL mUrl; + + @Override + public void onInvalidate() { + mInvalidateCallbackHelper.notifyCalled(); + } + + @Override + public void onUpdate(SearchResultMetadata metadata, GURL url) { + mMetadata = metadata; + mUrl = url; + mOnUpdateCallbackHelper.notifyCalled(); + } + + @Override + public void onUrlChanged(GURL url) { + mUrl = url; + } + } + + @Before + public void setUp() { + SearchResultProducerFactory.overrideFactory((Tab tab, SearchResultListener listener) -> { + return new FakeSearchResultProducer(tab, listener); + }); + mActivityTestRule.startMainActivityOnBlankPage(); + mServer = new EmbeddedTestServer(); + mServer.initializeNative(InstrumentationRegistry.getContext(), + EmbeddedTestServer.ServerHTTPSSetting.USE_HTTPS); + mServer.addDefaultHandlers(TEST_SERVER_DIR); + mServer.start(); + } + + @After + public void tearDown() { + mServer.stopAndDestroyServer(); + } + + @Test + @MediumTest + public void testContinuousSearchFakeResults() throws TimeoutException { + WaitableSearchResultUserDataObserver observer = new WaitableSearchResultUserDataObserver(); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + Tab tab = mActivityTestRule.getActivity().getActivityTab(); + SearchResultUserData searchResultUserData = + tab.getUserDataHost().getUserData(SearchResultUserData.USER_DATA_KEY); + Assert.assertNotNull(searchResultUserData); + searchResultUserData.addObserver(observer); + tab.loadUrl(new LoadUrlParams( + mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog"))); + }); + + observer.mOnUpdateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS); + Assert.assertEquals("cat dog", observer.mMetadata.getQuery()); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + Tab tab = mActivityTestRule.getActivity().getActivityTab(); + SearchResultUserData searchResultUserData = + tab.getUserDataHost().getUserData(SearchResultUserData.USER_DATA_KEY); + Assert.assertTrue(searchResultUserData.isValid()); + Assert.assertEquals( + mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog&cs=0"), + observer.mMetadata.getResultUrl().getSpec()); + Assert.assertEquals( + mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog&cs=0"), + observer.mUrl.getSpec()); + tab.loadUrl(new LoadUrlParams(UrlConstants.ABOUT_URL)); + }); + + observer.mInvalidateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS); + } +}
diff --git a/chrome/browser/continuous_search/features.cc b/chrome/browser/continuous_search/features.cc new file mode 100644 index 0000000..416b1d2e --- /dev/null +++ b/chrome/browser/continuous_search/features.cc
@@ -0,0 +1,14 @@ +// 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/continuous_search/features.h" + +namespace continuous_search { +namespace features { + +const base::Feature kContinuousSearch{"ContinuousSearch", + base::FEATURE_DISABLED_BY_DEFAULT}; + +} // namespace features +} // namespace continuous_search
diff --git a/chrome/browser/continuous_search/features.h b/chrome/browser/continuous_search/features.h new file mode 100644 index 0000000..4bffdd02 --- /dev/null +++ b/chrome/browser/continuous_search/features.h
@@ -0,0 +1,18 @@ +// 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_CONTINUOUS_SEARCH_FEATURES_H_ +#define CHROME_BROWSER_CONTINUOUS_SEARCH_FEATURES_H_ + +#include "base/feature_list.h" + +namespace continuous_search { +namespace features { + +extern const base::Feature kContinuousSearch; + +} // namespace features +} // namespace continuous_search + +#endif // CHROME_BROWSER_CONTINUOUS_SEARCH_FEATURES_H_
diff --git a/chrome/browser/continuous_search/internal/BUILD.gn b/chrome/browser/continuous_search/internal/BUILD.gn new file mode 100644 index 0000000..cf0e8c39 --- /dev/null +++ b/chrome/browser/continuous_search/internal/BUILD.gn
@@ -0,0 +1,64 @@ +# 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("//build/config/android/rules.gni") + +generate_jni("jni_headers") { + sources = [ "android/java/src/org/chromium/chrome/browser/continuous_search/SearchUrlHelper.java" ] +} + +android_library("java") { + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] + + sources = [ + "android/java/src/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabObserver.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResult.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultGroup.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultListener.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultMetadata.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducer.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducerFactory.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserData.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserDataObserver.java", + "android/java/src/org/chromium/chrome/browser/continuous_search/SearchUrlHelper.java", + ] + + deps = [ + "//base:base_java", + "//base:jni_java", + "//chrome/browser/tab:java", + "//chrome/browser/tabmodel:java", + "//third_party/android_deps:androidx_annotation_annotation_java", + "//url:gurl_java", + ] +} + +source_set("internal") { + sources = [ + "search_url_helper.cc", + "search_url_helper.h", + ] + + deps = [ + ":jni_headers", + "//base", + "//components/google/core/common", + "//url", + "//url:gurl_android", + ] +} + +source_set("unit_tests") { + testonly = true + + sources = [ "search_url_helper_unittest.cc" ] + + deps = [ + ":internal", + "//base", + "//testing/gmock", + "//testing/gtest", + "//url", + ] +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabObserver.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabObserver.java new file mode 100644 index 0000000..e81bfa11 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/ContinuousSearchTabObserver.java
@@ -0,0 +1,89 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.base.UserDataHost; +import org.chromium.chrome.browser.tab.EmptyTabObserver; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.url.GURL; + +/** + * A tab observer for watching for SRPs to read data from. + */ +public class ContinuousSearchTabObserver extends EmptyTabObserver implements SearchResultListener { + private Tab mTab; + private SearchResultProducer mProducer; + + public ContinuousSearchTabObserver(Tab tab) { + mTab = tab; + UserDataHost host = mTab.getUserDataHost(); + assert host.getUserData(SearchResultUserData.USER_DATA_KEY) == null; + SearchResultUserData searchResultUserData = new SearchResultUserData(); + host.setUserData(SearchResultUserData.USER_DATA_KEY, searchResultUserData); + } + + @Override + public void onPageLoadFinished(Tab tab, String url) { + SearchResultUserData searchResultUserData = getSearchResultUserData(); + searchResultUserData.updateCurrentUrl(new GURL(url)); + + // Cancel any existing requests. + resetProducer(); + + GURL gurl = new GURL(url); + String query = SearchUrlHelper.getQueryIfSrpUrl(gurl); + if (query == null) return; + + mProducer = SearchResultProducerFactory.create(mTab, this); + + // TODO: Remove this once mProducer is always created. + if (mProducer == null) return; + + mProducer.fetchResults(gurl, query); + } + + @Override + public void onCloseContents(Tab tab) { + resetProducer(); + getSearchResultUserData().invalidateData(); + } + + @Override + public void onDestroyed(Tab tab) { + mTab.removeObserver(this); + } + + // SearchResultListener + + @Override + public void onResult(SearchResultMetadata metadata) { + assert metadata != null; + mProducer = null; + + getSearchResultUserData().updateData(metadata, mTab.getUrl()); + } + + @Override + public void onError(int errorCode) { + // TODO: Handle errors. + mProducer = null; + } + + private SearchResultUserData getSearchResultUserData() { + UserDataHost host = mTab.getUserDataHost(); + SearchResultUserData searchResultUserData = + host.getUserData(SearchResultUserData.USER_DATA_KEY); + + assert searchResultUserData != null; + return searchResultUserData; + } + + private void resetProducer() { + if (mProducer != null) { + mProducer.cancel(); + mProducer = null; + } + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResult.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResult.java new file mode 100644 index 0000000..4d032fa --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResult.java
@@ -0,0 +1,34 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.url.GURL; + +/** + * Holds a single result from the SRP. + */ +public class SearchResult { + private GURL mUrl; + private String mTitle; + + public SearchResult(GURL url, String title) { + mUrl = url; + mTitle = title; + } + + /** + * @return url of the result. + */ + public GURL getUrl() { + return mUrl; + } + + /** + * @return title of the result. + */ + public String getTitle() { + return mTitle; + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultGroup.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultGroup.java new file mode 100644 index 0000000..9df31b5 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultGroup.java
@@ -0,0 +1,34 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import java.util.List; + +/** + * A class that holds a group of related {@link SearchResult}s. + */ +public class SearchResultGroup { + private final String mLabel; + private final boolean mIsAdGroup; + private final List<SearchResult> mResults; + + SearchResultGroup(String label, boolean isAdGroup, List<SearchResult> results) { + mLabel = label; + mIsAdGroup = isAdGroup; + mResults = results; + } + + String getLabel() { + return mLabel; + } + + boolean isAdGroup() { + return mIsAdGroup; + } + + List<SearchResult> getResults() { + return mResults; + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultListener.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultListener.java new file mode 100644 index 0000000..5670184 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultListener.java
@@ -0,0 +1,22 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +/** + * Listener for new {@link SearchResultMetadata}. + */ +public interface SearchResultListener { + /** + * Called when returning set of results. + * @param metadata The result data. + */ + void onResult(SearchResultMetadata metadata); + + /** + * Called when there is an error getting results. + * @param errorCode A code signifying what error occurred. + */ + void onError(int errorCode); +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultMetadata.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultMetadata.java new file mode 100644 index 0000000..21f16de --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultMetadata.java
@@ -0,0 +1,42 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.url.GURL; + +import java.util.List; + +/** + * A class that holds the extracted data from a SRP. + */ +public class SearchResultMetadata { + private final GURL mResultUrl; + private final String mQuery; + private final int mCategory; + private final List<SearchResultGroup> mGroups; + + SearchResultMetadata(GURL url, String query, int category, List<SearchResultGroup> groups) { + mResultUrl = url; + mQuery = query; + mCategory = category; + mGroups = groups; + } + + GURL getResultUrl() { + return mResultUrl; + } + + String getQuery() { + return mQuery; + } + + int getCategory() { + return mCategory; + } + + List<SearchResultGroup> getGroups() { + return mGroups; + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducer.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducer.java new file mode 100644 index 0000000..7f908d4 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducer.java
@@ -0,0 +1,32 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.url.GURL; + +/** + * API for implementations that produce search result data. + */ +public abstract class SearchResultProducer { + protected final Tab mTab; + protected final SearchResultListener mListener; + + SearchResultProducer(Tab tab, SearchResultListener listener) { + mTab = tab; + mListener = listener; + } + + /** + * Asynchronously fetches results. Results are returned via {@link mListener}. + * @param url The url that data should be retrieved for. + */ + abstract void fetchResults(GURL url, String query); + + /** + * Cancels the request. + */ + abstract void cancel(); +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducerFactory.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducerFactory.java new file mode 100644 index 0000000..52ef916 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultProducerFactory.java
@@ -0,0 +1,34 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.chrome.browser.tab.Tab; + +/** + * Factory for creating a {@link SearchResultProducer}. + */ +public class SearchResultProducerFactory { + private static SearchResultProducerFactoryImpl sFactoryImpl; + + /** + * Interface to allow overriding of {@link sFactoryImpl}. + */ + public interface SearchResultProducerFactoryImpl { + SearchResultProducer create(Tab tab, SearchResultListener listener); + } + + static SearchResultProducer create(Tab tab, SearchResultListener listener) { + if (sFactoryImpl == null) return null; + + return sFactoryImpl.create(tab, listener); + } + + @VisibleForTesting + static void overrideFactory(SearchResultProducerFactoryImpl factory) { + sFactoryImpl = factory; + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserData.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserData.java new file mode 100644 index 0000000..b1037d0 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserData.java
@@ -0,0 +1,96 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.base.UserData; +import org.chromium.url.GURL; + +import java.util.HashSet; + +/** + * Per-tab storage of {@link SearchResultMetadata}. + */ +public class SearchResultUserData implements UserData { + public static final int INVALID_POSITION = -2; + public static final int ON_SRP = -1; + public static final Class<SearchResultUserData> USER_DATA_KEY = SearchResultUserData.class; + + private SearchResultMetadata mData; + private HashSet<GURL> mValidUrls; + private HashSet<SearchResultUserDataObserver> mObservers = new HashSet<>(); + private GURL mCurrentUrl; + private int mCurrentPosition = INVALID_POSITION; + + /** + * @return Whether this contains valid data. + */ + boolean isValid() { + return mData != null; + } + + void addObserver(SearchResultUserDataObserver observer) { + mObservers.add(observer); + if (isValid()) { + observer.onUpdate(mData, mCurrentUrl); + } + } + + void removeObserver(SearchResultUserDataObserver observer) { + mObservers.remove(observer); + } + + void updateData(SearchResultMetadata metadata, GURL currentUrl) { + mData = metadata; + mValidUrls = new HashSet<>(); + for (int i = 0; i < mData.getGroups().size(); i++) { + SearchResultGroup group = mData.getGroups().get(i); + for (int j = 0; j < group.getResults().size(); j++) { + mValidUrls.add(group.getResults().get(j).getUrl()); + } + } + updateCurrentUrlInternal(currentUrl, false); + + for (SearchResultUserDataObserver observer : mObservers) { + observer.onUpdate(mData, mCurrentUrl); + } + } + + void invalidateData() { + mData = null; + mValidUrls = null; + mCurrentUrl = null; + for (SearchResultUserDataObserver observer : mObservers) { + observer.onInvalidate(); + } + } + + boolean isUrlInResults(GURL url) { + if (!isValid()) return false; + + return mValidUrls.contains(url); + } + + void updateCurrentUrl(GURL url) { + updateCurrentUrlInternal(url, true); + } + + private void updateCurrentUrlInternal(GURL url, boolean notify) { + if (!isValid()) return; + + mCurrentUrl = url; + boolean urlInResults = isUrlInResults(mCurrentUrl); + boolean onSrp = mCurrentUrl.equals(mData.getResultUrl()); + if (!urlInResults && !onSrp) { + invalidateData(); + return; + } + + if (!notify) return; + + for (SearchResultUserDataObserver observer : mObservers) { + observer.onUrlChanged(url); + } + } +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserDataObserver.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserDataObserver.java new file mode 100644 index 0000000..dee2d302 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultUserDataObserver.java
@@ -0,0 +1,27 @@ +// 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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.url.GURL; + +/** + * Interface for classes which need to observe a {@link SearchResultUserData}. + */ +public interface SearchResultUserDataObserver { + /** + * Called when the underlying data is no longer valid. + */ + void onInvalidate(); + + /** + * Called when the underlying data has entirely changed. + */ + void onUpdate(SearchResultMetadata metadata, GURL currentUrl); + + /** + * Called when a new page is loaded that is in the data set. + */ + void onUrlChanged(GURL currentUrl); +}
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchUrlHelper.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchUrlHelper.java new file mode 100644 index 0000000..d36ca549 --- /dev/null +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchUrlHelper.java
@@ -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. + +package org.chromium.chrome.browser.continuous_search; + +import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; +import org.chromium.url.GURL; + +/** + * Helper class for handling SRP URLs. + */ +@JNINamespace("continuous_search") +public class SearchUrlHelper { + private SearchUrlHelper() {} + + /** + * Gets the query of the provided url if it is a SRP URL. + * @param url The url to try to extract the query from. + * @return the query of the url if the url is for a SRP or null otherwise. + */ + public static String getQueryIfSrpUrl(GURL url) { + return SearchUrlHelperJni.get().getQueryIfSrpUrl(url); + } + + @NativeMethods + interface Natives { + String getQueryIfSrpUrl(GURL url); + } +}
diff --git a/chrome/browser/continuous_search/internal/search_url_helper.cc b/chrome/browser/continuous_search/internal/search_url_helper.cc new file mode 100644 index 0000000..9a9c15fa --- /dev/null +++ b/chrome/browser/continuous_search/internal/search_url_helper.cc
@@ -0,0 +1,54 @@ +// 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/continuous_search/internal/search_url_helper.h" + +#include <memory> + +#include "base/android/jni_string.h" +#include "base/strings/escape.h" +#include "base/strings/string_piece.h" +#include "chrome/browser/continuous_search/internal/jni_headers/SearchUrlHelper_jni.h" +#include "components/google/core/common/google_util.h" +#include "url/android/gurl_android.h" +#include "url/gurl.h" +#include "url/third_party/mozilla/url_parse.h" +#include "url/url_util.h" + +namespace continuous_search { + +base::android::ScopedJavaLocalRef<jstring> JNI_SearchUrlHelper_GetQueryIfSrpUrl( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& j_gurl) { + std::unique_ptr<GURL> url = url::GURLAndroid::ToNativeGURL(env, j_gurl); + if (!url->is_valid()) + return base::android::ScopedJavaLocalRef<jstring>(); + + base::Optional<std::string> query = ExtractSearchQueryIfGoogle(*url); + + return query.has_value() + ? base::android::ConvertUTF8ToJavaString(env, query.value()) + : base::android::ScopedJavaLocalRef<jstring>(); +} + +base::Optional<std::string> ExtractSearchQueryIfGoogle(const GURL& url) { + if (!google_util::IsGoogleSearchUrl(url)) + return base::nullopt; + + base::StringPiece query_str = url.query_piece(); + url::Component query(0, static_cast<int>(query_str.length())), key, value; + while (url::ExtractQueryKeyValue(query_str.data(), &query, &key, &value)) { + base::StringPiece key_str = query_str.substr(key.begin, key.len); + if (key_str == "q") { + base::StringPiece value_str = query_str.substr(value.begin, value.len); + return base::UnescapeURLComponent( + value_str, + base::UnescapeRule::REPLACE_PLUS_WITH_SPACE | + base::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS); + } + } + return base::nullopt; +} + +} // namespace continuous_search
diff --git a/chrome/browser/continuous_search/internal/search_url_helper.h b/chrome/browser/continuous_search/internal/search_url_helper.h new file mode 100644 index 0000000..eccc2228 --- /dev/null +++ b/chrome/browser/continuous_search/internal/search_url_helper.h
@@ -0,0 +1,18 @@ +// 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_CONTINUOUS_SEARCH_INTERNAL_SEARCH_URL_HELPER_H_ +#define CHROME_BROWSER_CONTINUOUS_SEARCH_INTERNAL_SEARCH_URL_HELPER_H_ + +#include "base/optional.h" +#include "base/strings/string16.h" +#include "url/gurl.h" + +namespace continuous_search { + +base::Optional<std::string> ExtractSearchQueryIfGoogle(const GURL& url); + +} // namespace continuous_search + +#endif // CHROME_BROWSER_CONTINUOUS_SEARCH_INTERNAL_SEARCH_URL_HELPER_H_
diff --git a/chrome/browser/continuous_search/internal/search_url_helper_unittest.cc b/chrome/browser/continuous_search/internal/search_url_helper_unittest.cc new file mode 100644 index 0000000..5f7f0c2 --- /dev/null +++ b/chrome/browser/continuous_search/internal/search_url_helper_unittest.cc
@@ -0,0 +1,47 @@ +// 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/continuous_search/internal/search_url_helper.h" + +#include "base/optional.h" +#include "base/strings/strcat.h" +#include "base/strings/string16.h" +#include "base/strings/utf_string_conversions.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace continuous_search { + +namespace { + +constexpr char kSrpUrl[] = "https://www.google.com/search"; + +} + +TEST(SearchUrlHelper, ExtractSrpUrlWithEscape) { + auto result = ExtractSearchQueryIfGoogle( + GURL(base::StrCat({kSrpUrl, R"(?q=foo%5Ebar%25baz)"}))); + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(result.value(), R"(foo^bar%baz)"); +} + +TEST(SearchUrlHelper, ExtractSrpUrlWithSpace) { + auto result = + ExtractSearchQueryIfGoogle(GURL(base::StrCat({kSrpUrl, "?q=cat+dog"}))); + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(result.value(), "cat dog"); +} + +TEST(SearchUrlHelper, ExtractSrpUrlNoQuery) { + EXPECT_FALSE( + ExtractSearchQueryIfGoogle(GURL(base::StrCat({kSrpUrl, "?foo=bar"}))) + .has_value()); +} + +TEST(SearchUrlHelper, NoExtractOtherUrl) { + EXPECT_FALSE( + ExtractSearchQueryIfGoogle(GURL("https://www.example.com/")).has_value()); +} + +} // namespace continuous_search
diff --git a/chrome/browser/continuous_search/testdata/search b/chrome/browser/continuous_search/testdata/search new file mode 100644 index 0000000..c17086c --- /dev/null +++ b/chrome/browser/continuous_search/testdata/search
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> + +<head> +<title>About</title> +</head> + +<body> + Hello, World! +</body> + +</html>
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc index 5255681..9455b2f 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.cc +++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -783,6 +783,14 @@ #if defined(OS_ANDROID) DownloadUtils::OpenDownload(download, DownloadOpenSource::kUnknown); #else + + download::DownloadItemRenameHandler* handler = download->GetRenameHandler(); + if (handler) { + handler->OpenDownload(); + RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_RENAME_HANDLER); + return; + } + if (!DownloadItemModel(download).ShouldPreferOpeningInBrowser()) { RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_DEFAULT_PLATFORM); OpenDownloadUsingPlatformHandler(download); @@ -796,7 +804,8 @@ std::unique_ptr<chrome::ScopedTabbedBrowserDisplayer> browser_displayer; if (!browser || !browser->CanSupportWindowFeature(Browser::FEATURE_TABSTRIP)) { - browser_displayer.reset(new chrome::ScopedTabbedBrowserDisplayer(profile_)); + browser_displayer = + std::make_unique<chrome::ScopedTabbedBrowserDisplayer>(profile_); browser = browser_displayer->browser(); } content::OpenURLParams params( @@ -849,6 +858,12 @@ MaybeSendDangerousDownloadOpenedReport(download, true /* show_download_in_folder */); + download::DownloadItemRenameHandler* handler = download->GetRenameHandler(); + if (handler) { + handler->ShowDownloadInContext(); + return; + } + base::FilePath platform_path( GetPlatformDownloadPath(profile_, download, PLATFORM_CURRENT_PATH)); DCHECK(!platform_path.empty());
diff --git a/chrome/browser/download/download_stats.h b/chrome/browser/download/download_stats.h index 3ecf1783..05623d2 100644 --- a/chrome/browser/download/download_stats.h +++ b/chrome/browser/download/download_stats.h
@@ -68,6 +68,9 @@ // the preferred method was to open the download using the browser. DOWNLOAD_OPEN_METHOD_USER_PLATFORM, + // The download was opened using a rename handler. + DOWNLOAD_OPEN_METHOD_RENAME_HANDLER, + DOWNLOAD_OPEN_METHOD_LAST_ENTRY };
diff --git a/chrome/browser/extensions/api/declarative_net_request/action_tracker_unittest.cc b/chrome/browser/extensions/api/declarative_net_request/action_tracker_unittest.cc index 52a6745..8b7e21cd 100644 --- a/chrome/browser/extensions/api/declarative_net_request/action_tracker_unittest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/action_tracker_unittest.cc
@@ -38,6 +38,10 @@ void SetUp() override { DNRTestBase::SetUp(); action_tracker_ = std::make_unique<ActionTracker>(browser_context()); + + // Do not check whether tab IDs correspond to valid tabs in this test as + // this is a unit test and no actual tabs will be created. + action_tracker_->SetCheckTabIdOnRuleMatchForTest(false); } protected:
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc index bf90bae..ccc0f2a9 100644 --- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
@@ -1260,31 +1260,39 @@ Enable_Disable_Reload_Uninstall) { set_config_flags(ConfigFlag::kConfig_HasBackgroundScript); - // Block all main frame requests to "index.html". + // Block all main frame requests to "static.example". TestRule rule = CreateGenericRule(); - rule.condition->url_filter = std::string("index.html"); + rule.condition->url_filter = std::string("static.example"); rule.condition->resource_types = std::vector<std::string>({"main_frame"}); ASSERT_NO_FATAL_FAILURE(LoadExtensionWithRules({rule})); const ExtensionId extension_id = last_loaded_extension_id(); - // Add dynamic rule to block requests to "page.html". - rule.condition->url_filter = std::string("page.html"); + // Add dynamic rule to block requests to "dynamic.example". + rule.condition->url_filter = std::string("dynamic.example"); ASSERT_NO_FATAL_FAILURE(AddDynamicRules(extension_id, {rule})); - GURL static_rule_url = embedded_test_server()->GetURL( - "example.com", "/pages_with_script/index.html"); - GURL dynamic_rule_url = embedded_test_server()->GetURL( - "example.com", "/pages_with_script/page.html"); + // Add session-scoped rule to block requests to "session.example". + rule.condition->url_filter = std::string("session.example"); + ASSERT_NO_FATAL_FAILURE(UpdateSessionRules(extension_id, {}, {rule})); + + constexpr char kUrlPath[] = "/pages_with_script/index.html"; + GURL static_rule_url = + embedded_test_server()->GetURL("static.example", kUrlPath); + GURL dynamic_rule_url = + embedded_test_server()->GetURL("dynamic.example", kUrlPath); + GURL session_rule_url = + embedded_test_server()->GetURL("session.example", kUrlPath); auto test_extension_enabled = [&](bool expected_enabled) { EXPECT_EQ(expected_enabled, ExtensionRegistry::Get(profile())->enabled_extensions().Contains( extension_id)); - // If the extension is enabled, both the |static_rule_url| and - // |dynamic_rule_url| should be blocked. + // Ensure the various registered rules work correctly if the extension is + // enabled. EXPECT_EQ(expected_enabled, IsNavigationBlocked(static_rule_url)); EXPECT_EQ(expected_enabled, IsNavigationBlocked(dynamic_rule_url)); + EXPECT_EQ(expected_enabled, IsNavigationBlocked(session_rule_url)); }; { @@ -1783,16 +1791,20 @@ rule.condition->url_filter = std::string("session.com"); ASSERT_NO_FATAL_FAILURE(UpdateSessionRules(extension_id, {}, {rule})); + CompositeMatcher* composite_matcher = + ruleset_manager()->GetMatcherForExtension(extension_id); + ASSERT_TRUE(composite_matcher); + EXPECT_THAT( + GetPublicRulesetIDs(*last_loaded_extension(), *composite_matcher), + UnorderedElementsAre(kDefaultRulesetID, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID)); + EXPECT_TRUE(IsNavigationBlocked(embedded_test_server()->GetURL( "static.com", "/pages_with_script/index.html"))); EXPECT_TRUE(IsNavigationBlocked(embedded_test_server()->GetURL( "dynamic.com", "/pages_with_script/index.html"))); - - // TODO(crbug.com/1043200): This should be true once we start evaluating - // session scoped rules. - EXPECT_FALSE(IsNavigationBlocked(embedded_test_server()->GetURL( + EXPECT_TRUE(IsNavigationBlocked(embedded_test_server()->GetURL( "session.com", "/pages_with_script/index.html"))); - EXPECT_FALSE(IsNavigationBlocked(embedded_test_server()->GetURL( "unmatched.com", "/pages_with_script/index.html"))); }
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_unittest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_unittest.cc index 7adc343..9c919a3 100644 --- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_unittest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_unittest.cc
@@ -999,8 +999,11 @@ // Tests updateSessionRules and getSessionRules extension function calls. TEST_P(SingleRulesetTest, SessionRules) { - // Load an extension with no static rulesets. + // Load an extension with an empty static ruleset. + RulesetManagerObserver ruleset_waiter(manager()); LoadAndExpectSuccess(); + ruleset_waiter.WaitForExtensionsWithRulesetsCount(1); + VerifyPublicRulesetIDs(*extension(), {kDefaultRulesetID}); base::ListValue result; RunGetRulesFunction(*extension(), RulesetScope::kSession, &result); @@ -1017,6 +1020,8 @@ ::testing::UnorderedElementsAre( ::testing::Eq(std::cref(*rule_1.ToValue())), ::testing::Eq(std::cref(*rule_2.ToValue())))); + VerifyPublicRulesetIDs(*extension(), + {kDefaultRulesetID, dnr_api::SESSION_RULESET_ID}); // No dynamic rules should be returned. RunGetRulesFunction(*extension(), RulesetScope::kDynamic, &result); @@ -1027,7 +1032,6 @@ RunGetRulesFunction(*extension(), RulesetScope::kSession, &result); EXPECT_THAT(result.GetList(), ::testing::UnorderedElementsAre(::testing::Eq( std::cref(*rule_1.ToValue())))); - RunGetRulesFunction(*extension(), RulesetScope::kDynamic, &result); EXPECT_TRUE(result.empty()); } @@ -1508,6 +1512,25 @@ ErrorUtils::FormatErrorMessage(kInvalidRulesetIDError, kInvalidRulesetId)); VerifyPublicRulesetIDs(*extension(), {kId1, kId3}); + + // Ensure we can't enable/disable dynamic or session-scoped rulesets using + // updateEnabledRulesets. + ASSERT_TRUE(RunUpdateRulesFunction(*extension(), {}, {CreateGenericRule()}, + RulesetScope::kDynamic)); + ASSERT_TRUE(RunUpdateRulesFunction(*extension(), {}, {CreateGenericRule()}, + RulesetScope::kSession)); + VerifyPublicRulesetIDs(*extension(), {kId1, kId3, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID}); + RunUpdateEnabledRulesetsFunction( + *extension(), {}, {kId2, dnr_api::DYNAMIC_RULESET_ID}, + ErrorUtils::FormatErrorMessage(kInvalidRulesetIDError, + dnr_api::DYNAMIC_RULESET_ID)); + RunUpdateEnabledRulesetsFunction( + *extension(), {kId1, dnr_api::SESSION_RULESET_ID}, {}, + ErrorUtils::FormatErrorMessage(kInvalidRulesetIDError, + dnr_api::SESSION_RULESET_ID)); + VerifyPublicRulesetIDs(*extension(), {kId1, kId3, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID}); } TEST_P(MultipleRulesetsTest, UpdateEnabledRulesets_RuleCountExceeded) { @@ -1620,20 +1643,23 @@ VerifyPublicRulesetIDs(*extension(), {kId2, kId3}); VerifyGetEnabledRulesetsFunction(*extension(), {kId2, kId3}); - // Add dynamic rules and ensure that the setEnabledRulesets call doesn't have - // any effect on the dynamic ruleset. Also ensure that the getEnabledRulesets - // call excludes the dynamic ruleset ID. + // Add dynamic and session-scoped rules and ensure that the setEnabledRulesets + // call doesn't have any effect on their associated rulesets. Also ensure that + // the getEnabledRulesets call excludes these rulesets. ASSERT_TRUE(RunUpdateRulesFunction(*extension(), {}, {CreateGenericRule()}, RulesetScope::kDynamic)); - VerifyPublicRulesetIDs(*extension(), - {kId2, kId3, dnr_api::DYNAMIC_RULESET_ID}); + ASSERT_TRUE(RunUpdateRulesFunction(*extension(), {}, {CreateGenericRule()}, + RulesetScope::kSession)); + VerifyPublicRulesetIDs(*extension(), {kId2, kId3, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID}); VerifyGetEnabledRulesetsFunction(*extension(), {kId2, kId3}); // Ensure enabling a ruleset takes priority over disabling. RunUpdateEnabledRulesetsFunction(*extension(), {kId1}, {kId1}, base::nullopt /* expected_error */); VerifyPublicRulesetIDs(*extension(), - {kId1, kId2, kId3, dnr_api::DYNAMIC_RULESET_ID}); + {kId1, kId2, kId3, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID}); VerifyGetEnabledRulesetsFunction(*extension(), {kId1, kId2, kId3}); // Ensure the set of enabled rulesets persists across extension reloads. @@ -1648,7 +1674,8 @@ registry()->GetExtensionById(extension_id, ExtensionRegistry::ENABLED); ASSERT_TRUE(extension); VerifyPublicRulesetIDs(*extension, - {kId1, kId2, kId3, dnr_api::DYNAMIC_RULESET_ID}); + {kId1, kId2, kId3, dnr_api::DYNAMIC_RULESET_ID, + dnr_api::SESSION_RULESET_ID}); VerifyGetEnabledRulesetsFunction(*extension, {kId1, kId2, kId3}); }
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc index 3fcee4c..2c0f3ed 100644 --- a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc +++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
@@ -247,11 +247,6 @@ SavedPasswordsPresenter& presenter() { return presenter_; } PasswordCheckDelegate& delegate() { return delegate_; } - void DisableWellKnownChangePasswordFeatureFlag() { - scoped_feature_list_.InitAndDisableFeature( - password_manager::features::kWellKnownChangePassword); - } - private: content::BrowserTaskEnvironment task_env_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; @@ -1143,8 +1138,7 @@ RunUntilIdle(); } -TEST_F(PasswordCheckDelegateTest, - WellKnownChangePasswordUrlFeatureFlag_enabled) { +TEST_F(PasswordCheckDelegateTest, WellKnownChangePasswordUrl) { store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); store().AddCompromisedCredentials( MakeCompromised(kExampleCom, kUsername1, base::TimeDelta::FromMinutes(1), @@ -1157,8 +1151,7 @@ password_manager::kWellKnownChangePasswordPath); } -TEST_F(PasswordCheckDelegateTest, - WellKnownChangePasswordUrlFeatureFlagEnabled_androidrealm) { +TEST_F(PasswordCheckDelegateTest, WellKnownChangePasswordUrl_androidrealm) { store().AddLogin( MakeSavedAndroidPassword(kExampleApp, kUsername1, "", kExampleCom)); store().AddCompromisedCredentials( @@ -1180,34 +1173,4 @@ password_manager::kWellKnownChangePasswordPath); } -TEST_F(PasswordCheckDelegateTest, - WellKnownChangePasswordUrlFeatureFlagDisabled_androidrealm) { - DisableWellKnownChangePasswordFeatureFlag(); - - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername2, - "Example App", kExampleCom)); - store().AddCompromisedCredentials( - MakeCompromised(MakeAndroidRealm(kExampleApp), kUsername2, - base::TimeDelta::FromDays(3), CompromiseType::kPhished)); - - RunUntilIdle(); - EXPECT_EQ(*delegate().GetCompromisedCredentials().at(0).change_password_url, - kExampleCom); -} - -TEST_F(PasswordCheckDelegateTest, - WellKnownChangePasswordUrlFeatureFlag_disabled) { - DisableWellKnownChangePasswordFeatureFlag(); - - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddCompromisedCredentials( - MakeCompromised(kExampleCom, kUsername1, base::TimeDelta::FromMinutes(1), - CompromiseType::kLeaked)); - RunUntilIdle(); - GURL change_password_url( - *delegate().GetCompromisedCredentials().at(0).change_password_url); - EXPECT_NE(change_password_url.path(), - password_manager::kWellKnownChangePasswordPath); -} - } // namespace extensions
diff --git a/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc b/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc index 8480552..2a624978 100644 --- a/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc +++ b/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc
@@ -32,6 +32,7 @@ #include "components/tab_groups/tab_group_color.h" #include "components/tab_groups/tab_group_id.h" #include "components/tab_groups/tab_group_visual_data.h" +#include "ui/gfx/range/range.h" namespace extensions { @@ -237,8 +238,10 @@ } TabStripModel* source_tab_strip = source_browser->tab_strip_model(); - std::vector<int> tabs = + gfx::Range tabs = source_tab_strip->group_model()->GetTabGroup(*group)->ListTabs(); + if (tabs.length() == 0) + return false; if (window_id) { Browser* target_browser = nullptr; @@ -278,11 +281,11 @@ target_tab_strip->group_model()->AddTabGroup(*group, *visual_data); - for (size_t i = 0; i < tabs.size(); ++i) { + for (size_t i = 0; i < tabs.length(); ++i) { // Detach tabs from the same index each time, since each detached tab is // removed from the model, and groups are always contiguous. std::unique_ptr<content::WebContents> web_contents = - source_tab_strip->DetachWebContentsAt(tabs.front()); + source_tab_strip->DetachWebContentsAt(tabs.start()); // Attach tabs in consecutive indices, to insert them in the same order. target_tab_strip->InsertWebContentsAt(new_index + i, @@ -298,9 +301,9 @@ // When moving to the right, adjust the target index for the size of the // group, since the group itself may occupy several indices to the right. - const int start_index = tabs.front(); + const int start_index = tabs.start(); if (new_index > start_index) - new_index += tabs.size() - 1; + new_index += tabs.length() - 1; // Unlike when moving between windows, IndexSupportsGroupMove should be called // before clamping the index to count()-1 instead of after. Since the current
diff --git a/chrome/browser/extensions/api/tabs/tabs_test.cc b/chrome/browser/extensions/api/tabs/tabs_test.cc index 0a4596e0..d9129c34 100644 --- a/chrome/browser/extensions/api/tabs/tabs_test.cc +++ b/chrome/browser/extensions/api/tabs/tabs_test.cc
@@ -70,7 +70,6 @@ #include "ui/views/widget/widget_observer.h" #if defined(OS_MAC) -#include "base/mac/mac_util.h" #include "ui/base/test/scoped_fake_nswindow_fullscreen.h" #endif @@ -1043,8 +1042,6 @@ #endif IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, MAYBE_AcceptState) { #if defined(OS_MAC) - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; #endif
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index cb1de861a..bfc0736 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -653,6 +653,11 @@ "expiry_milestone": 88 }, { + "name": "continuous-search", + "owners": [ "//chrome/browser/continuous_search/OWNERS" ], + "expiry_milestone": 92 + }, + { "name": "conversion-measurement-api", "owners": [ "//content/browser/conversions/OWNERS" ], "expiry_milestone": 90 @@ -974,6 +979,11 @@ "expiry_milestone": -1 }, { + "name": "disable-virtual-keyboard", + "owners": [ "myy", "essential-inputs-team@google.com" ], + "expiry_milestone": 92 + }, + { "name": "disable-webrtc-hw-decoding", "owners": [ "hiroh", "chromeos-video-eng@google.com" ], // This flag does not expire because it allows users to disable HW video @@ -4960,11 +4970,6 @@ "expiry_milestone": -1 }, { - "name": "well-known-change-password", - "owners": ["jdoerrie", "vasilii"], - "expiry_milestone": 90 - }, - { "name": "wifi-sync-android", "owners": [ "jonmann", "cvandermerwe@google.com", "cros-system-services@google.com" ], "expiry_milestone": 92
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index baa98ab..016f1fa 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1377,9 +1377,6 @@ "Enable logging JS console messages in system logs, please note that they " "may contain PII."; -const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure"; -const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages"; - const char kMediaHistoryName[] = "Enable Media History"; const char kMediaHistoryDescription[] = "Enables Media History which records data around media playbacks on " @@ -2556,16 +2553,6 @@ const char kWebXrMultiGpuDescription[] = "Improves WebXR support for computers with more than one GPU."; -const char kWellKnownChangePasswordName[] = - "Support for .well-known/change-password"; - -const char kWellKnownChangePasswordDescription[] = - "If enabled the 'change password' button in password checkup redirects to " - "the .well-known/change-password path. The path is supposed to point to " - "the password change form of the site. When the site doesn't support " - ".well-known/change-password it is checked if a fallback url is available. " - "Otherwise the user is redirected to the origin."; - const char kWindowNamingName[] = "Window Naming"; const char kWindowNamingDescription[] = "Whether the window naming UI is enabled."; @@ -2685,6 +2672,11 @@ "Enables specify target language the page should be translated to " "in Chrome Custom Tabs."; +const char kContinuousSearchName[] = "Continuous Search Navigation"; +const char kContinuousSearchDescription[] = + "Enables caching of search results to permit a more seamless search " + "experience."; + const char kChromeShareHighlightsAndroidName[] = "Chrome Share text highlights on Android"; const char kChromeShareHighlightsAndroidDescription[] = @@ -4628,6 +4620,11 @@ const char kVirtualKeyboardBorderedKeyDescription[] = "Show virtual keyboard with bordered key"; +const char kVirtualKeyboardDisabledName[] = "Disable Virtual Keyboard"; +const char kVirtualKeyboardDisabledDescription[] = + "Always disable virtual keyboard regardless of device mode. Workaround for " + "virtual keyboard showing with some external keyboards."; + const char kVirtualKeyboardName[] = "Virtual Keyboard"; const char kVirtualKeyboardDescription[] = "Always show virtual keyboard regardless of having a physical keyboard "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 5114370e..0d653a2 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -814,12 +814,6 @@ extern const char kLogJsConsoleMessagesName[]; extern const char kLogJsConsoleMessagesDescription[]; -extern const char kMarkHttpAsName[]; -extern const char kMarkHttpAsDescription[]; -extern const char kMarkHttpAsDangerous[]; -extern const char kMarkHttpAsWarning[]; -extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[]; - extern const char kMediaHistoryName[]; extern const char kMediaHistoryDescription[]; @@ -1485,9 +1479,6 @@ extern const char kWebXrMultiGpuName[]; extern const char kWebXrMultiGpuDescription[]; -extern const char kWellKnownChangePasswordName[]; -extern const char kWellKnownChangePasswordDescription[]; - extern const char kWindowNamingName[]; extern const char kWindowNamingDescription[]; @@ -1564,6 +1555,9 @@ extern const char kCCTTargetTranslateLanguageName[]; extern const char kCCTTargetTranslateLanguageDescription[]; +extern const char kContinuousSearchName[]; +extern const char kContinuousSearchDescription[]; + extern const char kShareButtonInTopToolbarName[]; extern const char kShareButtonInTopToolbarDescription[]; @@ -2705,6 +2699,9 @@ extern const char kVirtualKeyboardBorderedKeyName[]; extern const char kVirtualKeyboardBorderedKeyDescription[]; +extern const char kVirtualKeyboardDisabledName[]; +extern const char kVirtualKeyboardDisabledDescription[]; + extern const char kVirtualKeyboardName[]; extern const char kVirtualKeyboardDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 06a3595..d51a5b0 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -12,6 +12,7 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "base/stl_util.h" +#include "chrome/browser/continuous_search/features.h" #include "chrome/browser/flags/jni_headers/ChromeFeatureList_jni.h" #include "chrome/browser/notifications/chime/android/features.h" #include "chrome/browser/performance_hints/performance_hints_features.h" @@ -83,6 +84,7 @@ &autofill_assistant::features::kAutofillAssistantProactiveHelp, &autofill_assistant::features:: kAutofillAssistantDisableProactiveHelpTiedToMSBB, + &continuous_search::features::kContinuousSearch, &device::kWebAuthPhoneSupport, &download::features::kDownloadAutoResumptionNative, &download::features::kDownloadLater, @@ -284,7 +286,6 @@ &reading_list::switches::kReadLater, &safe_browsing::kEnhancedProtection, &safe_browsing::kSafeBrowsingSectionUIAndroid, - &security_state::features::kMarkHttpAsFeature, &signin::kMobileIdentityConsistency, &signin::kMobileIdentityConsistencyVar, &switches::kDecoupleSyncFromAndroidMasterSync,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index ac13ef8..ae2742f 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -280,6 +280,7 @@ public static final String CONTEXTUAL_SEARCH_TAP_DISABLE_OVERRIDE = "ContextualSearchTapDisableOverride"; public static final String CONTEXTUAL_SEARCH_TRANSLATIONS = "ContextualSearchTranslations"; + public static final String CONTINUOUS_SEARCH = "ContinuousSearch"; public static final String COOKIES_WITHOUT_SAME_SITE_MUST_BE_SECURE = "CookiesWithoutSameSiteMustBeSecure"; public static final String CRITICAL_PERSISTED_TAB_DATA = "CriticalPersistedTabData";
diff --git a/chrome/browser/incognito/interstitial/android/java/res/layout/incognito_interstitial_bottom_sheet_view.xml b/chrome/browser/incognito/interstitial/android/java/res/layout/incognito_interstitial_bottom_sheet_view.xml index c0307059..c91807cbc 100644 --- a/chrome/browser/incognito/interstitial/android/java/res/layout/incognito_interstitial_bottom_sheet_view.xml +++ b/chrome/browser/incognito/interstitial/android/java/res/layout/incognito_interstitial_bottom_sheet_view.xml
@@ -19,6 +19,7 @@ app:srcCompat="@drawable/ic_incognito_filled_24dp" /> <TextView + android:id="@+id/incognito_interstitial_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"
diff --git a/chrome/browser/lifetime/browser_close_manager.cc b/chrome/browser/lifetime/browser_close_manager.cc index 845abd9..6f09ad48 100644 --- a/chrome/browser/lifetime/browser_close_manager.cc +++ b/chrome/browser/lifetime/browser_close_manager.cc
@@ -74,8 +74,8 @@ // this will trigger TryToCloseBrowsers to try again. for (auto* browser : *BrowserList::GetInstance()) { if (browser->TryToCloseWindow( - false, - base::Bind(&BrowserCloseManager::OnBrowserReportCloseable, this))) { + false, base::BindRepeating( + &BrowserCloseManager::OnBrowserReportCloseable, this))) { current_browser_ = browser; return; } @@ -109,17 +109,18 @@ ConfirmCloseWithPendingDownloads( download_count, - base::Bind(&BrowserCloseManager::OnReportDownloadsCancellable, this)); + base::BindOnce(&BrowserCloseManager::OnReportDownloadsCancellable, this)); #endif } void BrowserCloseManager::ConfirmCloseWithPendingDownloads( int download_count, - const base::Callback<void(bool)>& callback) { + base::OnceCallback<void(bool)> callback) { Browser* browser = BrowserList::GetInstance()->GetLastActive(); DCHECK(browser); browser->window()->ConfirmBrowserCloseWithPendingDownloads( - download_count, Browser::DownloadCloseType::kBrowserShutdown, callback); + download_count, Browser::DownloadCloseType::kBrowserShutdown, + std::move(callback)); } void BrowserCloseManager::OnReportDownloadsCancellable(bool proceed) {
diff --git a/chrome/browser/lifetime/browser_close_manager.h b/chrome/browser/lifetime/browser_close_manager.h index 6cec9fd..93ab0fb 100644 --- a/chrome/browser/lifetime/browser_close_manager.h +++ b/chrome/browser/lifetime/browser_close_manager.h
@@ -27,7 +27,7 @@ virtual void ConfirmCloseWithPendingDownloads( int download_count, - const base::Callback<void(bool)>& callback); + base::OnceCallback<void(bool)> callback); private: // Notifies all browser windows that the close is cancelled.
diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc index 8ff4be0..6a199dc0 100644 --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
@@ -178,16 +178,16 @@ void ConfirmCloseWithPendingDownloads( int download_count, - const base::Callback<void(bool)>& callback) override { + base::OnceCallback<void(bool)> callback) override { EXPECT_NE(NO_USER_CHOICE, user_choice_); switch (user_choice_) { case NO_USER_CHOICE: case USER_CHOICE_USER_CANCELS_CLOSE: { - callback.Run(false); + std::move(callback).Run(false); break; } case USER_CHOICE_USER_ALLOWS_CLOSE: { - callback.Run(true); + std::move(callback).Run(true); break; } }
diff --git a/chrome/browser/metrics/power_metrics_provider_mac.mm b/chrome/browser/metrics/power_metrics_provider_mac.mm index 56b4e1b8..2f69eaa 100644 --- a/chrome/browser/metrics/power_metrics_provider_mac.mm +++ b/chrome/browser/metrics/power_metrics_provider_mac.mm
@@ -200,8 +200,7 @@ kMaxValue = kCritical, }; -ThermalStateUMA ThermalStateToUmaEnumValue(NSProcessInfoThermalState state) - API_AVAILABLE(macos(10.10.3)) { +ThermalStateUMA ThermalStateToUmaEnumValue(NSProcessInfoThermalState state) { switch (state) { case NSProcessInfoThermalStateNominal: return ThermalStateUMA::kNominal; @@ -405,10 +404,7 @@ RecordSMC("All"); RecordIsOnBattery(); power_drain_calculator_.RecordBatteryDischarge(); - - if (@available(macOS 10.10.3, *)) { - RecordThermal(); - } + RecordThermal(); } } @@ -438,7 +434,7 @@ UMA_HISTOGRAM_BOOLEAN("Power.Mac.IsOnBattery2", is_on_battery); } - void RecordThermal() API_AVAILABLE(macos(10.10.3)) { + void RecordThermal() { UMA_HISTOGRAM_ENUMERATION( "Power.Mac.ThermalState", ThermalStateToUmaEnumValue([[NSProcessInfo processInfo] thermalState]));
diff --git a/chrome/browser/native_file_system/origin_scoped_native_file_system_permission_context.cc b/chrome/browser/native_file_system/origin_scoped_native_file_system_permission_context.cc index 6774b57..ab20121 100644 --- a/chrome/browser/native_file_system/origin_scoped_native_file_system_permission_context.cc +++ b/chrome/browser/native_file_system/origin_scoped_native_file_system_permission_context.cc
@@ -233,6 +233,7 @@ std::move(callback), PermissionRequestOutcome::kUserDismissed); break; case PermissionAction::REVOKED: + case PermissionAction::GRANTED_ONCE: case PermissionAction::NUM: NOTREACHED(); break;
diff --git a/chrome/browser/nearby_sharing/webrtc_request_builder.cc b/chrome/browser/nearby_sharing/webrtc_request_builder.cc index bd50a23f..9fb26e0 100644 --- a/chrome/browser/nearby_sharing/webrtc_request_builder.cc +++ b/chrome/browser/nearby_sharing/webrtc_request_builder.cc
@@ -15,30 +15,45 @@ constexpr int kMinorVersion = 24; constexpr int kPointVersion = 0; +using LocationStandard_Format = + chrome_browser_nearby_sharing_instantmessaging::LocationStandard_Format; + +LocationStandard_Format ToProto(sharing::mojom::LocationStandardFormat format) { + switch (format) { + case sharing::mojom::LocationStandardFormat::E164_CALLING: + return LocationStandard_Format::LocationStandard_Format_E164_CALLING; + case sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2: + return LocationStandard_Format:: + LocationStandard_Format_ISO_3166_1_ALPHA_2; + } +} + void BuildLocationHint( - chrome_browser_nearby_sharing_instantmessaging::LocationHint* - location_hint) { - location_hint->set_location(base::CountryCodeForCurrentTimezone()); - location_hint->set_format(chrome_browser_nearby_sharing_instantmessaging:: - LocationStandard_Format_ISO_3166_1_ALPHA_2); + chrome_browser_nearby_sharing_instantmessaging::LocationHint* location_hint, + sharing::mojom::LocationHintPtr location_hint_ptr) { + location_hint->set_location(location_hint_ptr->location); + location_hint->set_format(ToProto(location_hint_ptr->format)); } void BuildId(chrome_browser_nearby_sharing_instantmessaging::Id* req_id, - const std::string& id) { + const std::string& id, + sharing::mojom::LocationHintPtr location_hint) { DCHECK(req_id); req_id->set_id(id); req_id->set_app(kAppName); req_id->set_type( chrome_browser_nearby_sharing_instantmessaging::IdType::NEARBY_ID); - BuildLocationHint(req_id->mutable_location_hint()); + BuildLocationHint(req_id->mutable_location_hint(), std::move(location_hint)); } void BuildHeader( chrome_browser_nearby_sharing_instantmessaging::RequestHeader* header, - const std::string& requester_id) { + const std::string& requester_id, + sharing::mojom::LocationHintPtr location_hint) { DCHECK(header); header->set_app(kAppName); - BuildId(header->mutable_requester_id(), requester_id); + BuildId(header->mutable_requester_id(), requester_id, + std::move(location_hint)); chrome_browser_nearby_sharing_instantmessaging::ClientInfo* info = header->mutable_client_info(); info->set_api_version( @@ -53,18 +68,21 @@ } // namespace chrome_browser_nearby_sharing_instantmessaging::SendMessageExpressRequest -BuildSendRequest(const std::string& self_id, const std::string& peer_id) { +BuildSendRequest(const std::string& self_id, + const std::string& peer_id, + sharing::mojom::LocationHintPtr location_hint) { chrome_browser_nearby_sharing_instantmessaging::SendMessageExpressRequest request; - BuildId(request.mutable_dest_id(), peer_id); - BuildHeader(request.mutable_header(), self_id); + BuildId(request.mutable_dest_id(), peer_id, location_hint->Clone()); + BuildHeader(request.mutable_header(), self_id, location_hint->Clone()); return request; } chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesExpressRequest -BuildReceiveRequest(const std::string& self_id) { +BuildReceiveRequest(const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint) { chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesExpressRequest request; - BuildHeader(request.mutable_header(), self_id); + BuildHeader(request.mutable_header(), self_id, std::move(location_hint)); return request; }
diff --git a/chrome/browser/nearby_sharing/webrtc_request_builder.h b/chrome/browser/nearby_sharing/webrtc_request_builder.h index 4e3bf3a1..90decc7f 100644 --- a/chrome/browser/nearby_sharing/webrtc_request_builder.h +++ b/chrome/browser/nearby_sharing/webrtc_request_builder.h
@@ -6,6 +6,7 @@ #define CHROME_BROWSER_NEARBY_SHARING_WEBRTC_REQUEST_BUILDER_H_ #include <string> +#include "chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom.h" namespace chrome_browser_nearby_sharing_instantmessaging { @@ -15,9 +16,12 @@ } // namespace chrome_browser_nearby_sharing_instantmessaging chrome_browser_nearby_sharing_instantmessaging::SendMessageExpressRequest -BuildSendRequest(const std::string& self_id, const std::string& peer_id); +BuildSendRequest(const std::string& self_id, + const std::string& peer_id, + sharing::mojom::LocationHintPtr hint); chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesExpressRequest -BuildReceiveRequest(const std::string& self_id); +BuildReceiveRequest(const std::string& self_id, + sharing::mojom::LocationHintPtr hint); #endif // CHROME_BROWSER_NEARBY_SHARING_WEBRTC_REQUEST_BUILDER_H_
diff --git a/chrome/browser/nearby_sharing/webrtc_request_builder_unittest.cc b/chrome/browser/nearby_sharing/webrtc_request_builder_unittest.cc index 8781204..7dc561c9 100644 --- a/chrome/browser/nearby_sharing/webrtc_request_builder_unittest.cc +++ b/chrome/browser/nearby_sharing/webrtc_request_builder_unittest.cc
@@ -6,6 +6,8 @@ #include "base/i18n/timezone.h" #include "chrome/browser/nearby_sharing/instantmessaging/proto/instantmessaging.pb.h" +#include "chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom-shared.h" +#include "chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/icu/source/i18n/unicode/timezone.h" @@ -23,27 +25,49 @@ icu::TimeZone::createTimeZone("America/Los_Angeles")); } + sharing::mojom::LocationHintPtr CountryCodeLocationHint( + const std::string& country_code) { + sharing::mojom::LocationHintPtr location_hint_ptr = + sharing::mojom::LocationHint::New(); + location_hint_ptr->location = country_code; + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2; + return location_hint_ptr; + } + + sharing::mojom::LocationHintPtr CallingCodeLocationHint( + const std::string& calling_code) { + sharing::mojom::LocationHintPtr location_hint_ptr = + sharing::mojom::LocationHint::New(); + location_hint_ptr->location = calling_code; + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::E164_CALLING; + return location_hint_ptr; + } + void VerifyLocationHint( + sharing::mojom::LocationHintPtr expected_location_hint, chrome_browser_nearby_sharing_instantmessaging::Id id) { - EXPECT_EQ(chrome_browser_nearby_sharing_instantmessaging:: - LocationStandard_Format_ISO_3166_1_ALPHA_2, - id.location_hint().format()); - EXPECT_EQ("US", id.location_hint().location()); + EXPECT_EQ(static_cast<int>(expected_location_hint->format), + static_cast<int>(id.location_hint().format())); + EXPECT_EQ(expected_location_hint->location, id.location_hint().location()); } }; TEST_F(WebRtcRequestBuilderTest, BuildSendRequest) { + sharing::mojom::LocationHintPtr location_hint = CountryCodeLocationHint("ZZ"); chrome_browser_nearby_sharing_instantmessaging::SendMessageExpressRequest - request = BuildSendRequest(kSelfId, kPeerId); + request = BuildSendRequest(kSelfId, kPeerId, location_hint.Clone()); EXPECT_EQ(kSelfId, request.header().requester_id().id()); EXPECT_EQ(kPeerId, request.dest_id().id()); - VerifyLocationHint(request.dest_id()); - VerifyLocationHint(request.header().requester_id()); + VerifyLocationHint(location_hint.Clone(), request.dest_id()); + VerifyLocationHint(location_hint.Clone(), request.header().requester_id()); } TEST_F(WebRtcRequestBuilderTest, BuildReceiveRequest) { + sharing::mojom::LocationHintPtr location_hint = CallingCodeLocationHint("+1"); chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesExpressRequest - request = BuildReceiveRequest(kSelfId); + request = BuildReceiveRequest(kSelfId, location_hint.Clone()); EXPECT_EQ(kSelfId, request.header().requester_id().id()); - VerifyLocationHint(request.header().requester_id()); + VerifyLocationHint(location_hint.Clone(), request.header().requester_id()); }
diff --git a/chrome/browser/nearby_sharing/webrtc_signaling_messenger.cc b/chrome/browser/nearby_sharing/webrtc_signaling_messenger.cc index 4047c531..52526163 100644 --- a/chrome/browser/nearby_sharing/webrtc_signaling_messenger.cc +++ b/chrome/browser/nearby_sharing/webrtc_signaling_messenger.cc
@@ -7,6 +7,7 @@ #include "base/callback_helpers.h" #include "base/token.h" #include "chrome/browser/nearby_sharing/instantmessaging/proto/instantmessaging.pb.h" +#include "chrome/browser/nearby_sharing/logging/logging.h" #include "chrome/browser/nearby_sharing/webrtc_request_builder.h" WebRtcSignalingMessenger::WebRtcSignalingMessenger( @@ -18,12 +19,20 @@ WebRtcSignalingMessenger::~WebRtcSignalingMessenger() = default; -void WebRtcSignalingMessenger::SendMessage(const std::string& self_id, - const std::string& peer_id, - const std::string& message, - SendMessageCallback callback) { +void WebRtcSignalingMessenger::SendMessage( + const std::string& self_id, + const std::string& peer_id, + sharing::mojom::LocationHintPtr location_hint, + const std::string& message, + SendMessageCallback callback) { + NS_LOG(VERBOSE) << __func__ << ": self_id=" << self_id + << ", peer_id=" << peer_id + << ", location hint=" << location_hint->location + << ", location format=" << location_hint->format + << ", message size=" << message.size(); + chrome_browser_nearby_sharing_instantmessaging::SendMessageExpressRequest - request = BuildSendRequest(self_id, peer_id); + request = BuildSendRequest(self_id, peer_id, std::move(location_hint)); chrome_browser_nearby_sharing_instantmessaging::InboxMessage* inbox_message = request.mutable_message(); @@ -39,11 +48,16 @@ void WebRtcSignalingMessenger::StartReceivingMessages( const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> incoming_messages_listener, StartReceivingMessagesCallback callback) { + NS_LOG(INFO) << __func__ << ": self_id=" << self_id + << ", location hint=" << location_hint->location + << ", location format=" << location_hint->format; + chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesExpressRequest - request = BuildReceiveRequest(self_id); + request = BuildReceiveRequest(self_id, std::move(location_hint)); incoming_messages_listener_.reset(); incoming_messages_listener_.Bind(std::move(incoming_messages_listener)); @@ -58,6 +72,7 @@ } void WebRtcSignalingMessenger::StopReceivingMessages() { + NS_LOG(VERBOSE) << __func__; incoming_messages_listener_.reset(); receive_messages_express_.StopReceivingMessages(); } @@ -65,15 +80,21 @@ void WebRtcSignalingMessenger::OnStartedReceivingMessages( StartReceivingMessagesCallback callback, bool success) { - if (!success) + if (success) { + NS_LOG(VERBOSE) << __func__ << ": started receiving messages successfully"; + } else { + NS_LOG(ERROR) << __func__ << ": failed to start receiving messages"; incoming_messages_listener_.reset(); + } std::move(callback).Run(success); } void WebRtcSignalingMessenger::OnMessageReceived(const std::string& message) { - if (!incoming_messages_listener_) + if (!incoming_messages_listener_) { + NS_LOG(WARNING) << __func__ << ": no listener available to receive message"; return; + } incoming_messages_listener_->OnMessage(message); }
diff --git a/chrome/browser/nearby_sharing/webrtc_signaling_messenger.h b/chrome/browser/nearby_sharing/webrtc_signaling_messenger.h index f6f935e..f63e9f3 100644 --- a/chrome/browser/nearby_sharing/webrtc_signaling_messenger.h +++ b/chrome/browser/nearby_sharing/webrtc_signaling_messenger.h
@@ -26,10 +26,12 @@ // sharing::mojom::WebRtcSignalingMessenger: void SendMessage(const std::string& self_id, const std::string& peer_id, + sharing::mojom::LocationHintPtr location_hint, const std::string& message, SendMessageCallback callback) override; void StartReceivingMessages( const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> incoming_messages_listener, StartReceivingMessagesCallback callback) override;
diff --git a/chrome/browser/nearby_sharing/webrtc_signaling_messenger_unittest.cc b/chrome/browser/nearby_sharing/webrtc_signaling_messenger_unittest.cc index c8c82ca..3ed11dd 100644 --- a/chrome/browser/nearby_sharing/webrtc_signaling_messenger_unittest.cc +++ b/chrome/browser/nearby_sharing/webrtc_signaling_messenger_unittest.cc
@@ -23,6 +23,7 @@ const char kSelfId[] = "self_id"; const char kOAuthToken[] = "oauth_token"; const char kTestAccount[] = "test@test.test"; +const char kCountryCode[] = "ZZ"; chrome_browser_nearby_sharing_instantmessaging::ReceiveMessagesResponse CreateReceiveMessagesResponse(const std::string& msg) { @@ -87,6 +88,16 @@ return test_url_loader_factory_; } + sharing::mojom::LocationHintPtr CountryCodeLocationHint( + std::string country_code) { + sharing::mojom::LocationHintPtr location_hint_ptr = + sharing::mojom::LocationHint::New(); + location_hint_ptr->location = country_code; + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2; + return location_hint_ptr; + } + // Required to ensure that the listener has received all messages before we // can continue with our tests. void RunUntilIdle() { task_environment_.RunUntilIdle(); } @@ -100,7 +111,8 @@ TEST_F(WebRtcSignalingMessengerTest, UnsuccessfulSendMessage_EmptyToken) { base::RunLoop loop; - GetMessenger().SendMessage(kSelfId, "peer_id", "message", + GetMessenger().SendMessage(kSelfId, "peer_id", + CountryCodeLocationHint(kCountryCode), "message", base::BindLambdaForTesting([&](bool success) { EXPECT_FALSE(success); loop.Quit(); @@ -111,7 +123,8 @@ TEST_F(WebRtcSignalingMessengerTest, UnsuccessfulSendMessage_HttpError) { base::RunLoop loop; - GetMessenger().SendMessage(kSelfId, "peer_id", "message", + GetMessenger().SendMessage(kSelfId, "peer_id", + CountryCodeLocationHint(kCountryCode), "message", base::BindLambdaForTesting([&](bool success) { EXPECT_FALSE(success); loop.Quit(); @@ -128,7 +141,8 @@ TEST_F(WebRtcSignalingMessengerTest, SuccessfulSendMessage) { base::RunLoop loop; - GetMessenger().SendMessage(kSelfId, "peer_id", "message", + GetMessenger().SendMessage(kSelfId, "peer_id", + CountryCodeLocationHint(kCountryCode), "message", base::BindLambdaForTesting([&](bool success) { EXPECT_TRUE(success); loop.Quit(); @@ -150,7 +164,8 @@ base::RunLoop loop; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_FALSE(success); loop.Quit(); @@ -166,7 +181,8 @@ base::RunLoop loop; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_FALSE(success); loop.Quit(); @@ -191,7 +207,8 @@ base::RunLoop loop; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_TRUE(success); loop.Quit(); @@ -220,7 +237,8 @@ base::RunLoop loop_1; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver_1.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver_1.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_TRUE(success); loop_1.Quit(); @@ -240,7 +258,8 @@ base::RunLoop loop_2; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver_2.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver_2.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_TRUE(success); loop_2.Quit(); @@ -268,7 +287,8 @@ base::RunLoop loop; GetMessenger().StartReceivingMessages( - kSelfId, mojo_receiver.BindNewPipeAndPassRemote(), + kSelfId, CountryCodeLocationHint(kCountryCode), + mojo_receiver.BindNewPipeAndPassRemote(), base::BindLambdaForTesting([&](bool success) { EXPECT_TRUE(success); loop.Quit();
diff --git a/chrome/browser/net/private_network_request_browsertest.cc b/chrome/browser/net/private_network_request_browsertest.cc index 8300019..89f0776 100644 --- a/chrome/browser/net/private_network_request_browsertest.cc +++ b/chrome/browser/net/private_network_request_browsertest.cc
@@ -27,17 +27,45 @@ using testing::IsEmpty; using testing::Pair; -constexpr char kTreatAsPublicAddressPath[] = "/treat-as-public-address.html"; +// We use a custom page that explicitly disables its own favicon (by providing +// an invalid data: URL for it) so as to prevent the browser from making an +// automatic request to /favicon.ico. This is because the automatic request +// messes with our tests, in which we want to trigger a single request from the +// web page to a resource of our choice and observe the side-effect in metrics. +constexpr char kNoFaviconPath[] = "/no-favicon.html"; -GURL PublicSecureURL(const net::EmbeddedTestServer& server) { +// Same as kNoFaviconPath, except it carries a header that makes the browser +// consider it came from the `public` address space, irrespective of the fact +// that we loaded the web page from localhost. +constexpr char kTreatAsPublicAddressPath[] = + "/no-favicon-treat-as-public-address.html"; + +GURL SecureURL(const net::EmbeddedTestServer& server, const std::string& path) { // Test HTTPS servers cannot lie about their hostname, so they yield URLs // starting with https://localhost. http://localhost is already a secure // context, so we do not bother instantiating an HTTPS server. - return server.GetURL(kTreatAsPublicAddressPath); + return server.GetURL(path); +} + +GURL NonSecureURL(const net::EmbeddedTestServer& server, + const std::string& path) { + return server.GetURL("foo.test", path); +} + +GURL LocalSecureURL(const net::EmbeddedTestServer& server) { + return SecureURL(server, kNoFaviconPath); +} + +GURL LocalNonSecureURL(const net::EmbeddedTestServer& server) { + return NonSecureURL(server, kNoFaviconPath); +} + +GURL PublicSecureURL(const net::EmbeddedTestServer& server) { + return SecureURL(server, kTreatAsPublicAddressPath); } GURL PublicNonSecureURL(const net::EmbeddedTestServer& server) { - return server.GetURL("foo.test", kTreatAsPublicAddressPath); + return NonSecureURL(server, kTreatAsPublicAddressPath); } constexpr WebFeature kAllAddressSpaceFeatures[] = { @@ -135,8 +163,7 @@ std::unique_ptr<net::EmbeddedTestServer> server = NewServer(); EXPECT_TRUE(content::NavigateToURL(web_contents(), PublicSecureURL(*server))); - EXPECT_TRUE(content::NavigateToURL(web_contents(), - server->GetURL("/defaultresponse"))); + EXPECT_TRUE(content::NavigateToURL(web_contents(), LocalSecureURL(*server))); EXPECT_TRUE(NavigateAndFlushHistograms()); EXPECT_THAT(GetAddressSpaceFeatureBucketCounts(histogram_tester), IsEmpty()); @@ -152,8 +179,8 @@ std::unique_ptr<net::EmbeddedTestServer> server = NewServer(); EXPECT_TRUE(content::NavigateToURL(web_contents(), PublicSecureURL(*server))); - EXPECT_TRUE(content::ExecJs(web_contents(), R"( - fetch("defaultresponse") + EXPECT_EQ(true, content::EvalJs(web_contents(), R"( + fetch("defaultresponse").then(response => response.ok) )")); EXPECT_TRUE(NavigateAndFlushHistograms()); @@ -174,8 +201,8 @@ EXPECT_TRUE( content::NavigateToURL(web_contents(), PublicNonSecureURL(*server))); - EXPECT_TRUE(content::ExecJs(web_contents(), R"( - fetch("defaultresponse") + EXPECT_EQ(true, content::EvalJs(web_contents(), R"( + fetch("defaultresponse").then(response => response.ok) )")); EXPECT_TRUE(NavigateAndFlushHistograms()); @@ -219,14 +246,18 @@ EXPECT_TRUE( content::NavigateToURL(web_contents(), PublicNonSecureURL(*server))); - EXPECT_TRUE(content::ExecJs(web_contents(), R"( + + base::StringPiece script_template = R"( new Promise(resolve => { const child = document.createElement("iframe"); - child.src = "defaultresponse"; + child.src = $1; child.onload = resolve; document.body.appendChild(child); }) - )")); + )"; + EXPECT_TRUE(content::ExecJs( + web_contents(), + content::JsReplace(script_template, LocalNonSecureURL(*server)))); EXPECT_TRUE(NavigateAndFlushHistograms()); // TODO(https://crbug.com/1129326): Expect InPublicNonSecureContext? @@ -247,7 +278,8 @@ EXPECT_TRUE( content::NavigateToURL(web_contents(), PublicNonSecureURL(*server))); - EXPECT_TRUE(content::ExecJs(web_contents(), R"( + + base::StringPiece script_template = R"( function addChildFrame(doc, src) { return new Promise(resolve => { const child = doc.createElement("iframe"); @@ -258,8 +290,11 @@ } addChildFrame(document, "about:blank") - .then(child => addChildFrame(child.contentDocument, "defaultresponse")) - )")); + .then(child => addChildFrame(child.contentDocument, $1)) + )"; + EXPECT_TRUE(content::ExecJs( + web_contents(), + content::JsReplace(script_template, LocalNonSecureURL(*server)))); EXPECT_TRUE(NavigateAndFlushHistograms()); // TODO(https://crbug.com/1129326): Expect InPublicNonSecureContext?
diff --git a/chrome/browser/permissions/permission_manager_factory.cc b/chrome/browser/permissions/permission_manager_factory.cc index f09b93a..84074108 100644 --- a/chrome/browser/permissions/permission_manager_factory.cc +++ b/chrome/browser/permissions/permission_manager_factory.cc
@@ -37,9 +37,6 @@ #include "components/permissions/permission_manager.h" #include "ppapi/buildflags/buildflags.h" -#if BUILDFLAG(ENABLE_PLUGINS) -#include "chrome/browser/plugins/flash_permission_context.h" -#endif #if defined(OS_ANDROID) || defined(OS_CHROMEOS) #include "chrome/browser/media/protected_media_identifier_permission_context.h" @@ -91,10 +88,6 @@ profile, ContentSettingsType::MEDIASTREAM_CAMERA); permission_contexts[ContentSettingsType::BACKGROUND_SYNC] = std::make_unique<BackgroundSyncPermissionContext>(profile); -#if BUILDFLAG(ENABLE_PLUGINS) - permission_contexts[ContentSettingsType::PLUGINS] = - std::make_unique<FlashPermissionContext>(profile); -#endif permission_contexts[ContentSettingsType::SENSORS] = std::make_unique<SensorPermissionContext>(profile); permission_contexts[ContentSettingsType::ACCESSIBILITY_EVENTS] =
diff --git a/chrome/browser/plugins/chrome_plugin_service_filter.cc b/chrome/browser/plugins/chrome_plugin_service_filter.cc index e0437a2..c2bd9b8 100644 --- a/chrome/browser/plugins/chrome_plugin_service_filter.cc +++ b/chrome/browser/plugins/chrome_plugin_service_filter.cc
@@ -166,35 +166,6 @@ if (!context_info->plugin_prefs.get()->IsPluginEnabled(*plugin)) return false; - // Do additional checks for Flash. - if (plugin->name == base::ASCIIToUTF16(content::kFlashPluginName)) { - // Check the content setting first, and always respect the ALLOW or BLOCK - // state. When IsPluginAvailable() is called to check whether a plugin - // should be advertised, |url| has the same origin as |main_frame_origin|. - // The intended behavior is that Flash is advertised only if a Flash embed - // hosted on the same origin as the main frame origin is allowed to run. - bool is_managed = false; - HostContentSettingsMap* settings_map = - context_info_it->second->host_content_settings_map.get(); - ContentSetting flash_setting = PluginUtils::GetFlashPluginContentSetting( - settings_map, main_frame_origin, plugin_content_url, &is_managed); - - if (flash_setting == CONTENT_SETTING_ALLOW) - return true; - - if (flash_setting == CONTENT_SETTING_BLOCK) - return false; - - // If the content setting is being managed by enterprise policy and is an - // ASK setting, we check to see if it has been temporarily granted. - if (is_managed) { - return context_info_it->second->permission_tracker->IsFlashEnabled( - main_frame_origin.GetURL()); - } - - return false; - } - return true; }
diff --git a/chrome/browser/plugins/chrome_plugin_service_filter_unittest.cc b/chrome/browser/plugins/chrome_plugin_service_filter_unittest.cc index dda7b0f..14f17ac7 100644 --- a/chrome/browser/plugins/chrome_plugin_service_filter_unittest.cc +++ b/chrome/browser/plugins/chrome_plugin_service_filter_unittest.cc
@@ -67,92 +67,3 @@ ChromePluginServiceFilter* filter_; base::FilePath flash_plugin_path_; }; - -TEST_F(ChromePluginServiceFilterTest, PreferHtmlOverPluginsDefault) { - content::WebPluginInfo flash_plugin( - base::ASCIIToUTF16(content::kFlashPluginName), flash_plugin_path_, - base::ASCIIToUTF16("1"), base::ASCIIToUTF16("The Flash plugin.")); - - // The default content setting should block Flash. - GURL url("http://www.google.com"); - url::Origin main_frame_origin = url::Origin::Create(url); - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // Block plugins. - HostContentSettingsMap* map = - HostContentSettingsMapFactory::GetForProfile(profile()); - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - CONTENT_SETTING_BLOCK); - - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // Allow plugins. - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - CONTENT_SETTING_ALLOW); - - EXPECT_TRUE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // Detect important content should block plugins without user gesture. - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - - CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); - - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); -} - -TEST_F(ChromePluginServiceFilterTest, - PreferHtmlOverPluginsAllowOrBlockOverrides) { - content::WebPluginInfo flash_plugin( - base::ASCIIToUTF16(content::kFlashPluginName), flash_plugin_path_, - base::ASCIIToUTF16("1"), base::ASCIIToUTF16("The Flash plugin.")); - - GURL url("http://www.google.com"); - url::Origin main_frame_origin = url::Origin::Create(url); - - // Allow plugins. - HostContentSettingsMap* map = - HostContentSettingsMapFactory::GetForProfile(profile()); - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - CONTENT_SETTING_ALLOW); - EXPECT_TRUE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // Plugins should be hidden on ASK mode. - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - - CONTENT_SETTING_DETECT_IMPORTANT_CONTENT); - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // Block plugins. - map->SetContentSettingDefaultScope(url, url, ContentSettingsType::PLUGINS, - CONTENT_SETTING_BLOCK); - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); -} - -TEST_F(ChromePluginServiceFilterTest, - PreferHtmlOverPluginsIncognitoHasIndependentSetting) { - Profile* incognito = profile()->GetPrimaryOTRProfile(); - filter_->RegisterProfile(incognito); - - content::WebPluginInfo flash_plugin( - base::ASCIIToUTF16(content::kFlashPluginName), flash_plugin_path_, - base::ASCIIToUTF16("1"), base::ASCIIToUTF16("The Flash plugin.")); - - GURL url("http://www.google.com"); - - // Allow plugins for this url in the incognito profile. - HostContentSettingsMap* incognito_map = - HostContentSettingsMapFactory::GetForProfile(incognito); - incognito_map->SetContentSettingDefaultScope( - url, url, ContentSettingsType::PLUGINS, CONTENT_SETTING_ALLOW); - - // We pass the availablity check in incognito. - url::Origin main_frame_origin = url::Origin::Create(url); - SetContents( - content::WebContentsTester::CreateTestWebContents(incognito, nullptr)); - EXPECT_TRUE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); - - // But the original profile still fails the availability check. - SetContents( - content::WebContentsTester::CreateTestWebContents(profile(), nullptr)); - EXPECT_FALSE(IsPluginAvailable(url, main_frame_origin, flash_plugin)); -}
diff --git a/chrome/browser/plugins/flash_permission_context.cc b/chrome/browser/plugins/flash_permission_context.cc deleted file mode 100644 index 88f6782..0000000 --- a/chrome/browser/plugins/flash_permission_context.cc +++ /dev/null
@@ -1,109 +0,0 @@ -// Copyright 2016 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/plugins/flash_permission_context.h" - -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/plugins/flash_temporary_permission_tracker.h" -#include "chrome/browser/plugins/plugin_utils.h" -#include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/content_settings/core/common/content_settings_pattern.h" -#include "components/permissions/permission_request_id.h" -#include "content/public/browser/navigation_controller.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/web_contents.h" -#include "url/origin.h" - -namespace { - -bool PluginsEnterpriseSettingEnabled( - HostContentSettingsMap* host_content_settings_map) { - std::string provider_id; - host_content_settings_map->GetDefaultContentSetting( - ContentSettingsType::PLUGINS, &provider_id); - return HostContentSettingsMap::GetProviderTypeFromSource(provider_id) == - HostContentSettingsMap::POLICY_PROVIDER; -} - -} // namespace - -FlashPermissionContext::FlashPermissionContext( - content::BrowserContext* browser_context) - : PermissionContextBase(browser_context, - ContentSettingsType::PLUGINS, - blink::mojom::FeaturePolicyFeature::kNotFound) {} - -FlashPermissionContext::~FlashPermissionContext() {} - -ContentSetting FlashPermissionContext::GetPermissionStatusInternal( - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - const GURL& embedding_origin) const { - HostContentSettingsMap* host_content_settings_map = - HostContentSettingsMapFactory::GetForProfile(browser_context()); - ContentSetting flash_setting = PluginUtils::GetFlashPluginContentSetting( - host_content_settings_map, url::Origin::Create(embedding_origin), - requesting_origin, nullptr); - if (flash_setting == CONTENT_SETTING_DETECT_IMPORTANT_CONTENT) - return CONTENT_SETTING_ASK; - return flash_setting; -} - -void FlashPermissionContext::UpdateTabContext( - const permissions::PermissionRequestID& id, - const GURL& requesting_origin, - bool allowed) { - if (!allowed) - return; - - content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost( - content::RenderFrameHost::FromID(id.render_process_id(), - id.render_frame_id())); - if (!web_contents) - return; - - if (PluginsEnterpriseSettingEnabled( - HostContentSettingsMapFactory::GetForProfile(browser_context()))) { - // Enable the grant temporarily. - FlashTemporaryPermissionTracker::Get(browser_context()) - ->FlashEnabledForWebContents(web_contents); - } - - // Automatically refresh the page. - web_contents->GetController().Reload(content::ReloadType::NORMAL, true); -} - -void FlashPermissionContext::UpdateContentSetting( - const GURL& requesting_origin, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time) { - DCHECK(!is_one_time); - DCHECK_EQ(requesting_origin, requesting_origin.GetOrigin()); - DCHECK_EQ(embedding_origin, embedding_origin.GetOrigin()); - DCHECK(content_setting == CONTENT_SETTING_ALLOW || - content_setting == CONTENT_SETTING_BLOCK); - - HostContentSettingsMap* host_content_settings_map = - HostContentSettingsMapFactory::GetForProfile(browser_context()); - // If there is an enterprise ASK setting in effect, don't store the setting as - // it won't have any effect anyway. - if (PluginsEnterpriseSettingEnabled(host_content_settings_map)) - return; - - // If the request was for a file scheme, allow or deny all file:/// URLs. - ContentSettingsPattern pattern; - if (embedding_origin.SchemeIsFile()) - pattern = ContentSettingsPattern::FromString("file:///*"); - else - pattern = ContentSettingsPattern::FromURLNoWildcard(embedding_origin); - host_content_settings_map->SetContentSettingCustomScope( - pattern, ContentSettingsPattern::Wildcard(), content_settings_type(), - content_setting); -} - -bool FlashPermissionContext::IsRestrictedToSecureOrigins() const { - return false; -}
diff --git a/chrome/browser/plugins/flash_permission_context.h b/chrome/browser/plugins/flash_permission_context.h deleted file mode 100644 index 3ccc794..0000000 --- a/chrome/browser/plugins/flash_permission_context.h +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2016 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_PLUGINS_FLASH_PERMISSION_CONTEXT_H_ -#define CHROME_BROWSER_PLUGINS_FLASH_PERMISSION_CONTEXT_H_ - -#include "base/macros.h" -#include "components/permissions/permission_context_base.h" - -class GURL; - -namespace permissions { -class PermissionRequestID; -} - -class FlashPermissionContext : public permissions::PermissionContextBase { - public: - explicit FlashPermissionContext(content::BrowserContext* browser_context); - ~FlashPermissionContext() override; - - private: - // PermissionContextBase: - ContentSetting GetPermissionStatusInternal( - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - const GURL& embedding_origin) const override; - void UpdateTabContext(const permissions::PermissionRequestID& id, - const GURL& requesting_origin, - bool allowed) override; - void UpdateContentSetting(const GURL& requesting_origin, - const GURL& embedding_origin, - ContentSetting content_setting, - bool is_one_time) override; - bool IsRestrictedToSecureOrigins() const override; - - DISALLOW_COPY_AND_ASSIGN(FlashPermissionContext); -}; - -#endif // CHROME_BROWSER_PLUGINS_FLASH_PERMISSION_CONTEXT_H_
diff --git a/chrome/browser/plugins/plugin_utils.cc b/chrome/browser/plugins/plugin_utils.cc index c78907c1..610c1c6 100644 --- a/chrome/browser/plugins/plugin_utils.cc +++ b/chrome/browser/plugins/plugin_utils.cc
@@ -136,24 +136,6 @@ } // static -ContentSetting PluginUtils::UnsafeGetRawDefaultFlashContentSetting( - const HostContentSettingsMap* host_content_settings_map, - bool* is_managed) { - std::string provider_id; - ContentSetting plugin_setting = - host_content_settings_map->GetDefaultContentSetting( - ContentSettingsType::PLUGINS, &provider_id); - - if (is_managed) { - *is_managed = HostContentSettingsMap::GetProviderTypeFromSource( - provider_id) == HostContentSettingsMap::POLICY_PROVIDER; - } - - return plugin_setting; -} - - -// static std::string PluginUtils::GetExtensionIdForMimeType( content::BrowserContext* browser_context, const std::string& mime_type) {
diff --git a/chrome/browser/plugins/plugin_utils.h b/chrome/browser/plugins/plugin_utils.h index 84d487ca..b461873 100644 --- a/chrome/browser/plugins/plugin_utils.h +++ b/chrome/browser/plugins/plugin_utils.h
@@ -45,14 +45,6 @@ const GURL& plugin_url, bool* is_managed); - // Returns the raw default content setting for Flash. This should not be used - // to actually run Flash, as it bypasses the origin scheme filter, legacy - // guardrails, and plugin-specific content settings. Hence "unsafe". - // It's used only for displaying Flash deprecation advisories. - static ContentSetting UnsafeGetRawDefaultFlashContentSetting( - const HostContentSettingsMap* host_content_settings_map, - bool* is_managed); - // If there's an extension that is allowed to handle |mime_type|, returns its // ID. Otherwise returns an empty string. static std::string GetExtensionIdForMimeType(
diff --git a/chrome/browser/resources/bookmarks/dnd_manager.js b/chrome/browser/resources/bookmarks/dnd_manager.js index 30fbdbb..d6dbdd38 100644 --- a/chrome/browser/resources/bookmarks/dnd_manager.js +++ b/chrome/browser/resources/bookmarks/dnd_manager.js
@@ -44,32 +44,6 @@ } /** - * @param {?Element} element - * @return {?Element} - */ -function getPreviousElementSibling(element) { - if (isBookmarkItem(element)) { - // Need to get previous element cousin. - const parentSibling = element.parentElement.previousElementSibling; - return parentSibling ? parentSibling.querySelector('bookmarks-item') : null; - } - return element.previousElementSibling; -} - -/** - * @param {?Element} element - * @return {?Element} - */ -function getNextElementSibling(element) { - if (isBookmarkItem(element)) { - // Need to get next element cousin. - const parentSibling = element.parentElement.nextElementSibling; - return parentSibling ? parentSibling.querySelector('bookmarks-item') : null; - } - return element.nextElementSibling; -} - -/** * @param {Element} element * @return {boolean} */ @@ -754,7 +728,7 @@ let validDropPositions = DropPosition.NONE; // Cannot drop above if the item above is already in the drag source. - const previousElem = getPreviousElementSibling(overElement); + const previousElem = overElement.previousElementSibling; if (!previousElem || !dragInfo.isDraggingBookmark(previousElem.itemId)) { validDropPositions |= DropPosition.ABOVE; } @@ -766,7 +740,7 @@ return validDropPositions; } - const nextElement = getNextElementSibling(overElement); + const nextElement = overElement.nextElementSibling; // Cannot drop below if the item below is already in the drag source. if (!nextElement || !dragInfo.isDraggingBookmark(nextElement.itemId)) { validDropPositions |= DropPosition.BELOW;
diff --git a/chrome/browser/resources/bookmarks/item.html b/chrome/browser/resources/bookmarks/item.html index 557afae..5f3e5504 100644 --- a/chrome/browser/resources/bookmarks/item.html +++ b/chrome/browser/resources/bookmarks/item.html
@@ -28,6 +28,12 @@ } </if> + #website-text { + display: flex; + flex: 1; + overflow: hidden; + } + #website-title { color: var(--cr-primary-text-color); flex: 1; @@ -89,17 +95,21 @@ } </style> <div id="icon"></div> -<div id="website-title" class="elided-text" title="[[item_.title]]"> - [[item_.title]] +<div id="website-text" role="gridcell"> + <div id="website-title" class="elided-text" title="[[item_.title]]"> + [[item_.title]] + </div> + <div id="website-url" class="elided-text" title="[[item_.url]]"> + [[item_.url]] + </div> </div> -<div id="website-url" class="elided-text" title="[[item_.url]]"> - [[item_.url]] -</div> -<cr-icon-button class="icon-more-vert" - id="menuButton" - tabindex="[[ironListTabIndex]]" - title="$i18n{moreActionsButtonTitle}" - aria-label$="[[getButtonAriaLabel_(item_, isSelectedItem_, - isMultiSelect_)]]" - on-click="onMenuButtonClick_" - aria-haspopup="menu"></cr-icon-button> +<div role="gridcell"> + <cr-icon-button class="icon-more-vert" + id="menuButton" + tabindex="[[ironListTabIndex]]" + title="$i18n{moreActionsButtonTitle}" + aria-label$="[[getButtonAriaLabel_(item_, isSelectedItem_, + isMultiSelect_)]]" + on-click="onMenuButtonClick_" + aria-haspopup="menu"></cr-icon-button> +</div> \ No newline at end of file
diff --git a/chrome/browser/resources/bookmarks/list.html b/chrome/browser/resources/bookmarks/list.html index 37642ab..caec017 100644 --- a/chrome/browser/resources/bookmarks/list.html +++ b/chrome/browser/resources/bookmarks/list.html
@@ -40,17 +40,19 @@ items="[[displayedList_]]" hidden$="[[isEmptyList_(displayedList_.length)]]" role="grid" - aria-label="$i18n{listAxLabel}"> + aria-label="$i18n{listAxLabel}" + aria-multiselectable="true"> <template> - <div role="row" id$="bookmark_[[index]]" - aria-rowindex$="[[getAriaRowindex_(index)]]"> - <bookmarks-item item-id="[[item.id]]" - draggable="true" - role="gridcell" - tabindex$="[[tabIndex]]" - iron-list-tab-index="[[tabIndex]]"> - </bookmarks-item> - </div> + <bookmarks-item + id="bookmark_[[index]]" + item-id="[[item.id]]" + draggable="true" + role="row" + tabindex$="[[tabIndex]]" + iron-list-tab-index="[[tabIndex]]" + aria-rowindex$="[[getAriaRowindex_(index)]]" + aria-selected="[[getAriaSelected_(item.id, selectedItems_)]]"> + </bookmarks-item> </template> </iron-list> <div id="message" class="centered-message"
diff --git a/chrome/browser/resources/bookmarks/list.js b/chrome/browser/resources/bookmarks/list.js index 5e8b5c47..eadf8e9 100644 --- a/chrome/browser/resources/bookmarks/list.js +++ b/chrome/browser/resources/bookmarks/list.js
@@ -355,4 +355,12 @@ getAriaRowindex_(index) { return index + 1; }, + + /** + * @param {string} id + * @return {boolean} + */ + getAriaSelected_(id) { + return this.selectedItems_.has(id); + }, });
diff --git a/chrome/browser/resources/chromeos/add_supervision/post_message_api.js b/chrome/browser/resources/chromeos/add_supervision/post_message_api.js index be45dcc..a4867bae 100644 --- a/chrome/browser/resources/chromeos/add_supervision/post_message_api.js +++ b/chrome/browser/resources/chromeos/add_supervision/post_message_api.js
@@ -103,7 +103,7 @@ */ initialize() { if (this.isInitialized_ || - !this.originMatchesFilter_(this.clientElement_.src)) { + !this.originMatchesFilter(this.clientElement_.src)) { return; } @@ -148,11 +148,10 @@ /** * Determines if the specified origin matches the origin filter. - * @private * @param {!string} origin The origin URL to match with the filter. * @return {boolean} whether the specified origin matches the filter. */ - originMatchesFilter_(origin) { + originMatchesFilter(origin) { const originURL = new URL(origin); // We allow the pathname portion of the URL to be a prefix filter, @@ -168,7 +167,7 @@ * @param {Event} event The postMessage event to handle. */ onMessage_(event) { - if (!this.originMatchesFilter_(event.origin)) { + if (!this.originMatchesFilter(event.origin)) { console.log('Message received from unauthorized origin: ' + event.origin); return; } @@ -292,7 +291,7 @@ * sent from the server. */ onInitialize_(event) { - if (!this.originMatchesFilter_(event.origin)) { + if (!this.originMatchesFilter(event.origin)) { console.error( 'Initialization event received from non-authorized origin: ' + event.origin); @@ -309,7 +308,7 @@ * @param {!string} origin The origin URL to match with the filter. * @return {boolean} whether the specified origin matches the filter. */ - originMatchesFilter_(origin) { + originMatchesFilter(origin) { return origin == this.serverOriginURLFilter_; } @@ -319,7 +318,7 @@ * API. */ onMessage_(event) { - if (!this.originMatchesFilter_(event.origin)) { + if (!this.originMatchesFilter(event.origin)) { console.error( 'Message received from non-authorized origin: ' + event.origin); return;
diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js index 3e110c7..aee53820 100644 --- a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_controller.js
@@ -85,10 +85,12 @@ this.webview_.request.onBeforeSendHeaders.addListener( (details) => { - details.requestHeaders.push({ - name: 'Authorization', - value: 'Bearer ' + this.eduCoexistenceAccessToken_, - }); + if (this.originMatchesFilter(details.url)) { + details.requestHeaders.push({ + name: 'Authorization', + value: 'Bearer ' + this.eduCoexistenceAccessToken_, + }); + } return {requestHeaders: details.requestHeaders}; },
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn index 925b4e9..cd1b860 100644 --- a/chrome/browser/resources/settings/chromeos/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -101,6 +101,7 @@ "chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-lite.js", "chrome://resources/mojo/mojo/public/mojom/base/unguessable_token.mojom-lite.js", "chrome://resources/mojo/services/network/public/mojom/ip_address.mojom-lite.js", + "chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.m.js", "chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js", "chrome://resources/js/cr.m.js", "chrome://resources/chromeos/colors/cros_colors.generated.css", @@ -307,6 +308,7 @@ "chromeos/deep_linking_behavior.m.js", "chromeos/google_assistant_page/google_assistant_browser_proxy.m.js", "chromeos/google_assistant_page/google_assistant_page.m.js", + "chromeos/internet_page/esim_remove_profile_dialog.m.js", "chromeos/internet_page/esim_rename_dialog.m.js", "chromeos/internet_page/cellular_networks_list.m.js", "chromeos/internet_page/cellular_eid_popup.m.js", @@ -583,6 +585,8 @@ "chromeos/google_assistant_page/google_assistant_browser_proxy.js", "chromeos/google_assistant_page/google_assistant_page.html", "chromeos/google_assistant_page/google_assistant_page.js", + "chromeos/internet_page/esim_remove_profile_dialog.js", + "chromeos/internet_page/esim_remove_profile_dialog.html", "chromeos/internet_page/esim_rename_dialog.js", "chromeos/internet_page/esim_rename_dialog.html", "chromeos/internet_page/cellular_networks_list.js",
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn index 142b972e..5a32ff53 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
@@ -11,6 +11,7 @@ ":cellular_eid_popup", ":cellular_networks_list", ":cellular_setup_dialog", + ":esim_remove_profile_dialog", ":esim_rename_dialog", ":internet_config", ":internet_detail_menu", @@ -29,6 +30,7 @@ js_library("internet_page") { deps = [ ":cellular_setup_dialog", + ":esim_remove_profile_dialog", ":esim_rename_dialog", ":internet_config", ":internet_page_browser_proxy", @@ -231,6 +233,16 @@ ] } +js_library("esim_remove_profile_dialog") { + deps = [ + "//ui/webui/resources/cr_components/chromeos/cellular_setup:mojo_interface_provider", + "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider", + "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog", + "//ui/webui/resources/cr_elements/cr_input:cr_input", + "//ui/webui/resources/js:i18n_behavior", + ] +} + # TODO: Uncomment as the Polymer3 migration makes progress. js_type_check("closure_compile_module") { is_polymer3 = true @@ -239,6 +251,7 @@ ":cellular_networks_list.m", ":cellular_setup_dialog.m", ":cellular_setup_settings_delegate.m", + ":esim_remove_profile_dialog.m", ":esim_rename_dialog.m", ":internet_config.m", ":internet_detail_menu.m", @@ -366,6 +379,7 @@ sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/internet_page/internet_page.m.js" ] deps = [ ":cellular_setup_dialog.m", + ":esim_remove_profile_dialog.m", ":esim_rename_dialog.m", ":internet_config.m", ":internet_detail_page.m", @@ -543,6 +557,18 @@ extra_deps = [ ":esim_rename_dialog_module" ] } +js_library("esim_remove_profile_dialog.m") { + sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.m.js" ] + deps = [ + "//ui/webui/resources/cr_components/chromeos/cellular_setup:mojo_interface_provider.m", + "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider.m", + "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog.m", + "//ui/webui/resources/cr_elements/cr_input:cr_input.m", + "//ui/webui/resources/js:i18n_behavior.m", + ] + extra_deps = [ ":esim_remove_profile_dialog_module" ] +} + import("//tools/polymer/polymer.gni") group("polymer3_elements") { @@ -550,6 +576,7 @@ ":cellular_eid_popup_module", ":cellular_networks_list_module", ":cellular_setup_dialog_module", + ":esim_remove_profile_dialog_module", ":esim_rename_dialog_module", ":internet_config_module", ":internet_detail_menu_module", @@ -685,6 +712,14 @@ namespace_rewrites = os_settings_namespace_rewrites } +polymer_modulizer("esim_remove_profile_dialog") { + js_file = "esim_remove_profile_dialog.js" + html_file = "esim_remove_profile_dialog.html" + html_type = "dom-module" + auto_imports = os_settings_auto_imports + namespace_rewrites = os_settings_namespace_rewrites +} + js_modulizer("modulize") { input_files = [ "internet_page_browser_proxy.js",
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.html b/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.html new file mode 100644 index 0000000..23e65ae --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.html
@@ -0,0 +1,31 @@ +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.html"> +<link rel="import" href="chrome://resources/cr_components/chromeos/network/mojo_interface_provider.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html"> +<link rel="import" href="chrome://resources/html/i18n_behavior.html"> + +<dom-module id="esim-remove-profile-dialog"> + <template> + <style> + #cancel { + margin-inline-end: 8px; + } + </style> + <cr-dialog id="dialog" show-on-attach> + <div slot="title">[[getTitleString_(esimProfileName_)]]</div> + <div slot="button-container"> + <cr-button id="cancel" on-click="onCancelTap_" + class="cancel-button"> + $i18n{eSimRemoveProfileDialogCancel} + </cr-button> + <cr-button id="remove" on-click="onRemoveProfileTap_" + class="action-button"> + $i18n{eSimRemoveProfileDialogRemove} + </cr-button> + </div> + </cr-dialog> + </template> + <script src="esim_remove_profile_dialog.js"></script> +</dom-module> \ No newline at end of file
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.js b/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.js new file mode 100644 index 0000000..d3d98d3b --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/internet_page/esim_remove_profile_dialog.js
@@ -0,0 +1,112 @@ +// 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. + +/** + * @fileoverview Polymer element to remove eSIM profile + */ + +Polymer({ + is: 'esim-remove-profile-dialog', + + behaviors: [ + I18nBehavior, + ], + + properties: { + /** @type {string} */ + esimProfileName_: { + type: String, + value: '', + }, + + /** @type {string} */ + iccid: { + type: String, + value: '', + } + }, + + /** + * Provides an interface to the ESimManager Mojo service. + * @private {?chromeos.cellularSetup.mojom.ESimManagerRemote} + */ + eSimManagerRemote_: null, + + /** @private {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */ + networkConfig_: null, + + /** @private {?chromeos.cellularSetup.mojom.ESimProfileRemote} */ + esimProfileRemote_: null, + + /** @override */ + created() { + this.eSimManagerRemote_ = cellular_setup.getESimManagerRemote(); + this.networkConfig_ = network_config.MojoInterfaceProviderImpl.getInstance() + .getMojoServiceRemote(); + this.init_(); + }, + + /** @private */ + async init_() { + const response = await this.eSimManagerRemote_.getAvailableEuiccs(); + const euicc = response.euiccs[0]; + + const esimProfilesRemotes = await euicc.getProfileList(); + + for (const profileRemote of esimProfilesRemotes.profiles) { + const profileProperties = await profileRemote.getProperties(); + + if (profileProperties.properties.iccid !== this.iccid) { + continue; + } + + this.esimProfileRemote_ = profileRemote; + this.esimProfileName_ = profileProperties.properties.nickname ? + this.convertString16ToJSString_( + profileProperties.properties.nickname) : + this.convertString16ToJSString_(profileProperties.properties.name); + } + }, + + /** + * Converts a mojoBase.mojom.String16 to a JavaScript String. + * @param {?mojoBase.mojom.String16} str + * @return {string} + * @private + */ + convertString16ToJSString_(str) { + return str.data.map(ch => String.fromCodePoint(ch)).join(''); + }, + + /** + * @returns {string} + * @private + */ + getTitleString_() { + return this.i18n('esimRemoveProfileDialogTitle', this.esimProfileName_); + }, + + /** + * @param {Event} event + * @private + */ + async onRemoveProfileTap_(event) { + const response = await this.esimProfileRemote_.uninstallProfile(); + if (response.result === + chromeos.cellularSetup.mojom.ESimOperationResult.kFailure) { + console.error('Unable to remove profile'); + // TODO(crbug.com/1093185): Show useful error to user when uninstall fails + } + + this.$.dialog.close(); + }, + + /** + * @param {Event} event + * @private + */ + onCancelTap_(event) { + this.$.dialog.close(); + } +});
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/esim_rename_dialog.html b/chrome/browser/resources/settings/chromeos/internet_page/esim_rename_dialog.html index c90dd29..7dddd5e 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/esim_rename_dialog.html +++ b/chrome/browser/resources/settings/chromeos/internet_page/esim_rename_dialog.html
@@ -17,6 +17,7 @@ <div slot="title">$i18n{eSimRenameProfileDialogLabel}</div> <div slot="body"> <cr-input value="{{esimProfileName_}}" + id="eSimprofileName" spellcheck="false"> </cr-button> </div>
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.html b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.html index 05d5c1e..241c845 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.html +++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.html
@@ -35,6 +35,7 @@ <template> <cr-action-menu role-description="$i18n{menu}"> <button class="dropdown-item" + id="renameBtn" on-click="onRenameESimProfileTap_" role="menuitem" title="$i18n{networkDetailMenuRenameESim}"> @@ -42,7 +43,9 @@ </button> <hr> <button class="dropdown-item" + on-click="onRemoveESimProfileTap_" role="menuitem" + id="removeBtn" title="$i18n{networkDetailMenuRemoveESim}"> $i18n{networkDetailMenuRemoveESim} </button>
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.js b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.js index cd0355e4..15d29c05 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.js +++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_menu.js
@@ -96,5 +96,13 @@ */ onRenameESimProfileTap_(e) { this.fire('show-esim-profile-rename-dialog', {iccid: this.iccid_}); + }, + + /** + * @param {!Event} e + * @private + */ + onRemoveESimProfileTap_(e) { + this.fire('show-esim-remove-profile-dialog', {iccid: this.iccid_}); } }); \ No newline at end of file
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html index 823189a..60f932f 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html +++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html
@@ -29,6 +29,7 @@ <link rel="import" href="internet_subpage.html"> <link rel="import" href="network_summary.html"> <link rel="import" href="esim_rename_dialog.html"> +<link rel="import" href="esim_remove_profile_dialog.html"> <dom-module id="settings-internet-page"> <template>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js index 94c54df..0b6317d4 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.js +++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -34,6 +34,7 @@ import './os_about_page/detailed_build_info.m.js'; import './os_about_page/update_warning_dialog.m.js'; import './os_search_page/os_search_page.m.js'; +import './internet_page/esim_remove_profile_dialog.m.js'; export {AboutPageBrowserProxyImpl, BrowserChannel, UpdateStatus} from '../about_page/about_page_browser_proxy.m.js'; export {LifetimeBrowserProxy, LifetimeBrowserProxyImpl} from '../lifetime_browser_proxy.m.js';
diff --git a/chrome/browser/resources/sync_file_system_internals/dump_database.js b/chrome/browser/resources/sync_file_system_internals/dump_database.js index e71a1d3..a0e4481 100644 --- a/chrome/browser/resources/sync_file_system_internals/dump_database.js +++ b/chrome/browser/resources/sync_file_system_internals/dump_database.js
@@ -10,72 +10,72 @@ import {$} from 'chrome://resources/js/util.m.js'; import {createElementFromText} from './utils.js'; - /** - * Get the database dump. - */ - function refreshDatabaseDump() { - sendWithPromise('getDatabaseDump').then(onGetDatabaseDump); +/** + * Get the database dump. + */ +function refreshDatabaseDump() { + sendWithPromise('getDatabaseDump').then(onGetDatabaseDump); +} + +/** + * Creates a table by filling |header| and |body|. + * @param {!HTMLElement} div The outer container of the table to be + * renderered. + * @param {!HTMLElement} header The table header element to be fillied by + * this function. + * @param {!HTMLElement} body The table body element to be filled by this + * function. + * @param {Array} databaseDump List of dictionaries for the database dump. + * The first element must have metadata of the entry. + * The remaining elements must be dictionaries for the database dump, + * which can be iterated using the 'keys' fields given by the first + * element. + */ +function createDatabaseDumpTable(div, header, body, databaseDump) { + const metadata = databaseDump.shift(); + div.appendChild(createElementFromText('h3', metadata['title'])); + + let tr = document.createElement('tr'); + for (let i = 0; i < metadata.keys.length; ++i) { + tr.appendChild(createElementFromText('td', metadata.keys[i])); } + header.appendChild(tr); - /** - * Creates a table by filling |header| and |body|. - * @param {!HTMLElement} div The outer container of the table to be - * renderered. - * @param {!HTMLElement} header The table header element to be fillied by - * this function. - * @param {!HTMLElement} body The table body element to be filled by this - * function. - * @param {Array} databaseDump List of dictionaries for the database dump. - * The first element must have metadata of the entry. - * The remaining elements must be dictionaries for the database dump, - * which can be iterated using the 'keys' fields given by the first - * element. - */ - function createDatabaseDumpTable(div, header, body, databaseDump) { - const metadata = databaseDump.shift(); - div.appendChild(createElementFromText('h3', metadata['title'])); - - let tr = document.createElement('tr'); - for (let i = 0; i < metadata.keys.length; ++i) { - tr.appendChild(createElementFromText('td', metadata.keys[i])); + for (let i = 0; i < databaseDump.length; i++) { + const entry = databaseDump[i]; + tr = document.createElement('tr'); + for (let k = 0; k < metadata.keys.length; ++k) { + tr.appendChild(createElementFromText('td', entry[metadata.keys[k]])); } - header.appendChild(tr); - - for (let i = 0; i < databaseDump.length; i++) { - const entry = databaseDump[i]; - tr = document.createElement('tr'); - for (let k = 0; k < metadata.keys.length; ++k) { - tr.appendChild(createElementFromText('td', entry[metadata.keys[k]])); - } - body.appendChild(tr); - } + body.appendChild(tr); } +} - /** - * Handles callback from onGetDatabaseDump. - * @param {Array} databaseDump List of lists for the database dump. - */ - function onGetDatabaseDump(databaseDump) { - const placeholder = $('dump-database-placeholder'); - placeholder.innerHTML = trustedTypes.emptyHTML; - for (let i = 0; i < databaseDump.length; ++i) { - const div = /** @type {!HTMLElement} */ (document.createElement('div')); - const table = document.createElement('table'); - const header = - /** @type {!HTMLElement} */ (document.createElement('thead')); - const body = - /** @type {!HTMLElement} */ (document.createElement('tbody')); - createDatabaseDumpTable(div, header, body, databaseDump[i]); - table.appendChild(header); - table.appendChild(body); - div.appendChild(table); - placeholder.appendChild(div); - } +/** + * Handles callback from onGetDatabaseDump. + * @param {Array} databaseDump List of lists for the database dump. + */ +function onGetDatabaseDump(databaseDump) { + const placeholder = $('dump-database-placeholder'); + placeholder.innerHTML = trustedTypes.emptyHTML; + for (let i = 0; i < databaseDump.length; ++i) { + const div = /** @type {!HTMLElement} */ (document.createElement('div')); + const table = document.createElement('table'); + const header = + /** @type {!HTMLElement} */ (document.createElement('thead')); + const body = + /** @type {!HTMLElement} */ (document.createElement('tbody')); + createDatabaseDumpTable(div, header, body, databaseDump[i]); + table.appendChild(header); + table.appendChild(body); + div.appendChild(table); + placeholder.appendChild(div); } +} - function main() { - refreshDatabaseDump(); - $('refresh-database-dump').addEventListener('click', refreshDatabaseDump); - } +function main() { + refreshDatabaseDump(); + $('refresh-database-dump').addEventListener('click', refreshDatabaseDump); +} - document.addEventListener('DOMContentLoaded', main); +document.addEventListener('DOMContentLoaded', main);
diff --git a/chrome/browser/resources/sync_file_system_internals/extension_statuses.js b/chrome/browser/resources/sync_file_system_internals/extension_statuses.js index 042c38a..d5f8850 100644 --- a/chrome/browser/resources/sync_file_system_internals/extension_statuses.js +++ b/chrome/browser/resources/sync_file_system_internals/extension_statuses.js
@@ -10,40 +10,40 @@ import {$} from 'chrome://resources/js/util.m.js'; import {createElementFromText} from './utils.js'; - /** - * Get initial map of extension statuses (pending batch sync, enabled and - * disabled). - */ - function refreshExtensionStatuses() { - sendWithPromise('getExtensionStatuses').then(onGetExtensionStatuses); +/** + * Get initial map of extension statuses (pending batch sync, enabled and + * disabled). + */ +function refreshExtensionStatuses() { + sendWithPromise('getExtensionStatuses').then(onGetExtensionStatuses); +} + +/** + * Handles callback from onGetExtensionStatuses. + * @param {!Array<!{ + * extensionName: string, + * extensionID: string, + * status: string, + * }>} extensionStatuses + */ +function onGetExtensionStatuses(extensionStatuses) { + const itemContainer = $('extension-entries'); + itemContainer.textContent = ''; + + for (let i = 0; i < extensionStatuses.length; i++) { + const originEntry = extensionStatuses[i]; + const tr = document.createElement('tr'); + tr.appendChild(createElementFromText('td', originEntry.extensionName)); + tr.appendChild(createElementFromText('td', originEntry.extensionID)); + tr.appendChild(createElementFromText('td', originEntry.status)); + itemContainer.appendChild(tr); } +} - /** - * Handles callback from onGetExtensionStatuses. - * @param {!Array<!{ - * extensionName: string, - * extensionID: string, - * status: string, - * }>} extensionStatuses - */ - function onGetExtensionStatuses(extensionStatuses) { - const itemContainer = $('extension-entries'); - itemContainer.textContent = ''; +function main() { + refreshExtensionStatuses(); + $('refresh-extensions-statuses') + .addEventListener('click', refreshExtensionStatuses); +} - for (let i = 0; i < extensionStatuses.length; i++) { - const originEntry = extensionStatuses[i]; - const tr = document.createElement('tr'); - tr.appendChild(createElementFromText('td', originEntry.extensionName)); - tr.appendChild(createElementFromText('td', originEntry.extensionID)); - tr.appendChild(createElementFromText('td', originEntry.status)); - itemContainer.appendChild(tr); - } - } - - function main() { - refreshExtensionStatuses(); - $('refresh-extensions-statuses') - .addEventListener('click', refreshExtensionStatuses); - } - - document.addEventListener('DOMContentLoaded', main); +document.addEventListener('DOMContentLoaded', main);
diff --git a/chrome/browser/resources/sync_file_system_internals/file_metadata.js b/chrome/browser/resources/sync_file_system_internals/file_metadata.js index 049b02c..c9b2c111 100644 --- a/chrome/browser/resources/sync_file_system_internals/file_metadata.js +++ b/chrome/browser/resources/sync_file_system_internals/file_metadata.js
@@ -12,133 +12,133 @@ import {createElementFromDictionary, createElementFromText} from './utils.js'; - /** - * Gets extension data so the select drop down can be filled. - */ - function refreshExtensions() { - sendWithPromise('getExtensions').then(onGetExtensions); - } +/** + * Gets extension data so the select drop down can be filled. + */ +function refreshExtensions() { + sendWithPromise('getExtensions').then(onGetExtensions); +} - /** - * Renders result of getFileMetadata as a table. - * @param {!Array<!{ - * extensionName: string, - * extensionID: string, - * status: string, - * }>} extensionStatuses of dictionaries containing 'extensionName', - * 'extensionID', 'status'. - */ - function onGetExtensions(extensionStatuses) { - const select = $('extensions-select'); +/** + * Renders result of getFileMetadata as a table. + * @param {!Array<!{ + * extensionName: string, + * extensionID: string, + * status: string, + * }>} extensionStatuses of dictionaries containing 'extensionName', + * 'extensionID', 'status'. + */ +function onGetExtensions(extensionStatuses) { + const select = $('extensions-select'); - // Record existing drop down extension ID. If it's still there after the - // refresh then keep it as the selected value. - const oldSelectedExtension = getSelectedExtensionId(); + // Record existing drop down extension ID. If it's still there after the + // refresh then keep it as the selected value. + const oldSelectedExtension = getSelectedExtensionId(); - select.textContent = ''; - for (let i = 0; i < extensionStatuses.length; i++) { - const originEntry = extensionStatuses[i]; - const tr = document.createElement('tr'); - const title = originEntry.extensionName + ' [' + originEntry.status + ']'; - select.options.add(new Option(title, originEntry.extensionID)); + select.textContent = ''; + for (let i = 0; i < extensionStatuses.length; i++) { + const originEntry = extensionStatuses[i]; + const tr = document.createElement('tr'); + const title = originEntry.extensionName + ' [' + originEntry.status + ']'; + select.options.add(new Option(title, originEntry.extensionID)); - // If option was the previously only selected, make it selected again. - if (originEntry.extensionID != oldSelectedExtension) { - continue; - } - select.options[select.options.length - 1].selected = true; + // If option was the previously only selected, make it selected again. + if (originEntry.extensionID != oldSelectedExtension) { + continue; } - - // After drop down has been loaded with options, file metadata can be loaded - refreshFileMetadata(); + select.options[select.options.length - 1].selected = true; } - /** - * @return {?string} extension ID that's currently selected in drop down box. - */ - function getSelectedExtensionId() { - const dropDown = $('extensions-select').options; - if (dropDown.selectedIndex >= 0) { - return dropDown[dropDown.selectedIndex].value; - } + // After drop down has been loaded with options, file metadata can be loaded + refreshFileMetadata(); +} - return null; +/** + * @return {?string} extension ID that's currently selected in drop down box. + */ +function getSelectedExtensionId() { + const dropDown = $('extensions-select').options; + if (dropDown.selectedIndex >= 0) { + return dropDown[dropDown.selectedIndex].value; } - /** - * Get File Metadata depending on which extension is selected from the drop - * down if any. - */ - function refreshFileMetadata() { - const dropDown = $('extensions-select'); - if (dropDown.options.length === 0) { - $('file-metadata-header').textContent = ''; - $('file-metadata-entries').textContent = 'No file metadata available.'; - return; - } + return null; +} - const selectedExtensionId = getSelectedExtensionId(); - sendWithPromise('getFileMetadata', selectedExtensionId) - .then(onGetFileMetadata); +/** + * Get File Metadata depending on which extension is selected from the drop + * down if any. + */ +function refreshFileMetadata() { + const dropDown = $('extensions-select'); + if (dropDown.options.length === 0) { + $('file-metadata-header').textContent = ''; + $('file-metadata-entries').textContent = 'No file metadata available.'; + return; } - /** - * Renders result of getFileMetadata as a table. - */ - function onGetFileMetadata(fileMetadataMap) { - const header = $('file-metadata-header'); - // Only draw the header if it hasn't been drawn yet - if (header.children.length === 0) { - const tr = document.createElement('tr'); - tr.appendChild(createElementFromText('td', 'Type')); - tr.appendChild(createElementFromText('td', 'Status')); - tr.appendChild(createElementFromText('td', 'Path', {width: '250px'})); - tr.appendChild(createElementFromText('td', 'Details')); - header.appendChild(tr); - } + const selectedExtensionId = getSelectedExtensionId(); + sendWithPromise('getFileMetadata', selectedExtensionId) + .then(onGetFileMetadata); +} - // Add row entries. - const itemContainer = $('file-metadata-entries'); - itemContainer.textContent = ''; - for (let i = 0; i < fileMetadataMap.length; i++) { - const metadatEntry = fileMetadataMap[i]; - const tr = document.createElement('tr'); - tr.appendChild(createFileIconCell(metadatEntry.type)); - tr.appendChild(createElementFromText('td', metadatEntry.status)); - tr.appendChild(createElementFromText('td', metadatEntry.path)); - tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); - itemContainer.appendChild(tr); - } +/** + * Renders result of getFileMetadata as a table. + */ +function onGetFileMetadata(fileMetadataMap) { + const header = $('file-metadata-header'); + // Only draw the header if it hasn't been drawn yet + if (header.children.length === 0) { + const tr = document.createElement('tr'); + tr.appendChild(createElementFromText('td', 'Type')); + tr.appendChild(createElementFromText('td', 'Status')); + tr.appendChild(createElementFromText('td', 'Path', {width: '250px'})); + tr.appendChild(createElementFromText('td', 'Details')); + header.appendChild(tr); } - /** - * @param {string} type file type string. - * @return {!HTMLElement} TD with file or folder icon depending on type. - */ - function createFileIconCell(type) { - const img = document.createElement('div'); - const lowerType = type.toLowerCase(); - if (lowerType == 'file') { - img.style.content = getImage('chrome://theme/IDR_DEFAULT_FAVICON'); - } else if (lowerType == 'folder') { - img.style.content = getImage('chrome://theme/IDR_FOLDER_CLOSED'); - img.className = 'folder-image'; - } + // Add row entries. + const itemContainer = $('file-metadata-entries'); + itemContainer.textContent = ''; + for (let i = 0; i < fileMetadataMap.length; i++) { + const metadatEntry = fileMetadataMap[i]; + const tr = document.createElement('tr'); + tr.appendChild(createFileIconCell(metadatEntry.type)); + tr.appendChild(createElementFromText('td', metadatEntry.status)); + tr.appendChild(createElementFromText('td', metadatEntry.path)); + tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); + itemContainer.appendChild(tr); + } +} - const imgWrapper = document.createElement('div'); - imgWrapper.appendChild(img); - - const td = /** @type {!HTMLElement} */ (document.createElement('td')); - td.className = 'file-icon-cell'; - td.appendChild(imgWrapper); - td.appendChild(document.createTextNode(type)); - return td; +/** + * @param {string} type file type string. + * @return {!HTMLElement} TD with file or folder icon depending on type. + */ +function createFileIconCell(type) { + const img = document.createElement('div'); + const lowerType = type.toLowerCase(); + if (lowerType == 'file') { + img.style.content = getImage('chrome://theme/IDR_DEFAULT_FAVICON'); + } else if (lowerType == 'folder') { + img.style.content = getImage('chrome://theme/IDR_FOLDER_CLOSED'); + img.className = 'folder-image'; } - function main() { - refreshExtensions(); - $('refresh-metadata-button').addEventListener('click', refreshExtensions); - $('extensions-select').addEventListener('change', refreshFileMetadata); - } + const imgWrapper = document.createElement('div'); + imgWrapper.appendChild(img); - document.addEventListener('DOMContentLoaded', main); + const td = /** @type {!HTMLElement} */ (document.createElement('td')); + td.className = 'file-icon-cell'; + td.appendChild(imgWrapper); + td.appendChild(document.createTextNode(type)); + return td; +} + +function main() { + refreshExtensions(); + $('refresh-metadata-button').addEventListener('click', refreshExtensions); + $('extensions-select').addEventListener('change', refreshFileMetadata); +} + +document.addEventListener('DOMContentLoaded', main);
diff --git a/chrome/browser/resources/sync_file_system_internals/sync_service.js b/chrome/browser/resources/sync_file_system_internals/sync_service.js index 7f2677d..19954fd 100644 --- a/chrome/browser/resources/sync_file_system_internals/sync_service.js +++ b/chrome/browser/resources/sync_file_system_internals/sync_service.js
@@ -13,91 +13,91 @@ import {createElementFromText} from './utils.js'; - /** - * Request Sync Service Status. - */ - function refreshServiceStatus() { - sendWithPromise('getServiceStatus').then(onGetServiceStatus); +/** + * Request Sync Service Status. + */ +function refreshServiceStatus() { + sendWithPromise('getServiceStatus').then(onGetServiceStatus); +} + +/** + * Called when service status is initially retrieved or updated via events. + * @param {string} statusString Service status enum as a string. + */ +function onGetServiceStatus(statusString) { + $('service-status').textContent = statusString; +} + +/** + * Request Google Drive Notification Source. e.g. XMPP or polling. + */ +function refreshNotificationSource() { + sendWithPromise('getNotificationSource').then(onGetNotificationSource); +} + +/** + * Handles callback from getNotificationSource. + * @param {string} sourceString Notification source as a string. + */ +function onGetNotificationSource(sourceString) { + $('notification-source').textContent = sourceString; +} + +// Keeps track of the last log event seen so it's not reprinted. +let lastLogEventId = -1; + +/** + * Request debug log. + */ +function refreshLog() { + sendWithPromise('getLog', lastLogEventId).then(onGetLog); +} + +/** + * Clear old logs. + */ +function clearLogs() { + chrome.send('clearLogs'); + $('log-entries').innerHTML = trustedTypes.emptyHTML; +} + +/** + * Handles callback from getUpdateLog. + * @param {!Array<!{ + * id: number, + * logEvent: string, + * time: string, + * }>} logEntries List of dictionaries containing 'id', 'time', 'logEvent'. + */ +function onGetLog(logEntries) { + const itemContainer = $('log-entries'); + for (let i = 0; i < logEntries.length; i++) { + const logEntry = logEntries[i]; + const tr = document.createElement('tr'); + const error = /ERROR/.test(logEntry.logEvent) ? ' error' : ''; + tr.appendChild( + createElementFromText('td', logEntry.time, {'class': 'log-time'})); + tr.appendChild(createElementFromText( + 'td', logEntry.logEvent, {'class': 'log-event' + error})); + itemContainer.appendChild(tr); + + lastLogEventId = logEntry.id; } +} - /** - * Called when service status is initially retrieved or updated via events. - * @param {string} statusString Service status enum as a string. - */ - function onGetServiceStatus(statusString) { - $('service-status').textContent = statusString; - } +/** + * Get initial sync service values and set listeners to get updated values. + */ +function main() { + decorate('tabbox', TabBox); + $('clear-log-button').addEventListener('click', clearLogs); + refreshServiceStatus(); + refreshNotificationSource(); - /** - * Request Google Drive Notification Source. e.g. XMPP or polling. - */ - function refreshNotificationSource() { - sendWithPromise('getNotificationSource').then(onGetNotificationSource); - } + addWebUIListener('service-status-changed', onGetServiceStatus); - /** - * Handles callback from getNotificationSource. - * @param {string} sourceString Notification source as a string. - */ - function onGetNotificationSource(sourceString) { - $('notification-source').textContent = sourceString; - } + // TODO: Look for a way to push entries to the page when necessary. + window.setInterval(refreshLog, 1000); +} - // Keeps track of the last log event seen so it's not reprinted. - let lastLogEventId = -1; - - /** - * Request debug log. - */ - function refreshLog() { - sendWithPromise('getLog', lastLogEventId).then(onGetLog); - } - - /** - * Clear old logs. - */ - function clearLogs() { - chrome.send('clearLogs'); - $('log-entries').innerHTML = trustedTypes.emptyHTML; - } - - /** - * Handles callback from getUpdateLog. - * @param {!Array<!{ - * id: number, - * logEvent: string, - * time: string, - * }>} logEntries List of dictionaries containing 'id', 'time', 'logEvent'. - */ - function onGetLog(logEntries) { - const itemContainer = $('log-entries'); - for (let i = 0; i < logEntries.length; i++) { - const logEntry = logEntries[i]; - const tr = document.createElement('tr'); - const error = /ERROR/.test(logEntry.logEvent) ? ' error' : ''; - tr.appendChild( - createElementFromText('td', logEntry.time, {'class': 'log-time'})); - tr.appendChild(createElementFromText( - 'td', logEntry.logEvent, {'class': 'log-event' + error})); - itemContainer.appendChild(tr); - - lastLogEventId = logEntry.id; - } - } - - /** - * Get initial sync service values and set listeners to get updated values. - */ - function main() { - decorate('tabbox', TabBox); - $('clear-log-button').addEventListener('click', clearLogs); - refreshServiceStatus(); - refreshNotificationSource(); - - addWebUIListener('service-status-changed', onGetServiceStatus); - - // TODO: Look for a way to push entries to the page when necessary. - window.setInterval(refreshLog, 1000); - } - - document.addEventListener('DOMContentLoaded', main); +document.addEventListener('DOMContentLoaded', main);
diff --git a/chrome/browser/resources/sync_file_system_internals/task_log.js b/chrome/browser/resources/sync_file_system_internals/task_log.js index 8db1bd8..ddcf3207 100644 --- a/chrome/browser/resources/sync_file_system_internals/task_log.js +++ b/chrome/browser/resources/sync_file_system_internals/task_log.js
@@ -6,53 +6,53 @@ import {$} from 'chrome://resources/js/util.m.js'; import {createElementFromText} from './utils.js'; - const nextTaskLogSeq = 1; +const nextTaskLogSeq = 1; - /** - * Handles per-task log event. - * @param {!{ - * duration: number, - * task_description: string, - * result_description: string, - * details: !Array, - * }} taskLog - */ - function onTaskLogRecorded(taskLog) { - const details = document.createElement('td'); - details.classList.add('task-log-details'); +/** + * Handles per-task log event. + * @param {!{ + * duration: number, + * task_description: string, + * result_description: string, + * details: !Array, + * }} taskLog + */ +function onTaskLogRecorded(taskLog) { + const details = document.createElement('td'); + details.classList.add('task-log-details'); - const label = document.createElement('label'); - details.appendChild(label); + const label = document.createElement('label'); + details.appendChild(label); - const collapseCheck = document.createElement('input'); - collapseCheck.setAttribute('type', 'checkbox'); - collapseCheck.classList.add('task-log-collapse-check'); - label.appendChild(collapseCheck); + const collapseCheck = document.createElement('input'); + collapseCheck.setAttribute('type', 'checkbox'); + collapseCheck.classList.add('task-log-collapse-check'); + label.appendChild(collapseCheck); - const ul = document.createElement('ul'); - for (let i = 0; i < taskLog.details.length; ++i) { - ul.appendChild(createElementFromText('li', taskLog.details[i])); - } - label.appendChild(ul); - - const tr = document.createElement('tr'); - tr.appendChild(createElementFromText( - 'td', taskLog.duration.toString(), {'class': 'task-log-duration'})); - tr.appendChild(createElementFromText( - 'td', taskLog.task_description, {'class': 'task-log-description'})); - tr.appendChild(createElementFromText( - 'td', taskLog.result_description, {'class': 'task-log-result'})); - tr.appendChild(details); - - $('task-log-entries').appendChild(tr); + const ul = document.createElement('ul'); + for (let i = 0; i < taskLog.details.length; ++i) { + ul.appendChild(createElementFromText('li', taskLog.details[i])); } + label.appendChild(ul); - /** - * Get initial sync service values and set listeners to get updated values. - */ - function main() { - addWebUIListener('task-log-recorded', onTaskLogRecorded); - chrome.send('observeTaskLog'); - } + const tr = document.createElement('tr'); + tr.appendChild(createElementFromText( + 'td', taskLog.duration.toString(), {'class': 'task-log-duration'})); + tr.appendChild(createElementFromText( + 'td', taskLog.task_description, {'class': 'task-log-description'})); + tr.appendChild(createElementFromText( + 'td', taskLog.result_description, {'class': 'task-log-result'})); + tr.appendChild(details); - document.addEventListener('DOMContentLoaded', main); + $('task-log-entries').appendChild(tr); +} + +/** + * Get initial sync service values and set listeners to get updated values. + */ +function main() { + addWebUIListener('task-log-recorded', onTaskLogRecorded); + chrome.send('observeTaskLog'); +} + +document.addEventListener('DOMContentLoaded', main);
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc index 37feb2e..a3d6ff2 100644 --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
@@ -185,17 +185,6 @@ std::unique_ptr<syncer::SyncChangeProcessor> PassProcessor(); std::unique_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); - // Creates a TemplateURL with some test values. The caller owns the returned - // TemplateURL*. - std::unique_ptr<TemplateURL> CreateTestTemplateURL( - const base::string16& keyword, - const std::string& url, - const std::string& guid = std::string(), - time_t last_mod = 100, - bool safe_for_autoreplace = false, - bool created_by_policy = false, - int prepopulate_id = 999999) const; - // Verifies the two TemplateURLs are equal. // TODO(stevet): Share this with TemplateURLServiceTest. void AssertEquals(const TemplateURL& expected, @@ -289,29 +278,6 @@ new syncer::SyncErrorFactoryMock()); } -std::unique_ptr<TemplateURL> TemplateURLServiceSyncTest::CreateTestTemplateURL( - const base::string16& keyword, - const std::string& url, - const std::string& guid, - time_t last_mod, - bool safe_for_autoreplace, - bool created_by_policy, - int prepopulate_id) const { - TemplateURLData data; - data.SetShortName(ASCIIToUTF16("unittest")); - data.SetKeyword(keyword); - data.SetURL(url); - data.favicon_url = GURL("http://favicon.url"); - data.safe_for_autoreplace = safe_for_autoreplace; - data.date_created = Time::FromTimeT(100); - data.last_modified = Time::FromTimeT(last_mod); - data.created_by_policy = created_by_policy; - data.prepopulate_id = prepopulate_id; - if (!guid.empty()) - data.sync_guid = guid; - return std::make_unique<TemplateURL>(data); -} - void TemplateURLServiceSyncTest::AssertEquals(const TemplateURL& expected, const TemplateURL& actual) const { ASSERT_EQ(expected.short_name(), actual.short_name()); @@ -540,164 +506,6 @@ } } -TEST_F(TemplateURLServiceSyncTest, UniquifyKeyword) { - model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com")); - // Create a key that conflicts with something in the model. - std::unique_ptr<TemplateURL> turl = - CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://new.com", "xyz"); - base::string16 new_keyword = model()->UniquifyKeyword(*turl, false); - EXPECT_EQ(ASCIIToUTF16("new.com"), new_keyword); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(new_keyword)); - model()->Add(CreateTestTemplateURL(ASCIIToUTF16("new.com"), "http://new.com", - "xyz")); - - // Test a second collision. This time it should be resolved by actually - // modifying the original keyword, since the autogenerated keyword is already - // used. - turl = CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://new.com"); - new_keyword = model()->UniquifyKeyword(*turl, false); - EXPECT_EQ(ASCIIToUTF16("key1_"), new_keyword); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(new_keyword)); - model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1_"), "http://new.com")); - - // Test a third collision. This should collide on both the autogenerated - // keyword and the first uniquification attempt. - turl = CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://new.com"); - new_keyword = model()->UniquifyKeyword(*turl, false); - EXPECT_EQ(ASCIIToUTF16("key1__"), new_keyword); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(new_keyword)); - - // If we force the method, it should uniquify the keyword even if it is - // currently unique, and skip the host-based autogenerated keyword. - turl = CreateTestTemplateURL(ASCIIToUTF16("unique"), "http://unique.com"); - new_keyword = model()->UniquifyKeyword(*turl, true); - EXPECT_EQ(ASCIIToUTF16("unique_"), new_keyword); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(new_keyword)); -} - -TEST_F(TemplateURLServiceSyncTest, IsLocalTemplateURLBetter) { - // Test some edge cases of this function. - const struct { - time_t local_time; - time_t sync_time; - bool local_is_default; - bool local_created_by_policy; - bool expected_result; - } test_cases[] = { - // Sync is better by timestamp but local is Default. - {10, 100, true, false, true}, - // Sync is better by timestamp but local is Create by Policy. - {10, 100, false, true, true}, - // Tie. Sync wins. - {100, 100, false, false, false}, - }; - - for (size_t i = 0; i < base::size(test_cases); ++i) { - TemplateURL* local_turl = model()->Add(CreateTestTemplateURL( - ASCIIToUTF16("localkey"), "www.local.com", "localguid", - test_cases[i].local_time, true, test_cases[i].local_created_by_policy)); - if (test_cases[i].local_is_default) - model()->SetUserSelectedDefaultSearchProvider(local_turl); - - std::unique_ptr<TemplateURL> sync_turl( - CreateTestTemplateURL(ASCIIToUTF16("synckey"), "www.sync.com", - "syncguid", test_cases[i].sync_time)); - EXPECT_EQ(test_cases[i].expected_result, - model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get())); - - // Undo the changes. - if (test_cases[i].local_is_default) - model()->SetUserSelectedDefaultSearchProvider(NULL); - model()->Remove(local_turl); - } -} - -TEST_F(TemplateURLServiceSyncTest, ResolveSyncKeywordConflict) { - // This tests cases where neither the sync nor the local TemplateURL are - // marked safe_for_autoreplace. - - // Create a keyword that conflicts, and make it older. Sync keyword is - // uniquified, and a syncer::SyncChange is added. - base::string16 original_turl_keyword = ASCIIToUTF16("key1"); - TemplateURL* original_turl = model()->Add(CreateTestTemplateURL( - original_turl_keyword, "http://key1.com", std::string(), 9000)); - std::unique_ptr<TemplateURL> sync_turl(CreateTestTemplateURL( - original_turl_keyword, "http://new.com", "remote", 8999)); - syncer::SyncChangeList changes; - - test_util_a_->ResetObserverCount(); - model()->ResolveSyncKeywordConflict(sync_turl.get(), original_turl, &changes); - EXPECT_EQ(0, test_util_a_->GetObserverCount()); - EXPECT_NE(original_turl_keyword, sync_turl->keyword()); - EXPECT_EQ(original_turl_keyword, original_turl->keyword()); - ASSERT_EQ(1U, changes.size()); - EXPECT_EQ("remote", GetGUID(changes[0].sync_data())); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, changes[0].change_type()); - changes.clear(); - model()->Remove(original_turl); - - // Sync is newer. Original TemplateURL keyword is uniquified. A SyncChange - // is added (which in a normal run would be deleted by PruneSyncChanges() when - // the local GUID doesn't appear in the sync GUID list). Also ensure that - // this does not change the safe_for_autoreplace flag or the TemplateURLID in - // the original. - original_turl = model()->Add(CreateTestTemplateURL( - original_turl_keyword, "http://key1.com", "local", 9000)); - TemplateURLID original_id = original_turl->id(); - sync_turl = CreateTestTemplateURL(original_turl_keyword, "http://new.com", - std::string(), 9001); - test_util_a_->ResetObserverCount(); - model()->ResolveSyncKeywordConflict(sync_turl.get(), original_turl, &changes); - EXPECT_EQ(1, test_util_a_->GetObserverCount()); - EXPECT_EQ(original_turl_keyword, sync_turl->keyword()); - EXPECT_NE(original_turl_keyword, original_turl->keyword()); - EXPECT_FALSE(original_turl->safe_for_autoreplace()); - EXPECT_EQ(original_id, original_turl->id()); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(original_turl_keyword)); - ASSERT_EQ(1U, changes.size()); - EXPECT_EQ("local", GetGUID(changes[0].sync_data())); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, changes[0].change_type()); - changes.clear(); - model()->Remove(original_turl); - - // Equal times. Same result as above. Sync left alone, original uniquified so - // sync_turl can fit. - original_turl = model()->Add(CreateTestTemplateURL( - original_turl_keyword, "http://key1.com", "local2", 9000)); - sync_turl = CreateTestTemplateURL(original_turl_keyword, "http://new.com", - std::string(), 9000); - test_util_a_->ResetObserverCount(); - model()->ResolveSyncKeywordConflict(sync_turl.get(), original_turl, &changes); - EXPECT_EQ(1, test_util_a_->GetObserverCount()); - EXPECT_EQ(original_turl_keyword, sync_turl->keyword()); - EXPECT_NE(original_turl_keyword, original_turl->keyword()); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(original_turl_keyword)); - ASSERT_EQ(1U, changes.size()); - EXPECT_EQ("local2", GetGUID(changes[0].sync_data())); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, changes[0].change_type()); - changes.clear(); - model()->Remove(original_turl); - - // Sync is newer, but original TemplateURL is created by policy, so it wins. - // Sync keyword is uniquified, and a syncer::SyncChange is added. - original_turl = model()->Add( - CreateTestTemplateURL(original_turl_keyword, "http://key1.com", - std::string(), 9000, false, true)); - sync_turl = CreateTestTemplateURL(original_turl_keyword, "http://new.com", - "remote2", 9999); - test_util_a_->ResetObserverCount(); - model()->ResolveSyncKeywordConflict(sync_turl.get(), original_turl, &changes); - EXPECT_EQ(0, test_util_a_->GetObserverCount()); - EXPECT_NE(original_turl_keyword, sync_turl->keyword()); - EXPECT_EQ(original_turl_keyword, original_turl->keyword()); - EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(sync_turl->keyword())); - ASSERT_EQ(1U, changes.size()); - EXPECT_EQ("remote2", GetGUID(changes[0].sync_data())); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, changes[0].change_type()); - changes.clear(); - model()->Remove(original_turl); -} - TEST_F(TemplateURLServiceSyncTest, StartSyncEmpty) { ASSERT_TRUE(model()->GetAllSyncData(syncer::SEARCH_ENGINES).empty()); MergeAndExpectNotify(syncer::SyncDataList(), 0); @@ -1226,46 +1034,6 @@ EXPECT_EQ(synced_other_url, GetURL(sync2_change.sync_data())); } -TEST_F(TemplateURLServiceSyncTest, TwoAutogeneratedKeywordsUsingGoogleBaseURL) { - // Sync brings in two autogenerated keywords and both use Google base URLs. - // We make the first older so that it will get renamed once before the second - // and then again once after (when we resolve conflicts for the second). - syncer::SyncDataList initial_data; - std::unique_ptr<TemplateURL> turl = CreateTestTemplateURL( - ASCIIToUTF16("key1"), "{google:baseURL}1/search?q={searchTerms}", "key1", - 50); - initial_data.push_back( - CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); - turl = CreateTestTemplateURL( - ASCIIToUTF16("key2"), "{google:baseURL}2/search?q={searchTerms}", "key2"); - initial_data.push_back( - CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); - MergeAndExpectNotify(initial_data, 1); - - // We should still have coalesced the updates to one each. - base::string16 google_keyword(base::ASCIIToUTF16(url_formatter::StripWWW( - GURL(model()->search_terms_data().GoogleBaseURLValue()).host()))); - TemplateURL* keyword1 = - model()->GetTemplateURLForKeyword(google_keyword + ASCIIToUTF16("_")); - ASSERT_FALSE(keyword1 == NULL); - EXPECT_EQ("key1", keyword1->sync_guid()); - TemplateURL* keyword2 = model()->GetTemplateURLForKeyword(google_keyword); - ASSERT_FALSE(keyword2 == NULL); - EXPECT_EQ("key2", keyword2->sync_guid()); - - EXPECT_GE(processor()->change_list_size(), 2U); - ASSERT_TRUE(processor()->contains_guid("key1")); - syncer::SyncChange key1_change = processor()->change_for_guid("key1"); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, key1_change.change_type()); - EXPECT_EQ(keyword1->keyword(), - base::UTF8ToUTF16(GetKeyword(key1_change.sync_data()))); - ASSERT_TRUE(processor()->contains_guid("key2")); - syncer::SyncChange key2_change = processor()->change_for_guid("key2"); - EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, key2_change.change_type()); - EXPECT_EQ(keyword2->keyword(), - base::UTF8ToUTF16(GetKeyword(key2_change.sync_data()))); -} - TEST_F(TemplateURLServiceSyncTest, DuplicateEncodingsRemoved) { // Create a sync entry with duplicate encodings. syncer::SyncDataList initial_data; @@ -2090,8 +1858,6 @@ // to Sync. // * |update_sent| denotes which TemplateURL should have an // ACTION_UPDATE sent to the server after the merge. - // * |turl_uniquified| denotes which TemplateURL should have its - // keyword updated after the merge. // * |present_in_model| denotes which TemplateURL should be found in // the model after the merge. // * If |keywords_conflict| is true, the TemplateURLs are set up with @@ -2100,37 +1866,36 @@ ExpectedTemplateURL conflict_winner; ExpectedTemplateURL synced_at_start; ExpectedTemplateURL update_sent; - ExpectedTemplateURL turl_uniquified; ExpectedTemplateURL present_in_model; bool keywords_conflict; size_t final_num_turls; } test_cases[] = { - // Both are synced and the new sync entry is better: Local is uniquified - // and - // UPDATE sent. Sync is added. - {SYNC, BOTH, LOCAL, LOCAL, BOTH, true, 2}, - // Both are synced and the local entry is better: Sync is uniquified and - // added to the model. An UPDATE is sent for it. - {LOCAL, BOTH, SYNC, SYNC, BOTH, true, 2}, + // Both are synced and the new sync entry is better: Local is left as-is, + // and the Sync is added. + {SYNC, BOTH, NEITHER, BOTH, true, 2}, + // Both are synced and the local entry is better: Sync is still added to + // the model. + {LOCAL, BOTH, NEITHER, BOTH, true, 2}, // Local was not known to Sync and the new sync entry is better: Sync is // added. Local is removed. No updates. - {SYNC, SYNC, NEITHER, NEITHER, SYNC, true, 1}, + {SYNC, SYNC, NEITHER, SYNC, true, 1}, // Local was not known to sync and the local entry is better: Local is // updated with sync GUID, Sync is not added. UPDATE sent for Sync. - {LOCAL, SYNC, SYNC, NEITHER, SYNC, true, 1}, + {LOCAL, SYNC, SYNC, SYNC, true, 1}, // No conflicting keyword. Both should be added with their original // keywords, with no updates sent. Note that MergeDataAndStartSyncing is // responsible for creating the ACTION_ADD for the local TemplateURL. - {NEITHER, SYNC, NEITHER, NEITHER, BOTH, false, 2}, + {NEITHER, SYNC, NEITHER, BOTH, false, 2}, }; for (size_t i = 0; i < base::size(test_cases); ++i) { + SCOPED_TRACE(testing::Message() << "Case #" << i << std::endl); + // Assert all the valid states of ExpectedTemplateURLs. ASSERT_FALSE(test_cases[i].conflict_winner == BOTH); ASSERT_FALSE(test_cases[i].synced_at_start == NEITHER); ASSERT_FALSE(test_cases[i].synced_at_start == LOCAL); ASSERT_FALSE(test_cases[i].update_sent == BOTH); - ASSERT_FALSE(test_cases[i].turl_uniquified == BOTH); ASSERT_FALSE(test_cases[i].present_in_model == NEITHER); const base::string16 local_keyword = ASCIIToUTF16("localkeyword"); @@ -2192,16 +1957,6 @@ EXPECT_EQ(0U, change_list.size()); } - // Adjust the expectations based on the expectation enums. - if (test_cases[i].turl_uniquified == LOCAL) { - DCHECK(test_cases[i].keywords_conflict); - expected_local_keyword = ASCIIToUTF16("localkeyword_"); - } - if (test_cases[i].turl_uniquified == SYNC) { - DCHECK(test_cases[i].keywords_conflict); - expected_sync_keyword = ASCIIToUTF16("localkeyword_"); - } - // Check for TemplateURLs expected in the model. Note that this is checked // by GUID rather than the initial pointer, as a merge could occur (the // Sync TemplateURL overtakes the local one). Also remove the present
diff --git a/chrome/browser/search_engines/template_url_service_test_util.cc b/chrome/browser/search_engines/template_url_service_test_util.cc index ce2d543..3080cb99 100644 --- a/chrome/browser/search_engines/template_url_service_test_util.cc +++ b/chrome/browser/search_engines/template_url_service_test_util.cc
@@ -10,6 +10,7 @@ #include "base/run_loop.h" #include "base/test/bind.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/time/time.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/search_engines/chrome_template_url_service_client.h" #include "chrome/test/base/testing_profile.h" @@ -62,6 +63,29 @@ DefaultSearchManager::kDefaultSearchProviderDataPrefName); } +std::unique_ptr<TemplateURL> CreateTestTemplateURL( + const base::string16& keyword, + const std::string& url, + const std::string& guid, + time_t last_mod, + bool safe_for_autoreplace, + bool created_by_policy, + int prepopulate_id) { + TemplateURLData data; + data.SetShortName(base::ASCIIToUTF16("unittest")); + data.SetKeyword(keyword); + data.SetURL(url); + data.favicon_url = GURL("http://favicon.url"); + data.safe_for_autoreplace = safe_for_autoreplace; + data.date_created = base::Time::FromTimeT(100); + data.last_modified = base::Time::FromTimeT(last_mod); + data.created_by_policy = created_by_policy; + data.prepopulate_id = prepopulate_id; + if (!guid.empty()) + data.sync_guid = guid; + return std::make_unique<TemplateURL>(data); +} + TemplateURLServiceTestUtil::TemplateURLServiceTestUtil() { // Make unique temp directory. EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
diff --git a/chrome/browser/search_engines/template_url_service_test_util.h b/chrome/browser/search_engines/template_url_service_test_util.h index 9ff5a52..1be7174 100644 --- a/chrome/browser/search_engines/template_url_service_test_util.h +++ b/chrome/browser/search_engines/template_url_service_test_util.h
@@ -30,6 +30,18 @@ // Removes all the managed preferences for the default search provider. void RemoveManagedDefaultSearchPreferences(TestingProfile* profile); +// Creates a TemplateURL with some test values. The caller owns the returned +// TemplateURL*. +// TODO(tommycli): Change last_mod to more verbose name and make it base::Time. +std::unique_ptr<TemplateURL> CreateTestTemplateURL( + const base::string16& keyword, + const std::string& url, + const std::string& guid = std::string(), + time_t last_mod = 100, + bool safe_for_autoreplace = false, + bool created_by_policy = false, + int prepopulate_id = 999999); + class TemplateURLServiceTestUtil : public TemplateURLServiceObserver { public: TemplateURLServiceTestUtil();
diff --git a/chrome/browser/secure_origin_allowlist_browsertest.cc b/chrome/browser/secure_origin_allowlist_browsertest.cc index e8e6732..48f7248 100644 --- a/chrome/browser/secure_origin_allowlist_browsertest.cc +++ b/chrome/browser/secure_origin_allowlist_browsertest.cc
@@ -166,40 +166,7 @@ } } -class SecureOriginAllowlistBrowsertestWithMarkHttpDangerous - : public SecureOriginAllowlistBrowsertest { - public: - SecureOriginAllowlistBrowsertestWithMarkHttpDangerous() { - // TODO(crbug.com/917693): Remove this forced feature/param when the feature - // fully launches. - feature_list_.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -INSTANTIATE_TEST_SUITE_P(All, - SecureOriginAllowlistBrowsertestWithMarkHttpDangerous, - testing::Values(TestVariant::kNone, - TestVariant::kCommandline, -// The legacy policy isn't defined on ChromeOS or Android, so skip tests that -// use it on those platforms. -#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) - TestVariant::kPolicyOld, - TestVariant::kPolicyOldAndNew, -#endif - TestVariant::kPolicy, - TestVariant::kPolicy2, - TestVariant::kPolicy3)); - -// Tests that allowlisted insecure origins are correctly set as security level -// NONE instead of the default level DANGEROUS. -IN_PROC_BROWSER_TEST_P(SecureOriginAllowlistBrowsertestWithMarkHttpDangerous, - SecurityIndicators) { +IN_PROC_BROWSER_TEST_P(SecureOriginAllowlistBrowsertest, SecurityIndicators) { ui_test_utils::NavigateToURL( browser(), embedded_test_server()->GetURL( @@ -210,15 +177,15 @@ if (GetParam() == TestVariant::kPolicyOldAndNew) { // When both policies are set, the new policy overrides the old policy. - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); + EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); ui_test_utils::NavigateToURL( browser(), embedded_test_server()->GetURL( "otherexample.com", "/secure_origin_allowlist_browsertest.html")); EXPECT_EQ(security_state::NONE, helper->GetSecurityLevel()); } else { - EXPECT_EQ(ExpectSecureContext() ? security_state::NONE - : security_state::DANGEROUS, - helper->GetSecurityLevel()); + EXPECT_EQ( + ExpectSecureContext() ? security_state::NONE : security_state::WARNING, + helper->GetSecurityLevel()); } }
diff --git a/chrome/browser/sessions/tab_restore_browsertest.cc b/chrome/browser/sessions/tab_restore_browsertest.cc index b1c1f11..113fe90 100644 --- a/chrome/browser/sessions/tab_restore_browsertest.cc +++ b/chrome/browser/sessions/tab_restore_browsertest.cc
@@ -54,6 +54,7 @@ #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "ui/gfx/animation/animation_test_api.h" +#include "ui/gfx/range/range.h" #include "url/gurl.h" #if BUILDFLAG(ENABLE_SESSION_SERVICE) @@ -1105,7 +1106,7 @@ ->group_model() ->GetTabGroup(group) ->ListTabs() - .size()); + .length()); } IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindowWithGroupedTabs) {
diff --git a/chrome/browser/sharesheet/sharesheet_controller.h b/chrome/browser/sharesheet/sharesheet_controller.h index 3ac6033..cb85ada 100644 --- a/chrome/browser/sharesheet/sharesheet_controller.h +++ b/chrome/browser/sharesheet/sharesheet_controller.h
@@ -15,6 +15,10 @@ public: virtual ~SharesheetController() = default; + // Each Controller is assigned a unique id used to distinuish between + // different invocations of the sharesheet. + virtual uint32_t GetId() = 0; + virtual Profile* GetProfile() = 0; // When called will set the bubble size to |width| and |height|.
diff --git a/chrome/browser/sharesheet/sharesheet_service.cc b/chrome/browser/sharesheet/sharesheet_service.cc index b7c6485c..73f4669 100644 --- a/chrome/browser/sharesheet/sharesheet_service.cc +++ b/chrome/browser/sharesheet/sharesheet_service.cc
@@ -19,7 +19,6 @@ #include "chrome/browser/sharesheet/sharesheet_types.h" #include "chrome/common/chrome_features.h" #include "components/services/app_service/public/cpp/intent_util.h" -#include "content/public/browser/web_contents.h" #include "ui/display/types/display_constants.h" #include "ui/views/view.h" @@ -46,18 +45,20 @@ sharesheet::CloseCallback close_callback) { DCHECK(intent->action == apps_util::kIntentActionSend || intent->action == apps_util::kIntentActionSendMultiple); - auto* sharesheet_service_delegate = - GetOrCreateDelegate(web_contents->GetTopLevelNativeWindow()); - ShowBubbleWithDelegate(sharesheet_service_delegate, std::move(intent), - contains_hosted_document, std::move(close_callback)); + auto sharesheet_service_delegate = + std::make_unique<SharesheetServiceDelegate>(delegate_counter_++, + web_contents, this); + ShowBubbleWithDelegate(std::move(sharesheet_service_delegate), + std::move(intent), contains_hosted_document, + std::move(close_callback)); } // Cleanup delegate when bubble closes. -void SharesheetService::OnBubbleClosed(gfx::NativeWindow native_window, +void SharesheetService::OnBubbleClosed(uint32_t id, const base::string16& active_action) { auto iter = active_delegates_.begin(); while (iter != active_delegates_.end()) { - if ((*iter)->GetNativeWindow() == native_window) { + if ((*iter)->GetId() == id) { if (!active_action.empty()) { ShareAction* share_action = sharesheet_action_cache_->GetActionFromName(active_action); @@ -71,12 +72,12 @@ } } -void SharesheetService::OnTargetSelected(gfx::NativeWindow native_window, +void SharesheetService::OnTargetSelected(uint32_t delegate_id, const base::string16& target_name, const TargetType type, apps::mojom::IntentPtr intent, views::View* share_action_view) { - SharesheetServiceDelegate* delegate = GetDelegate(native_window); + SharesheetServiceDelegate* delegate = GetDelegate(delegate_id); if (delegate == nullptr) return; @@ -105,23 +106,11 @@ } } -SharesheetServiceDelegate* SharesheetService::GetOrCreateDelegate( - gfx::NativeWindow native_window) { - auto* delegate = GetDelegate(native_window); - if (delegate == nullptr) { - auto new_delegate = - std::make_unique<SharesheetServiceDelegate>(native_window, this); - delegate = new_delegate.get(); - active_delegates_.push_back(std::move(new_delegate)); - } - return delegate; -} - SharesheetServiceDelegate* SharesheetService::GetDelegate( - gfx::NativeWindow native_window) { + uint32_t delegate_id) { auto iter = active_delegates_.begin(); while (iter != active_delegates_.end()) { - if ((*iter)->GetNativeWindow() == native_window) { + if ((*iter)->GetId() == delegate_id) { return iter->get(); } ++iter; @@ -190,16 +179,17 @@ } void SharesheetService::OnAppIconsLoaded( - SharesheetServiceDelegate* delegate, + std::unique_ptr<SharesheetServiceDelegate> delegate, apps::mojom::IntentPtr intent, sharesheet::CloseCallback close_callback, std::vector<TargetInfo> targets) { delegate->ShowBubble(std::move(targets), std::move(intent), std::move(close_callback)); + active_delegates_.push_back(std::move(delegate)); } void SharesheetService::ShowBubbleWithDelegate( - SharesheetServiceDelegate* delegate, + std::unique_ptr<SharesheetServiceDelegate> delegate, apps::mojom::IntentPtr intent, bool contains_hosted_document, sharesheet::CloseCallback close_callback) { @@ -222,7 +212,7 @@ intent_launch_info.size()); LoadAppIcons(std::move(intent_launch_info), std::move(targets), 0, base::BindOnce(&SharesheetService::OnAppIconsLoaded, - weak_factory_.GetWeakPtr(), delegate, + weak_factory_.GetWeakPtr(), std::move(delegate), std::move(intent), std::move(close_callback))); }
diff --git a/chrome/browser/sharesheet/sharesheet_service.h b/chrome/browser/sharesheet/sharesheet_service.h index adf2e4c..c6733ad1e 100644 --- a/chrome/browser/sharesheet/sharesheet_service.h +++ b/chrome/browser/sharesheet/sharesheet_service.h
@@ -15,7 +15,6 @@ #include "chrome/browser/sharesheet/sharesheet_types.h" #include "components/keyed_service/core/keyed_service.h" #include "components/services/app_service/public/mojom/types.mojom.h" -#include "ui/gfx/native_widget_types.h" class Profile; @@ -61,16 +60,13 @@ apps::mojom::IntentPtr intent, bool contains_hosted_document, sharesheet::CloseCallback close_callback); - void OnBubbleClosed(gfx::NativeWindow native_window, - const base::string16& active_action); - void OnTargetSelected(gfx::NativeWindow native_window, + void OnBubbleClosed(uint32_t id, const base::string16& active_action); + void OnTargetSelected(uint32_t delegate_id, const base::string16& target_name, const TargetType type, apps::mojom::IntentPtr intent, views::View* share_action_view); - SharesheetServiceDelegate* GetOrCreateDelegate( - gfx::NativeWindow native_window); - SharesheetServiceDelegate* GetDelegate(gfx::NativeWindow native_window); + SharesheetServiceDelegate* GetDelegate(uint32_t delegate_id); // If the files to share contains a Google Drive hosted document, only the // drive share action will be shown. @@ -94,16 +90,18 @@ SharesheetServiceIconLoaderCallback callback, apps::mojom::IconValuePtr icon_value); - void OnAppIconsLoaded(SharesheetServiceDelegate* delegate, + void OnAppIconsLoaded(std::unique_ptr<SharesheetServiceDelegate> delegate, apps::mojom::IntentPtr intent, sharesheet::CloseCallback close_callback, std::vector<TargetInfo> targets); - void ShowBubbleWithDelegate(SharesheetServiceDelegate* delegate, - apps::mojom::IntentPtr intent, - bool contains_hosted_document, - sharesheet::CloseCallback close_callback); + void ShowBubbleWithDelegate( + std::unique_ptr<SharesheetServiceDelegate> delegate, + apps::mojom::IntentPtr intent, + bool contains_hosted_document, + sharesheet::CloseCallback close_callback); + uint32_t delegate_counter_ = 0; Profile* profile_; std::unique_ptr<SharesheetActionCache> sharesheet_action_cache_; apps::AppServiceProxy* app_service_proxy_;
diff --git a/chrome/browser/sharesheet/sharesheet_service_delegate.cc b/chrome/browser/sharesheet/sharesheet_service_delegate.cc index cd1fe27..1ddf613 100644 --- a/chrome/browser/sharesheet/sharesheet_service_delegate.cc +++ b/chrome/browser/sharesheet/sharesheet_service_delegate.cc
@@ -11,16 +11,18 @@ #include "chrome/browser/sharesheet/sharesheet_service.h" #include "chrome/browser/sharesheet/sharesheet_service_factory.h" #include "chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.h" +#include "content/public/browser/web_contents.h" #include "ui/views/view.h" namespace sharesheet { SharesheetServiceDelegate::SharesheetServiceDelegate( - gfx::NativeWindow native_window, + uint32_t id, + content::WebContents* web_contents, SharesheetService* sharesheet_service) - : native_window_(native_window), + : id_(id), sharesheet_bubble_view_( - std::make_unique<SharesheetBubbleView>(native_window, this)), + std::make_unique<SharesheetBubbleView>(web_contents, this)), sharesheet_service_(sharesheet_service) {} SharesheetServiceDelegate::~SharesheetServiceDelegate() = default; @@ -29,18 +31,14 @@ std::vector<TargetInfo> targets, apps::mojom::IntentPtr intent, sharesheet::CloseCallback close_callback) { - if (is_bubble_open_) - return; sharesheet_bubble_view_->ShowBubble(std::move(targets), std::move(intent), std::move(close_callback)); - is_bubble_open_ = true; } void SharesheetServiceDelegate::OnBubbleClosed( const base::string16& active_action) { sharesheet_bubble_view_.release(); - sharesheet_service_->OnBubbleClosed(native_window_, active_action); - is_bubble_open_ = false; + sharesheet_service_->OnBubbleClosed(id_, active_action); } void SharesheetServiceDelegate::OnActionLaunched() { @@ -52,12 +50,12 @@ const TargetType type, apps::mojom::IntentPtr intent, views::View* share_action_view) { - sharesheet_service_->OnTargetSelected(native_window_, target_name, type, + sharesheet_service_->OnTargetSelected(id_, target_name, type, std::move(intent), share_action_view); } -gfx::NativeWindow SharesheetServiceDelegate::GetNativeWindow() { - return native_window_; +uint32_t SharesheetServiceDelegate::GetId() { + return id_; } Profile* SharesheetServiceDelegate::GetProfile() {
diff --git a/chrome/browser/sharesheet/sharesheet_service_delegate.h b/chrome/browser/sharesheet/sharesheet_service_delegate.h index 164a3a35..e957b2c 100644 --- a/chrome/browser/sharesheet/sharesheet_service_delegate.h +++ b/chrome/browser/sharesheet/sharesheet_service_delegate.h
@@ -12,7 +12,6 @@ #include "chrome/browser/sharesheet/sharesheet_controller.h" #include "chrome/browser/sharesheet/sharesheet_types.h" #include "components/services/app_service/public/mojom/types.mojom.h" -#include "ui/gfx/native_widget_types.h" class Profile; class SharesheetBubbleView; @@ -21,6 +20,10 @@ class View; } +namespace content { +class WebContents; +} + namespace gfx { struct VectorIcon; } @@ -33,7 +36,8 @@ // business logic in the sharesheet. class SharesheetServiceDelegate : public SharesheetController { public: - SharesheetServiceDelegate(gfx::NativeWindow native_window, + SharesheetServiceDelegate(uint32_t id, + content::WebContents* web_contents, SharesheetService* sharesheet_service); ~SharesheetServiceDelegate() override; SharesheetServiceDelegate(const SharesheetServiceDelegate&) = delete; @@ -50,20 +54,15 @@ views::View* share_action_view); void OnActionLaunched(); const gfx::VectorIcon* GetVectorIcon(const base::string16& display_name); - gfx::NativeWindow GetNativeWindow(); // SharesheetController overrides + uint32_t GetId() override; Profile* GetProfile() override; void SetSharesheetSize(const int& width, const int& height) override; void CloseSharesheet() override; private: - bool is_bubble_open_ = false; - - // Only used for ID purposes. NativeWindow will always outlive the - // SharesheetServiceDelegate. - gfx::NativeWindow native_window_; - + const uint32_t id_; base::string16 active_action_; std::unique_ptr<SharesheetBubbleView> sharesheet_bubble_view_; SharesheetService* sharesheet_service_;
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc index 9bc9d08..ceb99222 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -168,18 +168,6 @@ } } -// Gets the Insecure Input Events from the entry's SSLStatus user data. -security_state::InsecureInputEventData GetInputEvents( - content::NavigationEntry* entry) { - security_state::SSLStatusInputEventData* input_events = - static_cast<security_state::SSLStatusInputEventData*>( - entry->GetSSL().user_data.get()); - if (input_events) - return *input_events->input_events(); - - return security_state::InsecureInputEventData(); -} - // A delegate class that allows emulating selection of a file for an // INPUT TYPE=FILE form field. class FileChooserDelegate : public content::WebContentsDelegate { @@ -517,25 +505,8 @@ contents->GetController().GetVisibleEntry(); ASSERT_TRUE(entry); - // TODO(crbug.com/917693): Remove this conditional and hard-code the test - // expectation to DANGEROUS when the feature fully launches. - security_state::SecurityLevel expected_security_level = - security_state::NONE; - if (base::FeatureList::IsEnabled( - security_state::features::kMarkHttpAsFeature)) { - std::string parameter = base::GetFieldTrialParamValueByFeature( - security_state::features::kMarkHttpAsFeature, - security_state::features::kMarkHttpAsFeatureParameterName); - if (parameter == - security_state::features::kMarkHttpAsParameterDangerous) { - expected_security_level = security_state::DANGEROUS; - } else { - expected_security_level = security_state::WARNING; - } - } - EXPECT_EQ(use_secure_inner_origin ? security_state::NONE - : expected_security_level, + : security_state::WARNING, helper->GetSecurityLevel()); } @@ -1445,24 +1416,9 @@ true /* use_secure_inner_origin */); } -class SecurityStateTabHelperTestWithFormsDangerous - : public SecurityStateTabHelperTest { - public: - SecurityStateTabHelperTestWithFormsDangerous() { - feature_list_.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features:: - kMarkHttpAsParameterWarningAndDangerousOnFormEdits}}); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - // Tests that the security level of a HTTP page is not downgraded when a form // field is modified by JavaScript. -IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithFormsDangerous, +IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, SecurityLevelNotDowngradedAfterScriptModification) { content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); @@ -1494,54 +1450,6 @@ ASSERT_EQ(security_state::WARNING, helper->GetSecurityLevel()); } -// Tests that the security level of a HTTP page is downgraded from -// WARNING to DANGEROUS after editing a form field in the relevant -// configurations. -IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithFormsDangerous, - SecurityLevelDowngradedAfterFileSelection) { - content::WebContents* contents = - browser()->tab_strip_model()->GetActiveWebContents(); - - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - // Navigate to an HTTP page. Use a non-local hostname so that it is - // not considered secure. - ui_test_utils::NavigateToURL( - browser(), - GetURLWithNonLocalHostname(embedded_test_server(), "/file_input.html")); - EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); - - // Prepare a file for the upload form. - base::FilePath file_path; - EXPECT_TRUE(base::PathService::Get(base::DIR_TEMP, &file_path)); - file_path = file_path.AppendASCII("bar"); - - base::RunLoop run_loop; - // Fill out the form to refer to the test file. - SecurityStyleTestObserver observer(contents); - std::unique_ptr<FileChooserDelegate> delegate( - new FileChooserDelegate(file_path, run_loop.QuitClosure())); - contents->SetDelegate(delegate.get()); - EXPECT_TRUE( - ExecuteScript(contents, "document.getElementById('fileinput').click();")); - run_loop.Run(); - observer.WaitForDidChangeVisibleSecurityState(); - - // Verify that the security state degrades as expected. - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); - - content::NavigationEntry* entry = contents->GetController().GetVisibleEntry(); - ASSERT_TRUE(entry); - EXPECT_TRUE(GetInputEvents(entry).insecure_field_edited); - - // Verify that after a refresh, the DANGEROUS state is cleared. - contents->GetController().Reload(content::ReloadType::NORMAL, false); - EXPECT_TRUE(content::WaitForLoadStop(contents)); - EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); -} - // Tests that the security state for a WebContents is up to date when the // WebContents is inserted into a Browser's TabStripModel. IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, AddedTab) { @@ -1715,49 +1623,6 @@ EXPECT_TRUE(observer.latest_explanations().summary.empty()); } -class SecurityStateTabHelperTestWithHttpDangerous - : public SecurityStateTabHelperTest { - public: - SecurityStateTabHelperTestWithHttpDangerous() { - feature_list_.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -// Tests that the security level of a HTTP page is downgraded to DANGEROUS when -// MarkHttpAsDangerous is enabled. -IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithHttpDangerous, - SecurityLevelDangerous) { - content::WebContents* contents = - browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(contents); - - SecurityStyleTestObserver observer(contents); - - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - // Navigate to an HTTP page. Use a non-local hostname so that it is - // not considered secure. - GURL http_url = - GetURLWithNonLocalHostname(embedded_test_server(), "/title1.html"); - ui_test_utils::NavigateToURL(browser(), http_url); - - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); - EXPECT_EQ(blink::SecurityStyle::kInsecureBroken, - observer.latest_security_style()); - const content::SecurityStyleExplanations& http_explanation = - observer.latest_explanations(); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_HTTP_NONSECURE_SUMMARY), - http_explanation.summary); -} - // Visit a valid HTTPS page, then a broken HTTPS page, and then go back, // and test that the observed security style matches. IN_PROC_BROWSER_TEST_F(DidChangeVisibleSecurityStateTest, @@ -2078,8 +1943,10 @@ EXPECT_EQ(security_state::NONE, helper->GetSecurityLevel()); } -IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithFormsDangerous, - MarkHttpAsWarningAndDangerousOnFormEdits) { +// Tests that the security level of an HTTP page remains WARNING regardless of +// whether a form was edited. +IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, + MarkHttpAsWarningOnFormEdits) { content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); SecurityStateTabHelper* helper = @@ -2103,92 +1970,10 @@ false); observer.WaitForDidChangeVisibleSecurityState(); - // Verify that the security state degrades as expected. - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); - const content::SecurityStyleExplanations& http_explanation = - observer.latest_explanations(); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_HTTP_NONSECURE_SUMMARY), - http_explanation.summary); - - // Verify security state stays degraded after same-page navigation. - ui_test_utils::NavigateToURL( - browser(), GetURLWithNonLocalHostname( - embedded_test_server(), - "/textinput/focus_input_on_load.html#fragment")); - EXPECT_TRUE(content::WaitForLoadStop(contents)); - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); - - // Verify that after a refresh, the DANGEROUS state is cleared. - contents->GetController().Reload(content::ReloadType::NORMAL, false); - EXPECT_TRUE(content::WaitForLoadStop(contents)); + // Verify that the security state remains the same. EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); } -IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithFormsDangerous, - MarkHttpAsWarningAndDangerousOnFileInputEdits) { - content::WebContents* contents = - browser()->tab_strip_model()->GetActiveWebContents(); - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - // Navigate to an HTTP page. Use a non-local hostname so that it is - // not considered secure. - ui_test_utils::NavigateToURL( - browser(), - GetURLWithNonLocalHostname(embedded_test_server(), "/file_input.html")); - - EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); - SecurityStyleTestObserver observer(contents); - - // Prepare a file for the upload form. - base::FilePath file_path; - EXPECT_TRUE(base::PathService::Get(base::DIR_TEMP, &file_path)); - file_path = file_path.AppendASCII("bar"); - - base::RunLoop run_loop; - // Fill out the form to refer to the test file. - std::unique_ptr<FileChooserDelegate> delegate( - new FileChooserDelegate(file_path, run_loop.QuitClosure())); - contents->SetDelegate(delegate.get()); - EXPECT_TRUE( - ExecuteScript(contents, "document.getElementById('fileinput').click();")); - run_loop.Run(); - observer.WaitForDidChangeVisibleSecurityState(); - - // Verify that the security state degrades as expected. - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); -} - -class SecurityStateTabHelperTestWithAutoupgradesAndHttpWarningsDisabled - : public SecurityStateTabHelperTestWithAutoupgradesDisabled { - public: - SecurityStateTabHelperTestWithAutoupgradesAndHttpWarningsDisabled() { - feature_list_.InitAndDisableFeature( - security_state::features::kMarkHttpAsFeature); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -// Tests that the histogram for security level is recorded correctly for HTTP -// pages. -IN_PROC_BROWSER_TEST_F( - SecurityStateTabHelperTestWithAutoupgradesAndHttpWarningsDisabled, - HTTPSecurityLevelHistogram) { - const char kHistogramName[] = "Security.SecurityLevel.NoncryptographicScheme"; - - { - base::HistogramTester histograms; - // Use a non-local hostname so that the page is treated as Not Secure. - ui_test_utils::NavigateToURL( - browser(), - GetURLWithNonLocalHostname(embedded_test_server(), "/title1.html")); - histograms.ExpectUniqueSample(kHistogramName, security_state::WARNING, 1); - } -} - // Tests that the histogram for security level is recorded correctly for HTTPS // pages. IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTestWithAutoupgradesDisabled,
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index 7c2cba6..afa8caab 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -1910,47 +1910,6 @@ EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); } -class SSLUITestWithHttpDangerous : public SSLUITest { - public: - SSLUITestWithHttpDangerous() { - feature_list_.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -// Ensure that non-standard origins are marked as neutral when the -// MarkNonSecureAs Dangerous flag is enabled. -IN_PROC_BROWSER_TEST_F(SSLUITestWithHttpDangerous, MarkFileAsNonSecure) { - WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(contents); - - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - ui_test_utils::NavigateToURL(browser(), GURL("file:///")); - EXPECT_EQ(security_state::NONE, helper->GetSecurityLevel()); -} - -// Ensure that about-protocol origins are marked as neutral when the -// MarkNonSecureAs Dangerous flag is enabled. -IN_PROC_BROWSER_TEST_F(SSLUITestWithHttpDangerous, MarkAboutAsNonSecure) { - WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(contents); - - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); - EXPECT_EQ(security_state::NONE, helper->GetSecurityLevel()); -} - // Data URLs should always be marked as non-secure. IN_PROC_BROWSER_TEST_F(SSLUITest, MarkDataAsNonSecure) { WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); @@ -1964,40 +1923,6 @@ EXPECT_EQ(security_state::WARNING, helper->GetSecurityLevel()); } -// Ensure that HTTP-protocol origins are marked as Dangerous when the -// MarkNonSecureAs Dangerous flag is enabled. -IN_PROC_BROWSER_TEST_F(SSLUITestWithHttpDangerous, MarkHTTPAsDangerous) { - ASSERT_TRUE(embedded_test_server()->Start()); - - // Navigate to a non-local HTTP page. - GURL url = embedded_test_server()->GetURL("/ssl/google.html"); - GURL::Replacements http_url_replacements; - http_url_replacements.SetHostStr("example.test"); - url = url.ReplaceComponents(http_url_replacements); - ui_test_utils::NavigateToURL(browser(), url); - WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); - SecurityStateTabHelper* helper = SecurityStateTabHelper::FromWebContents(tab); - ASSERT_TRUE(helper); - - EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel()); -} - -// Ensure that blob-protocol origins are marked as neutral when the -// MarkNonSecureAs Dangerous flag is enabled. -IN_PROC_BROWSER_TEST_F(SSLUITestWithHttpDangerous, MarkBlobAsNonSecure) { - WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(contents); - - SecurityStateTabHelper* helper = - SecurityStateTabHelper::FromWebContents(contents); - ASSERT_TRUE(helper); - - ui_test_utils::NavigateToURL( - browser(), - GURL("blob:chrome://newtab/49a463bb-fac8-476c-97bf-5d7076c3ea1a")); - EXPECT_EQ(security_state::NONE, helper->GetSecurityLevel()); -} - // TODO(crbug.com/1148302): This class directly calls // `GetNSSCertDatabaseForProfile()` that causes crash at the moment and is never // called from Lacros-Chrome. This should be revisited when there is a solution
diff --git a/chrome/browser/sync/profile_sync_service_android.cc b/chrome/browser/sync/profile_sync_service_android.cc index 422210d..c35aad0 100644 --- a/chrome/browser/sync/profile_sync_service_android.cc +++ b/chrome/browser/sync/profile_sync_service_android.cc
@@ -147,6 +147,12 @@ sync_service_->GetUserSettings()->SetSyncRequested(false); } +jboolean ProfileSyncServiceAndroid::IsSyncAllowedByPlatform( + JNIEnv* env, + const JavaParamRef<jobject>& obj) { + return sync_service_->GetUserSettings()->IsSyncAllowedByPlatform(); +} + void ProfileSyncServiceAndroid::SetSyncAllowedByPlatform( JNIEnv* env, const JavaParamRef<jobject>& obj,
diff --git a/chrome/browser/sync/profile_sync_service_android.h b/chrome/browser/sync/profile_sync_service_android.h index 9c825e72..50fe384 100644 --- a/chrome/browser/sync/profile_sync_service_android.h +++ b/chrome/browser/sync/profile_sync_service_android.h
@@ -45,6 +45,9 @@ const base::android::JavaParamRef<jobject>& obj); void RequestStop(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); + jboolean IsSyncAllowedByPlatform( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj); void SetSyncAllowedByPlatform(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, jboolean allowed);
diff --git a/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc b/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc index d475cca..bd78a73 100644 --- a/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc
@@ -4,13 +4,23 @@ #include "base/macros.h" #include "chrome/browser/search_engines/template_url_service_factory.h" +#include "chrome/browser/search_engines/template_url_service_test_util.h" #include "chrome/browser/sync/test/integration/search_engines_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h" #include "chrome/test/base/search_test_utils.h" +#include "components/search_engines/template_url.h" +#include "components/search_engines/template_url_data.h" #include "components/search_engines/template_url_service.h" #include "components/sync/driver/profile_sync_service.h" +#include "components/sync/engine_impl/loopback_server/loopback_server_entity.h" +#include "components/sync/engine_impl/loopback_server/persistent_unique_client_entity.h" +#include "components/sync/model/sync_data.h" #include "content/public/test/browser_test.h" +#include "testing/gmock/include/gmock/gmock.h" + +using search_engines_helper::HasSearchEngine; +using testing::NotNull; class SingleClientSearchEnginesSyncTest : public SyncTest { public: @@ -35,6 +45,18 @@ // TODO(crbug.com/1137771): rewrite test to not use verifier. return true; } + + std::unique_ptr<syncer::LoopbackServerEntity> CreateFromTemplateURL( + std::unique_ptr<TemplateURL> turl) { + DCHECK(turl); + syncer::SyncData sync_data = + TemplateURLService::CreateSyncDataFromTemplateURL(*turl); + return syncer::PersistentUniqueClientEntity::CreateFromSpecificsForTesting( + /*non_unique_name=*/sync_data.GetTitle(), + /*client_tag=*/turl->sync_guid(), sync_data.GetSpecifics(), + /*creation_time=*/0, + /*last_modified_time=*/0); + } }; IN_PROC_BROWSER_TEST_F(SingleClientSearchEnginesSyncTest, Sanity) { @@ -45,3 +67,45 @@ ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); ASSERT_TRUE(search_engines_helper::ServiceMatchesVerifier(0)); } + +IN_PROC_BROWSER_TEST_F(SingleClientSearchEnginesSyncTest, + DuplicateKeywordEnginesAllFromSync) { + ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; + TemplateURLService* service = + search_engines_helper::GetServiceForBrowserContext(0); + ASSERT_FALSE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_FALSE(service->GetTemplateURLForGUID("guid1")); + ASSERT_FALSE(service->GetTemplateURLForGUID("guid2")); + ASSERT_FALSE(service->GetTemplateURLForGUID("guid3")); + + // Create two TemplateURLs with the same keyword, but different guids. + // "guid2" is newer, so it should be treated as better. + fake_server_->InjectEntity(CreateFromTemplateURL(CreateTestTemplateURL( + /*keyword=*/base::ASCIIToUTF16("key1"), /*url=*/"http://key1.com", + /*guid=*/"guid1", /*last_mod=*/10))); + fake_server_->InjectEntity(CreateFromTemplateURL(CreateTestTemplateURL( + /*keyword=*/base::ASCIIToUTF16("key1"), /*url=*/"http://key1.com", + /*guid=*/"guid2", /*last_mod=*/5))); + fake_server_->InjectEntity(CreateFromTemplateURL(CreateTestTemplateURL( + /*keyword=*/base::ASCIIToUTF16("key1"), /*url=*/"http://key1.com", + /*guid=*/"guid3", /*last_mod=*/5))); + + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; + ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + TemplateURL* guid1 = service->GetTemplateURLForGUID("guid1"); + TemplateURL* guid2 = service->GetTemplateURLForGUID("guid2"); + TemplateURL* guid3 = service->GetTemplateURLForGUID("guid3"); + ASSERT_THAT(guid1, NotNull()); + ASSERT_THAT(guid2, NotNull()); + ASSERT_THAT(guid3, NotNull()); + // All three should retain their "key1" keywords, even if they are duplicates. + EXPECT_EQ(base::ASCIIToUTF16("key1"), guid1->keyword()); + EXPECT_EQ(base::ASCIIToUTF16("key1"), guid2->keyword()); + EXPECT_EQ(base::ASCIIToUTF16("key1"), guid3->keyword()); + + // But "guid1" should be considered the "best", as it's the most recent. + EXPECT_EQ(guid1, + service->GetTemplateURLForKeyword(base::ASCIIToUTF16("key1"))); +}
diff --git a/chrome/browser/ui/ash/assistant/assistant_browsertest.cc b/chrome/browser/ui/ash/assistant/assistant_browsertest.cc index 6ed21981..a2379d0 100644 --- a/chrome/browser/ui/ash/assistant/assistant_browsertest.cc +++ b/chrome/browser/ui/ash/assistant/assistant_browsertest.cc
@@ -25,6 +25,15 @@ constexpr int kStartBrightnessPercent = 50; +// Ensures that |value_| is within the range {min_, max_}. If it isn't, this +// will print a nice error message. +#define EXPECT_WITHIN_RANGE(min_, value_, max_) \ + ({ \ + EXPECT_TRUE(min_ <= value_ && value_ <= max_) \ + << "Expected " << value_ << " to be within the range " \ + << "{" << min_ << ", " << max_ << "}."; \ + }) + } // namespace class AssistantBrowserTest : public MixinBasedInProcessBrowserTest {
diff --git a/chrome/browser/ui/ash/assistant/assistant_timers_browsertest.cc b/chrome/browser/ui/ash/assistant/assistant_timers_browsertest.cc index 206e2f9..1908384 100644 --- a/chrome/browser/ui/ash/assistant/assistant_timers_browsertest.cc +++ b/chrome/browser/ui/ash/assistant/assistant_timers_browsertest.cc
@@ -257,9 +257,11 @@ // Start a timer for five minutes. tester()->SendTextQuery("Set a timer for 5 minutes"); tester()->ExpectAnyOfTheseTextResponses({ - "Alright, 5 min.", - "OK, 5 min.", - "Sure, 5 min.", + "Alright, 5 min. Starting… now.", + "OK, 5 min. And we're starting… now.", + "OK, 5 min. Starting… now.", + "Sure, 5 min. And that's starting… now.", + "Sure, 5 min. Starting now.", }); // Tap status area widget (to show notifications in the Message Center).
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 3dd7a7f..93bc1b42 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -861,7 +861,7 @@ bool Browser::TryToCloseWindow( bool skip_beforeunload, - const base::Callback<void(bool)>& on_close_confirmed) { + const base::RepeatingCallback<void(bool)>& on_close_confirmed) { cancel_download_confirmation_state_ = RESPONSE_RECEIVED; return unload_controller_.TryToCloseWindow(skip_beforeunload, on_close_confirmed); @@ -895,6 +895,10 @@ session_service->SetWindowUserTitle(session_id(), user_title); } +StatusBubble* Browser::GetStatusBubbleForTesting() { + return GetStatusBubble(); +} + void Browser::OnWindowClosing() { if (!ShouldCloseWindow()) return; @@ -2689,11 +2693,14 @@ // Browser, Getters for UI (private): StatusBubble* Browser::GetStatusBubble() { - // In kiosk and exclusive app mode, we want to always hide the status bubble. - if (chrome::IsRunningInAppMode()) - return NULL; + // In kiosk and exclusive app mode we want to always hide the status bubble. + if (chrome::IsRunningInAppMode() || + (base::FeatureList::IsEnabled(features::kRemoveStatusBarInWebApps) && + web_app::AppBrowserController::IsForWebAppBrowser(this))) { + return nullptr; + } - return window_ ? window_->GetStatusBubble() : NULL; + return window_ ? window_->GetStatusBubble() : nullptr; } /////////////////////////////////////////////////////////////////////////////// @@ -2751,8 +2758,8 @@ cancel_download_confirmation_state_ = WAITING_FOR_RESPONSE; window_->ConfirmBrowserCloseWithPendingDownloads( num_downloads_blocking, dialog_type, - base::Bind(&Browser::InProgressDownloadResponse, - weak_factory_.GetWeakPtr())); + base::BindOnce(&Browser::InProgressDownloadResponse, + weak_factory_.GetWeakPtr())); // Return false so the browser does not close. We'll close if the user // confirms in the dialog.
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 9c880452..923b9d25 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -460,8 +460,9 @@ // Note that if the browser window has been used before, users should always // have a chance to save their work before the window is closed without // triggering beforeunload event. - bool TryToCloseWindow(bool skip_beforeunload, - const base::Callback<void(bool)>& on_close_confirmed); + bool TryToCloseWindow( + bool skip_beforeunload, + const base::RepeatingCallback<void(bool)>& on_close_confirmed); // Clears the results of any beforeunload confirmation dialogs triggered by a // TryToCloseWindow call. @@ -683,6 +684,8 @@ // Sets the browser's user title. Setting it to an empty string clears it. void SetWindowUserTitle(const std::string& user_title); + StatusBubble* GetStatusBubbleForTesting(); + private: friend class BrowserTest; friend class ExclusiveAccessTest;
diff --git a/chrome/browser/ui/browser_tab_strip_model_delegate.cc b/chrome/browser/ui/browser_tab_strip_model_delegate.cc index 89be4978..9762319 100644 --- a/chrome/browser/ui/browser_tab_strip_model_delegate.cc +++ b/chrome/browser/ui/browser_tab_strip_model_delegate.cc
@@ -29,6 +29,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" #include "ipc/ipc_message.h" +#include "ui/gfx/range/range.h" namespace chrome { @@ -133,10 +134,16 @@ void BrowserTabStripModelDelegate::MoveGroupToNewWindow( const tab_groups::TabGroupId& group) { - std::vector<int> indices = browser_->tab_strip_model() - ->group_model() - ->GetTabGroup(group) - ->ListTabs(); + gfx::Range range = browser_->tab_strip_model() + ->group_model() + ->GetTabGroup(group) + ->ListTabs(); + + std::vector<int> indices; + indices.reserve(range.length()); + for (auto i = range.start(); i < range.end(); ++i) + indices.push_back(i); + // chrome:: to disambiguate the free function from // BrowserTabStripModelDelegate::MoveTabsToNewWindow(). chrome::MoveTabsToNewWindow(browser_, indices, group);
diff --git a/chrome/browser/ui/browser_tabrestore.cc b/chrome/browser/ui/browser_tabrestore.cc index 39a5cea..b1411c7b 100644 --- a/chrome/browser/ui/browser_tabrestore.cc +++ b/chrome/browser/ui/browser_tabrestore.cc
@@ -28,6 +28,7 @@ #include "content/public/browser/web_contents.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" #include "ui/gfx/geometry/size.h" +#include "ui/gfx/range/range.h" using content::NavigationEntry; using content::RestoreType; @@ -149,11 +150,10 @@ // If inserting at |tab_index| would put the tab within a different // group, adjust the index to put it outside. if (surrounding_group && surrounding_group != group) { - const int last_tab_in_group = tab_strip_model->group_model() - ->GetTabGroup(*surrounding_group) - ->ListTabs() - .back(); - tab_index = last_tab_in_group + 1; + tab_index = tab_strip_model->group_model() + ->GetTabGroup(*surrounding_group) + ->ListTabs() + .end(); } WebContents* raw_web_contents = web_contents.get();
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h index 32528a6..c24ad69 100644 --- a/chrome/browser/ui/browser_window.h +++ b/chrome/browser/ui/browser_window.h
@@ -413,7 +413,7 @@ virtual void ConfirmBrowserCloseWithPendingDownloads( int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) = 0; + base::OnceCallback<void(bool)> callback) = 0; // ThemeService calls this when a user has changed their theme, indicating // that it's time to redraw everything.
diff --git a/chrome/browser/ui/cocoa/applescript/window_applescript_test.mm b/chrome/browser/ui/cocoa/applescript/window_applescript_test.mm index 8e30659..75d12d6 100644 --- a/chrome/browser/ui/cocoa/applescript/window_applescript_test.mm +++ b/chrome/browser/ui/cocoa/applescript/window_applescript_test.mm
@@ -5,7 +5,6 @@ #import <Cocoa/Cocoa.h> #import "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" #import "base/mac/scoped_nsobject.h" #include "base/strings/sys_string_conversions.h" #import "chrome/browser/app_controller_mac.h" @@ -149,8 +148,6 @@ // Getting and setting values from the NSWindow. IN_PROC_BROWSER_TEST_F(WindowAppleScriptTest, NSWindowTest) { - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 base::scoped_nsobject<WindowAppleScript> aWindow( [[WindowAppleScript alloc] initWithBrowser:browser()]); [aWindow.get() setValue:[NSNumber numberWithBool:YES]
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm index 1dc779b3..6c11960 100644 --- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm +++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm
@@ -8,7 +8,6 @@ #include <memory> #import "base/mac/foundation_util.h" -#import "base/mac/mac_util.h" #import "base/mac/scoped_cftyperef.h" #import "base/mac/scoped_nsobject.h" #include "base/macros.h" @@ -233,8 +232,6 @@ // Test Minimize, Restore combinations with their native equivalents. IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Minimize) { - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 SetUpAppWithWindows(1); AppWindow* app_window = GetFirstAppWindow(); extensions::NativeAppWindow* window = app_window->GetBaseWindow(); @@ -360,8 +357,6 @@ // Test Minimize, Maximize, Restore combinations with their native equivalents. IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, MinimizeMaximize) { - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 SetUpAppWithWindows(1); AppWindow* app_window = GetFirstAppWindow(); extensions::NativeAppWindow* window = app_window->GetBaseWindow();
diff --git a/chrome/browser/ui/cocoa/dock_icon.mm b/chrome/browser/ui/cocoa/dock_icon.mm index ca03f64..d0f2430 100644 --- a/chrome/browser/ui/cocoa/dock_icon.mm +++ b/chrome/browser/ui/cocoa/dock_icon.mm
@@ -136,15 +136,8 @@ NSSize countSize = NSZeroSize; base::scoped_nsobject<NSAttributedString> countAttrString; while (1) { - NSFont* countFont; - if (@available(macOS 10.11, *)) { - countFont = - [NSFont systemFontOfSize:countFontSize weight:NSFontWeightMedium]; - } else { - countFont = [[NSFontManager sharedFontManager] - convertWeight:YES - ofFont:[NSFont systemFontOfSize:countFontSize]]; - } + NSFont* countFont = [NSFont systemFontOfSize:countFontSize + weight:NSFontWeightMedium]; // This will generally be plain Helvetica. if (!countFont)
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa_browsertest.mm index 37a90d1..e9ad4625 100644 --- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa_browsertest.mm +++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa_browsertest.mm
@@ -5,7 +5,6 @@ #include "chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.h" #include "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/extensions/application_launch.h" @@ -97,12 +96,6 @@ // Confirm that Services items were removed from the contextual menu. - // Note that in macOS 10.10, a subset of the services are added directly to - // the contextual menu, none of which are the removed ones, so this test isn't - // applicable to that version. - if (base::mac::IsOS10_10()) - return; - bool was_safari_item_removed = false; bool was_open_url_item_removed = false;
diff --git a/chrome/browser/ui/cocoa/task_manager_mac.mm b/chrome/browser/ui/cocoa/task_manager_mac.mm index 2d51e62..b007dcd 100644 --- a/chrome/browser/ui/cocoa/task_manager_mac.mm +++ b/chrome/browser/ui/cocoa/task_manager_mac.mm
@@ -323,13 +323,8 @@ [dataCell setAlignment:textAlignment]; const CGFloat smallSystemFontSize = [NSFont smallSystemFontSize]; - NSFont* font = nil; - if (@available(macOS 10.11, *)) { - font = [NSFont monospacedDigitSystemFontOfSize:smallSystemFontSize - weight:NSFontWeightRegular]; - } else { - font = [NSFont systemFontOfSize:smallSystemFontSize]; - } + NSFont* font = [NSFont monospacedDigitSystemFontOfSize:smallSystemFontSize + weight:NSFontWeightRegular]; [dataCell setFont:font]; [column.get() setHidden:!columnData.default_visibility];
diff --git a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc index e863e64..f72dd99 100644 --- a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc +++ b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc
@@ -91,18 +91,12 @@ std::unique_ptr<WellKnownChangePasswordNavigationThrottle> WellKnownChangePasswordNavigationThrottle::MaybeCreateThrottleFor( NavigationHandle* handle) { - const GURL& url = handle->GetURL(); - // The order is important. We have to check if it as a well-known change - // password url first. We should only check the feature flag when the feature - // would be used. Otherwise the we would not see a difference between control - // and experiment groups on the dashboards. - if (handle->IsInMainFrame() && IsWellKnownChangePasswordUrl(url) && - IsTriggeredByGoogleOwnedUI(handle) && - base::FeatureList::IsEnabled( - password_manager::features::kWellKnownChangePassword)) { - return base::WrapUnique( - new WellKnownChangePasswordNavigationThrottle(handle)); + if (handle->IsInMainFrame() && + IsWellKnownChangePasswordUrl(handle->GetURL()) && + IsTriggeredByGoogleOwnedUI(handle)) { + return std::make_unique<WellKnownChangePasswordNavigationThrottle>(handle); } + return nullptr; }
diff --git a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h index 1c24eb1..85c19cc 100644 --- a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h +++ b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h
@@ -34,11 +34,14 @@ : public content::NavigationThrottle, public password_manager::WellKnownChangePasswordStateDelegate { public: - ~WellKnownChangePasswordNavigationThrottle() override; - static std::unique_ptr<WellKnownChangePasswordNavigationThrottle> MaybeCreateThrottleFor(content::NavigationHandle* handle); + explicit WellKnownChangePasswordNavigationThrottle( + content::NavigationHandle* handle); + + ~WellKnownChangePasswordNavigationThrottle() override; + // We don't need to override WillRedirectRequest since a redirect is the // expected behaviour and does not need manual intervention. // content::NavigationThrottle: @@ -48,8 +51,6 @@ const char* GetNameForLogging() override; private: - explicit WellKnownChangePasswordNavigationThrottle( - content::NavigationHandle* handle); // password_manager::WellKnownChangePasswordStateDelegate: void OnProcessingFinished(bool is_supported) override; // Redirects to a given URL in the same tab.
diff --git a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_browsertest.cc b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_browsertest.cc index 46f67d98..dcb300e0 100644 --- a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_browsertest.cc +++ b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_browsertest.cc
@@ -188,22 +188,15 @@ // Browser Test that checks navigation to /.well-known/change-password path and // redirection to change password URL returned by Change Password Service. -// Enables kWellKnownChangePassword feature. class WellKnownChangePasswordNavigationThrottleBrowserTest : public ChangePasswordNavigationThrottleBrowserTestBase { public: - WellKnownChangePasswordNavigationThrottleBrowserTest() { - feature_list_.InitAndEnableFeature( - password_manager::features::kWellKnownChangePassword); - } - void SetUpOnMainThread() override; void TestNavigationThrottleForLocalhost(const std::string& expected_path); MockChangePasswordUrlService* url_service_ = nullptr; private: - base::test::ScopedFeatureList feature_list_; }; void WellKnownChangePasswordNavigationThrottleBrowserTest::SetUpOnMainThread() { @@ -483,16 +476,13 @@ constexpr char kExample2ChangePasswordRelativeUrl[] = "/change-pwd"; // Browser Test that checks redirection to change password URL returned by -// Affiliation Service. Enables kWellKnownChangePassword and -// kChangePasswordAffiliationInfo features. +// Affiliation Service. Enables kChangePasswordAffiliationInfo feature. class AffiliationChangePasswordNavigationThrottleBrowserTest : public ChangePasswordNavigationThrottleBrowserTestBase { public: AffiliationChangePasswordNavigationThrottleBrowserTest() { - feature_list_.InitWithFeatures( - {password_manager::features::kWellKnownChangePassword, - password_manager::features::kChangePasswordAffiliationInfo}, - {}); + feature_list_.InitAndEnableFeature( + password_manager::features::kChangePasswordAffiliationInfo); sync_service_.SetFirstSetupComplete(true); sync_service_.SetIsUsingSecondaryPassphrase(false); }
diff --git a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_unittest.cc b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_unittest.cc index 0b24e0f..90d0706 100644 --- a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_unittest.cc +++ b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle_unittest.cc
@@ -4,9 +4,7 @@ #include "chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h" #include "base/optional.h" -#include "base/test/scoped_feature_list.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "components/password_manager/core/common/password_manager_features.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/test/mock_navigation_handle.h" @@ -29,17 +27,9 @@ } // namespace -// Test with parameter for kWellKnownChangePassword feature state. class WellKnownChangePasswordNavigationThrottleTest - : public ChromeRenderViewHostTestHarness, - public testing::WithParamInterface<bool> { + : public ChromeRenderViewHostTestHarness { public: - WellKnownChangePasswordNavigationThrottleTest() { - bool flag_enabled = GetParam(); - scoped_features_.InitWithFeatureState( - password_manager::features::kWellKnownChangePassword, flag_enabled); - } - void SetUp() override { ChromeRenderViewHostTestHarness::SetUp(); content::RenderFrameHostTester::For(main_rfh()) @@ -48,8 +38,6 @@ ->AppendChild("subframe"); } - ~WellKnownChangePasswordNavigationThrottleTest() override = default; - content::RenderFrameHost* subframe() const { return subframe_; } std::unique_ptr<WellKnownChangePasswordNavigationThrottle> @@ -64,43 +52,38 @@ } private: - base::test::ScopedFeatureList scoped_features_; content::RenderFrameHost* subframe_ = nullptr; }; -TEST_P(WellKnownChangePasswordNavigationThrottleTest, +TEST_F(WellKnownChangePasswordNavigationThrottleTest, CreateNavigationThrottle_ChangePasswordUrl) { - bool flag_enabled = GetParam(); // change-password url without trailing slash GURL url("https://google.com/.well-known/change-password"); - EXPECT_EQ(!!CreateNavigationThrottle({url}), flag_enabled); + EXPECT_TRUE(CreateNavigationThrottle({url})); // change-password url with trailing slash url = GURL("https://google.com/.well-known/change-password/"); - EXPECT_EQ(!!CreateNavigationThrottle({url}), flag_enabled); + EXPECT_TRUE(CreateNavigationThrottle({url})); } -TEST_P(WellKnownChangePasswordNavigationThrottleTest, +TEST_F(WellKnownChangePasswordNavigationThrottleTest, CreateNavigationThrottle_ChangePasswordUrl_FromGoogleLink) { - bool flag_enabled = GetParam(); - EXPECT_EQ(!!CreateNavigationThrottle({ - .url = GURL("https://google.com/.well-known/change-password"), - .page_transition = ui::PAGE_TRANSITION_LINK, - .initiator_origin = url::Origin::Create( - GURL("chrome://settings/passwords/check")), - }), - flag_enabled); + EXPECT_TRUE(CreateNavigationThrottle({ + .url = GURL("https://google.com/.well-known/change-password"), + .page_transition = ui::PAGE_TRANSITION_LINK, + .initiator_origin = + url::Origin::Create(GURL("chrome://settings/passwords/check")), + })); - EXPECT_EQ(!!CreateNavigationThrottle({ - .url = GURL("https://google.com/.well-known/change-password/"), - .page_transition = ui::PAGE_TRANSITION_LINK, - .initiator_origin = url::Origin::Create( - GURL("https://passwords.google.com/checkup")), - }), - flag_enabled); + EXPECT_TRUE(CreateNavigationThrottle({ + .url = GURL("https://google.com/.well-known/change-password/"), + .page_transition = ui::PAGE_TRANSITION_LINK, + .initiator_origin = + url::Origin::Create(GURL("https://passwords.google.com/checkup")), + })); } -TEST_P(WellKnownChangePasswordNavigationThrottleTest, +TEST_F(WellKnownChangePasswordNavigationThrottleTest, NeverCreateNavigationThrottle_FromOtherLink) { EXPECT_FALSE(CreateNavigationThrottle({ .url = GURL("https://google.com/.well-known/change-password"), @@ -115,7 +98,7 @@ })); } -TEST_P(WellKnownChangePasswordNavigationThrottleTest, +TEST_F(WellKnownChangePasswordNavigationThrottleTest, NeverCreateNavigationThrottle_DifferentUrl) { GURL url("https://google.com/.well-known/time"); EXPECT_FALSE(CreateNavigationThrottle({url})); @@ -132,17 +115,13 @@ // A WellKnownChangePasswordNavigationThrottle should never be created for a // navigation initiated by a subframe. -TEST_P(WellKnownChangePasswordNavigationThrottleTest, +TEST_F(WellKnownChangePasswordNavigationThrottleTest, NeverCreateNavigationThrottle_Subframe) { // change-password url without trailing slash GURL url("https://google.com/.well-known/change-password"); - EXPECT_EQ(CreateNavigationThrottle({url, subframe()}), nullptr); + EXPECT_FALSE(CreateNavigationThrottle({url, subframe()})); // change-password url with trailing slash url = GURL("https://google.com/.well-known/change-password/"); - EXPECT_EQ(CreateNavigationThrottle({url, subframe()}), nullptr); + EXPECT_FALSE(CreateNavigationThrottle({url, subframe()})); } - -INSTANTIATE_TEST_SUITE_P(All, - WellKnownChangePasswordNavigationThrottleTest, - testing::Bool());
diff --git a/chrome/browser/ui/tabs/tab_group.cc b/chrome/browser/ui/tabs/tab_group.cc index 09c187c..51164da6 100644 --- a/chrome/browser/ui/tabs/tab_group.cc +++ b/chrome/browser/ui/tabs/tab_group.cc
@@ -9,6 +9,7 @@ #include <utility> #include <vector> +#include "base/check_op.h" #include "base/optional.h" #include "base/strings/string16.h" #include "chrome/browser/ui/tab_ui_helper.h" @@ -38,12 +39,14 @@ } base::string16 TabGroup::GetContentString() const { - std::vector<int> tabs_in_group = ListTabs(); + gfx::Range tabs_in_group = ListTabs(); + DCHECK_GT(tabs_in_group.length(), 0u); + TabUIHelper* const tab_ui_helper = TabUIHelper::FromWebContents( - controller_->GetWebContentsAt(tabs_in_group.front())); + controller_->GetWebContentsAt(tabs_in_group.start())); constexpr size_t kContextMenuTabTitleMaxLength = 30; base::string16 format_string = l10n_util::GetPluralStringFUTF16( - IDS_TAB_CXMENU_PLACEHOLDER_GROUP_TITLE, tabs_in_group.size() - 1); + IDS_TAB_CXMENU_PLACEHOLDER_GROUP_TITLE, tabs_in_group.length() - 1); base::string16 short_title; gfx::ElideString(tab_ui_helper->GetTitle(), kContextMenuTabTitleMaxLength, &short_title); @@ -76,11 +79,39 @@ return is_customized_; } -std::vector<int> TabGroup::ListTabs() const { - std::vector<int> result; +base::Optional<int> TabGroup::GetFirstTab() const { for (int i = 0; i < controller_->GetTabCount(); ++i) { if (controller_->GetTabGroupForTab(i) == id_) - result.push_back(i); + return i; } - return result; + + return base::nullopt; +} + +base::Optional<int> TabGroup::GetLastTab() const { + for (int i = controller_->GetTabCount() - 1; i >= 0; --i) { + if (controller_->GetTabGroupForTab(i) == id_) + return i; + } + + return base::nullopt; +} + +gfx::Range TabGroup::ListTabs() const { + base::Optional<int> maybe_first_tab = GetFirstTab(); + if (!maybe_first_tab) + return gfx::Range(); + + int first_tab = maybe_first_tab.value(); + // Safe to assume GetLastTab() is not nullopt. + int last_tab = GetLastTab().value(); + + // If DCHECKs are enabled, check for group contiguity. The result + // doesn't really make sense if the group is discontiguous. + if (DCHECK_IS_ON()) { + for (int i = first_tab; i <= last_tab; ++i) + DCHECK(controller_->GetTabGroupForTab(i) == id_); + } + + return gfx::Range(first_tab, last_tab + 1); }
diff --git a/chrome/browser/ui/tabs/tab_group.h b/chrome/browser/ui/tabs/tab_group.h index 0fd0f55..176c658 100644 --- a/chrome/browser/ui/tabs/tab_group.h +++ b/chrome/browser/ui/tabs/tab_group.h
@@ -15,6 +15,7 @@ #include "base/strings/string16.h" #include "components/tab_groups/tab_group_id.h" #include "components/tab_groups/tab_group_visual_data.h" +#include "ui/gfx/range/range.h" class TabGroupController; @@ -56,16 +57,44 @@ // controller that contents changed when a tab is removed. void RemoveTab(); + // The number of tabs in this group, determined by AddTab() and + // RemoveTab() calls. + int tab_count() const { return tab_count_; } + // Returns whether the group has no tabs. bool IsEmpty() const; // Returns whether the user has explicitly set the visual data themselves. bool IsCustomized() const; - // Returns the model indices of all tabs in this group. Notably does not rely - // on the TabGroup's internal metadata, but rather traverses directly through - // the tabs in TabStripModel. - std::vector<int> ListTabs() const; + // Gets the model index of this group's first tab, or nullopt if it is + // empty. Similar to ListTabs() it traverses through TabStripModel's + // tabs. Unlike ListTabs() this is always safe to call. + base::Optional<int> GetFirstTab() const; + + // Gets the model index of this group's last tab, or nullopt if it is + // empty. Similar to ListTabs() it traverses through TabStripModel's + // tabs. Unlike ListTabs() this is always safe to call. + base::Optional<int> GetLastTab() const; + + // Returns the range of tab model indices this group contains. Notably + // does not rely on the TabGroup's internal metadata, but rather + // traverses directly through the tabs in TabStripModel. + // + // The returned range will never be a reverse range. It will always be + // a forward range, or the empty range {0,0}. + // + // This method can only be called when a group is contiguous. A group + // may not be contiguous in some TabStripModel intermediate states. + // Notably, any operation that groups tabs then moves them into + // position exposes these states. + // + // This is only a concern for TabStripModelObservers who query + // TabStripModel after observer notifications. While each call to + // TabStripModel's public API leaves groups in a contiguous state, + // observers are notified of some changes in during intermediate + // steps. + gfx::Range ListTabs() const; private: TabGroupController* controller_;
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc index 504b535..5832876 100644 --- a/chrome/browser/ui/tabs/tab_strip_model.cc +++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -54,6 +54,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/range/range.h" #include "ui/gfx/text_elider.h" using base::UserMetricsAction; @@ -667,13 +668,14 @@ DCHECK_NE(to_index, kNoTab); - std::vector<int> tabs_in_group = group_model_->GetTabGroup(group)->ListTabs(); + gfx::Range tabs_in_group = group_model_->GetTabGroup(group)->ListTabs(); + DCHECK_GT(tabs_in_group.length(), 0u); - int from_index = tabs_in_group.front(); + int from_index = tabs_in_group.start(); if (to_index < from_index) - from_index = tabs_in_group.back(); + from_index = tabs_in_group.end() - 1; - for (size_t i = 0; i < tabs_in_group.size(); ++i) + for (size_t i = 0; i < tabs_in_group.length(); ++i) MoveWebContentsAtImpl(from_index, to_index, false); MoveTabGroup(group); @@ -962,11 +964,11 @@ // at the end of the tab strip. Extensions can insert at an arbitrary index, // so we have to handle the general case. if (group.has_value()) { - auto grouped_tabs = group_model_->GetTabGroup(group.value())->ListTabs(); - if (grouped_tabs.size() > 0) { - DCHECK(base::ranges::is_sorted(grouped_tabs)); - index = base::ClampToRange(index, grouped_tabs.front(), - grouped_tabs.back() + 1); + gfx::Range grouped_tabs = + group_model_->GetTabGroup(group.value())->ListTabs(); + if (grouped_tabs.length() > 0) { + index = base::ClampToRange(index, static_cast<int>(grouped_tabs.start()), + static_cast<int>(grouped_tabs.end())); } } else if (GetTabGroupForTab(index - 1) == GetTabGroupForTab(index)) { group = GetTabGroupForTab(index); @@ -1119,23 +1121,29 @@ } for (const auto& kv : indices_per_tab_group) { - const std::vector<int>& tabs_in_group = - group_model_->GetTabGroup(kv.first)->ListTabs(); + const TabGroup* group = group_model_->GetTabGroup(kv.first); + const int first_tab_in_group = group->GetFirstTab().value(); + const int last_tab_in_group = group->GetLastTab().value(); + + // This is an estimate. If the group is non-contiguous it will be + // larger than the true size. This can happen while dragging tabs in + // or out of a group. + const int num_tabs_in_group = last_tab_in_group - first_tab_in_group + 1; + const int group_midpoint = first_tab_in_group + num_tabs_in_group / 2; // Split group into |left_of_group| and |right_of_group| depending on // whether the index is closest to the left or right edge. std::vector<int> left_of_group; std::vector<int> right_of_group; for (int index : kv.second) { - if (index < tabs_in_group[tabs_in_group.size() / 2]) { + if (index < group_midpoint) { left_of_group.push_back(index); } else { right_of_group.push_back(index); } } - MoveTabsAndSetGroupImpl(left_of_group, tabs_in_group.front(), - base::nullopt); - MoveTabsAndSetGroupImpl(right_of_group, tabs_in_group.back() + 1, + MoveTabsAndSetGroupImpl(left_of_group, first_tab_in_group, base::nullopt); + MoveTabsAndSetGroupImpl(right_of_group, last_tab_in_group + 1, base::nullopt); } } @@ -1919,8 +1927,9 @@ // to move to. const TabGroup* group = group_model_->GetTabGroup(target_group.value()); if (group->visual_data()->is_collapsed()) { - const std::vector<int> tabs_in_group = group->ListTabs(); - target_index = forward ? tabs_in_group.back() : tabs_in_group.front(); + const gfx::Range tabs_in_group = group->ListTabs(); + target_index = + forward ? tabs_in_group.end() - 1 : tabs_in_group.start(); } else { GroupTab(current_index, target_group.value()); return; @@ -2040,8 +2049,9 @@ // Unpin tabs when grouping -- the states should be mutually exclusive. std::vector<int> new_indices = SetTabsPinned(indices, false); - std::vector<int> tabs_in_group = group_model_->GetTabGroup(group)->ListTabs(); - DCHECK(base::ranges::is_sorted(tabs_in_group)); + const TabGroup* group_object = group_model_->GetTabGroup(group); + int first_tab_in_group = group_object->GetFirstTab().value(); + int last_tab_in_group = group_object->GetLastTab().value(); // Split |new_indices| into |tabs_left_of_group| and |tabs_right_of_group| to // be moved to proper destination index. Directly set the group for indices @@ -2049,19 +2059,17 @@ std::vector<int> tabs_left_of_group; std::vector<int> tabs_right_of_group; for (int new_index : new_indices) { - if (new_index >= tabs_in_group.front() && - new_index <= tabs_in_group.back()) { + if (new_index >= first_tab_in_group && new_index <= last_tab_in_group) { GroupTab(new_index, group); - } else if (new_index < tabs_in_group.front()) { + } else if (new_index < first_tab_in_group) { tabs_left_of_group.push_back(new_index); } else { - DCHECK(new_index > tabs_in_group.back()); tabs_right_of_group.push_back(new_index); } } - MoveTabsAndSetGroupImpl(tabs_left_of_group, tabs_in_group.front(), group); - MoveTabsAndSetGroupImpl(tabs_right_of_group, tabs_in_group.back() + 1, group); + MoveTabsAndSetGroupImpl(tabs_left_of_group, first_tab_in_group, group); + MoveTabsAndSetGroupImpl(tabs_right_of_group, last_tab_in_group + 1, group); } void TabStripModel::MoveTabsAndSetGroupImpl( @@ -2272,13 +2280,13 @@ const auto old_group = GetTabGroupForTab(index); const auto new_left_group = GetTabGroupForTab(index - 1); const auto new_right_group = GetTabGroupForTab(index + 1); + if (old_group != new_left_group && old_group != new_right_group) { if (new_left_group == new_right_group && new_left_group.has_value()) { // The tab is in the middle of an existing group, so add it to that group. GroupTab(index, new_left_group.value()); } else if (old_group.has_value() && - group_model_->GetTabGroup(old_group.value())->ListTabs().size() > - 1) { + group_model_->GetTabGroup(old_group.value())->tab_count() > 1) { // The tab is between groups and its group is non-contiguous, so clear // this tab's group. UngroupTab(index);
diff --git a/chrome/browser/ui/uma_browsing_activity_observer.cc b/chrome/browser/ui/uma_browsing_activity_observer.cc index ff0b0256..2c3ebebf 100644 --- a/chrome/browser/ui/uma_browsing_activity_observer.cc +++ b/chrome/browser/ui/uma_browsing_activity_observer.cc
@@ -27,6 +27,7 @@ #include "content/public/browser/navigation_entry.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/render_process_host.h" +#include "ui/gfx/range/range.h" namespace chrome { namespace { @@ -190,7 +191,7 @@ ? tab_strip_model->group_model() ->GetTabGroup(active_group.value()) ->ListTabs() - .size() + .length() : 0); }
diff --git a/chrome/browser/ui/unload_controller.cc b/chrome/browser/ui/unload_controller.cc index bc373e54..800b2b4 100644 --- a/chrome/browser/ui/unload_controller.cc +++ b/chrome/browser/ui/unload_controller.cc
@@ -166,7 +166,7 @@ bool UnloadController::TryToCloseWindow( bool skip_beforeunload, - const base::Callback<void(bool)>& on_close_confirmed) { + const base::RepeatingCallback<void(bool)>& on_close_confirmed) { // The devtools browser gets its beforeunload events as the results of // intercepting events from the inspected tab, so don't send them here as // well. @@ -215,11 +215,8 @@ DevToolsWindow::OnPageCloseCanceled(*it); } tabs_needing_unload_fired_.clear(); - if (is_calling_before_unload_handlers()) { - base::Callback<void(bool)> on_close_confirmed = on_close_confirmed_; - on_close_confirmed_.Reset(); - on_close_confirmed.Run(false); - } + if (is_calling_before_unload_handlers()) + std::move(on_close_confirmed_).Run(false); is_attempting_to_close_browser_ = false; content::NotificationService::current()->Notify( @@ -334,7 +331,8 @@ ClearUnloadState(web_contents, true); } } else if (is_calling_before_unload_handlers()) { - base::Callback<void(bool)> on_close_confirmed = on_close_confirmed_; + base::RepeatingCallback<void(bool)> on_close_confirmed = + on_close_confirmed_; // Reset |on_close_confirmed_| in case the callback tests // |is_calling_before_unload_handlers()|, we want to return that calling // is complete.
diff --git a/chrome/browser/ui/unload_controller.h b/chrome/browser/ui/unload_controller.h index 23f7bc8..8d00a791 100644 --- a/chrome/browser/ui/unload_controller.h +++ b/chrome/browser/ui/unload_controller.h
@@ -63,8 +63,9 @@ // Begins the process of confirming whether the associated browser can be // closed. Beforeunload events won't be fired if |skip_beforeunload| // is true. - bool TryToCloseWindow(bool skip_beforeunload, - const base::Callback<void(bool)>& on_close_confirmed); + bool TryToCloseWindow( + bool skip_beforeunload, + const base::RepeatingCallback<void(bool)>& on_close_confirmed); // Clears the results of any beforeunload confirmation dialogs triggered by a // TryToCloseWindow call. @@ -147,8 +148,13 @@ // A callback to call to report whether the user chose to close all tabs of // |browser_| that have beforeunload event handlers. This is set only if we - // are currently confirming that the browser is closable. - base::Callback<void(bool)> on_close_confirmed_; + // are currently confirming that the browser is closable. This can be called + // more than once if a user confirms all the beforeunload prompts (at which + // point it will be called with true) but the window close is later aborted + // (at which point it will be called with false). This can happen when + // multiple browser windows are being closed together. See + // BrowserList::TryToCloseBrowserList. + base::RepeatingCallback<void(bool)> on_close_confirmed_; base::WeakPtrFactory<UnloadController> weak_factory_{this};
diff --git a/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc b/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc index c6922c7..e118fce 100644 --- a/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc +++ b/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc
@@ -21,17 +21,17 @@ gfx::NativeWindow parent, int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) { - DownloadInProgressDialogView* window = - new DownloadInProgressDialogView(download_count, dialog_type, callback); + base::OnceCallback<void(bool)> callback) { + DownloadInProgressDialogView* window = new DownloadInProgressDialogView( + download_count, dialog_type, std::move(callback)); constrained_window::CreateBrowserModalDialogViews(window, parent)->Show(); } DownloadInProgressDialogView::DownloadInProgressDialogView( int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) - : callback_(callback) { + base::OnceCallback<void(bool)> callback) + : callback_(std::move(callback)) { SetTitle(l10n_util::GetPluralStringFUTF16(IDS_ABANDON_DOWNLOAD_DIALOG_TITLE, download_count)); SetShowCloseButton(false); @@ -52,7 +52,7 @@ auto run_callback = [](DownloadInProgressDialogView* dialog, bool accept) { // Note that accepting this dialog means "cancel the download", while cancel // means "continue the download". - dialog->callback_.Run(accept); + std::move(dialog->callback_).Run(accept); }; SetAcceptCallback(base::BindOnce(run_callback, base::Unretained(this), true)); SetCancelCallback(
diff --git a/chrome/browser/ui/views/download/download_in_progress_dialog_view.h b/chrome/browser/ui/views/download/download_in_progress_dialog_view.h index c0b8d87dd..e87e5aa 100644 --- a/chrome/browser/ui/views/download/download_in_progress_dialog_view.h +++ b/chrome/browser/ui/views/download/download_in_progress_dialog_view.h
@@ -24,15 +24,15 @@ static void Show(gfx::NativeWindow parent_window, int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback); + base::OnceCallback<void(bool)> callback); private: DownloadInProgressDialogView(int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback); + base::OnceCallback<void(bool)> callback); ~DownloadInProgressDialogView() override; - const base::Callback<void(bool)> callback_; + base::OnceCallback<void(bool)> callback_; DISALLOW_COPY_AND_ASSIGN(DownloadInProgressDialogView); };
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc index 9e0d4e01..ebe6c14 100644 --- a/chrome/browser/ui/views/download/download_item_view.cc +++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -246,7 +246,7 @@ accessible_alert_(accessible_alert), accessible_alert_timer_( FROM_HERE, - base::TimeDelta::FromSeconds(30), + base::TimeDelta::FromMinutes(3), base::BindRepeating(&DownloadItemView::AnnounceAccessibleAlert, base::Unretained(this))) { views::InstallRectHighlightPathGenerator(this);
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm index 362c9618..d2f566d 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -112,9 +112,9 @@ } bool BrowserNonClientFrameViewMac::CaptionButtonsOnLeadingEdge() const { - // In OSX 10.10 and 10.11, caption buttons always get drawn on the left side - // of the browser frame instead of the leading edge. This causes a discrepancy - // in RTL mode. + // In OSX 10.11, caption buttons always get drawn on the left side of the + // browser frame instead of the leading edge. This causes a discrepancy in + // RTL mode. return !base::i18n::IsRTL() || base::mac::IsAtLeastOS10_12(); }
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 28f5c8d..212e8e1 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1851,13 +1851,13 @@ void BrowserView::ConfirmBrowserCloseWithPendingDownloads( int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) { + base::OnceCallback<void(bool)> callback) { // The dialog eats mouse events which results in the close button // getting stuck in the hover state. Reset the window controls to // prevent this. frame()->non_client_view()->ResetWindowControls(); DownloadInProgressDialogView::Show(GetNativeWindow(), download_count, - dialog_type, callback); + dialog_type, std::move(callback)); } void BrowserView::UserChangedTheme(BrowserThemeChangeType theme_change_type) {
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 7782b63..201013a 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -453,7 +453,7 @@ void ConfirmBrowserCloseWithPendingDownloads( int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) override; + base::OnceCallback<void(bool)> callback) override; void UserChangedTheme(BrowserThemeChangeType theme_change_type) override; void ShowAppMenu() override; content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc index ff7811d..f7f4af18 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -472,8 +472,9 @@ kURL); } +// TODO(crbug.com/1144065): Flaky on multiple platforms. IN_PROC_BROWSER_TEST_F(ProfilePickerCreationFlowBrowserTest, - CreateSignedInProfileSigninAlreadyExists) { + DISABLED_CreateSignedInProfileSigninAlreadyExists) { ASSERT_EQ(1u, BrowserList::GetInstance()->size()); // Create a pre-existing profile syncing with the same account as the profile
diff --git a/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.cc b/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.cc index 2577e3b..c9cc66a 100644 --- a/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.cc +++ b/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/ui/views/sharesheet/sharesheet_target_button.h" #include "chrome/grit/generated_resources.h" #include "chrome/grit/theme_resources.h" +#include "content/public/browser/web_contents.h" #include "extensions/browser/app_window/app_window.h" #include "extensions/browser/app_window/app_window_registry.h" #include "third_party/skia/include/core/SkColor.h" @@ -107,12 +108,12 @@ } // namespace SharesheetBubbleView::SharesheetBubbleView( - gfx::NativeWindow native_window, + content::WebContents* web_contents, sharesheet::SharesheetServiceDelegate* delegate) : delegate_(delegate) { - set_parent_window(native_window); - parent_view_ = - views::Widget::GetWidgetForNativeWindow(native_window)->GetRootView(); + gfx::NativeWindow parent = web_contents->GetTopLevelNativeWindow(); + set_parent_window(parent); + parent_view_ = views::Widget::GetWidgetForNativeWindow(parent)->GetRootView(); UpdateAnchorPosition(); CreateBubble();
diff --git a/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.h b/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.h index a192bf8..889313b 100644 --- a/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.h +++ b/chrome/browser/ui/views/sharesheet/sharesheet_bubble_view.h
@@ -9,7 +9,6 @@ #include "chrome/browser/sharesheet/sharesheet_types.h" #include "components/services/app_service/public/mojom/types.mojom.h" -#include "ui/gfx/native_widget_types.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h" namespace views { @@ -21,6 +20,10 @@ class SharesheetServiceDelegate; } +namespace content { +class WebContents; +} + class SharesheetExpandButton; class SharesheetBubbleView : public views::BubbleDialogDelegateView { @@ -29,7 +32,7 @@ SharesheetBubbleView(views::View* anchor_view, sharesheet::SharesheetServiceDelegate* delegate); - SharesheetBubbleView(gfx::NativeWindow native_window, + SharesheetBubbleView(content::WebContents* web_contents, sharesheet::SharesheetServiceDelegate* delegate); SharesheetBubbleView(const SharesheetBubbleView&) = delete; SharesheetBubbleView& operator=(const SharesheetBubbleView&) = delete;
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc index e59304b..a3fa7ed4 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
@@ -68,6 +68,7 @@ #include "ui/base/models/menu_model.h" #include "ui/gfx/color_utils.h" #include "ui/gfx/image/image.h" +#include "ui/gfx/range/range.h" #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/widget/widget.h" #include "url/origin.h" @@ -421,8 +422,8 @@ } tabstrip_->ToggleTabGroup(group, !is_currently_collapsed, origin); - std::vector<int> tabs_in_group = ListTabsInGroup(group); - for (int i : tabs_in_group) { + gfx::Range tabs_in_group = ListTabsInGroup(group); + for (auto i = tabs_in_group.start(); i < tabs_in_group.end(); ++i) { tabstrip_->tab_at(i)->SetVisible(is_currently_collapsed); if (base::FeatureList::IsEnabled(features::kTabGroupsCollapseFreezing)) model_->GetWebContentsAt(i)->SetPageFrozen(!is_currently_collapsed); @@ -561,7 +562,17 @@ model_->group_model()->GetTabGroup(group)->SetVisualData(visual_data); } -std::vector<int> BrowserTabStripController::ListTabsInGroup( +base::Optional<int> BrowserTabStripController::GetFirstTabInGroup( + const tab_groups::TabGroupId& group) const { + return model_->group_model()->GetTabGroup(group)->GetFirstTab(); +} + +base::Optional<int> BrowserTabStripController::GetLastTabInGroup( + const tab_groups::TabGroupId& group) const { + return model_->group_model()->GetTabGroup(group)->GetLastTab(); +} + +gfx::Range BrowserTabStripController::ListTabsInGroup( const tab_groups::TabGroupId& group) const { return model_->group_model()->GetTabGroup(group)->ListTabs(); }
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h index d5fa1337..53ed292 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
@@ -107,7 +107,11 @@ void SetVisualDataForGroup( const tab_groups::TabGroupId& group, const tab_groups::TabGroupVisualData& visual_data) override; - std::vector<int> ListTabsInGroup( + base::Optional<int> GetFirstTabInGroup( + const tab_groups::TabGroupId& group) const override; + base::Optional<int> GetLastTabInGroup( + const tab_groups::TabGroupId& group) const override; + gfx::Range ListTabsInGroup( const tab_groups::TabGroupId& group_id) const override; bool IsFrameCondensed() const override; bool HasVisibleBackgroundTabShapes() const override;
diff --git a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc index a594ff2a..ea33fb7 100644 --- a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc
@@ -13,6 +13,7 @@ #include "components/tab_groups/tab_group_visual_data.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/color_utils.h" +#include "ui/gfx/range/range.h" FakeBaseTabStripController::FakeBaseTabStripController() {} @@ -136,14 +137,45 @@ } } -std::vector<int> FakeBaseTabStripController::ListTabsInGroup( +base::Optional<int> FakeBaseTabStripController::GetFirstTabInGroup( const tab_groups::TabGroupId& group) const { - std::vector<int> result; - for (size_t i = 0; i < tab_groups_.size(); i++) { + for (size_t i = 0; i < tab_groups_.size(); ++i) { if (tab_groups_[i] == group) - result.push_back(i); + return i; } - return result; + + return base::nullopt; +} + +base::Optional<int> FakeBaseTabStripController::GetLastTabInGroup( + const tab_groups::TabGroupId& group) const { + for (size_t i = tab_groups_.size(); i > 0; --i) { + if (tab_groups_[i - 1] == group) + return i - 1; + } + + return base::nullopt; +} + +gfx::Range FakeBaseTabStripController::ListTabsInGroup( + const tab_groups::TabGroupId& group) const { + int first_tab = -1; + int last_tab = -1; + for (size_t i = 0; i < tab_groups_.size(); i++) { + if (tab_groups_[i] != group) + continue; + + if (first_tab == -1) { + first_tab = i; + last_tab = i + 1; + continue; + } + + DCHECK_EQ(static_cast<int>(i), last_tab) << "group is not contiguous"; + last_tab = i + 1; + } + + return first_tab > -1 ? gfx::Range(first_tab, last_tab) : gfx::Range(); } const ui::ListSelectionModel&
diff --git a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h index 74bf2e5..df18cd81 100644 --- a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h +++ b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h
@@ -75,7 +75,11 @@ void SetVisualDataForGroup( const tab_groups::TabGroupId& group, const tab_groups::TabGroupVisualData& visual_data) override; - std::vector<int> ListTabsInGroup( + base::Optional<int> GetFirstTabInGroup( + const tab_groups::TabGroupId& group) const override; + base::Optional<int> GetLastTabInGroup( + const tab_groups::TabGroupId& group) const override; + gfx::Range ListTabsInGroup( const tab_groups::TabGroupId& group) const override; void AddTabToGroup(int model_index, const tab_groups::TabGroupId& group) override;
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc index 475acf66..057035b 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
@@ -106,10 +106,6 @@ #include "ui/events/gesture_detection/gesture_configuration.h" #endif -#if defined(OS_MAC) -#include "base/mac/mac_util.h" -#endif - // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch // of lacros-chrome is complete. #if defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) @@ -697,7 +693,7 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().size()); + EXPECT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().length()); ASSERT_TRUE(PressInput(GetCenterInScreenCoordinates(tab_strip->tab_at(2)))); ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(3)))); @@ -707,8 +703,8 @@ // Dragging the tab in the second index to the tab in the third index switches // the tabs and removes the dragged tab from the group. EXPECT_EQ("0 1 3 2", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 2)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(2)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(3)); @@ -720,8 +716,8 @@ // Dragging the tab in the first index to the tab in the second index (tab 3) // switches the tabs and removes the dragged tab from the group. EXPECT_EQ("0 3 1 2", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 1)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(1)); } @@ -740,7 +736,7 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().size()); + EXPECT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().length()); EXPECT_EQ(group, model->GetTabGroupForTab(1).value()); ASSERT_TRUE(PressInput(GetCenterInScreenCoordinates(tab_strip->tab_at(1)))); @@ -751,8 +747,8 @@ // Dragging the tab in the first index to the tab in the zero-th index // switches the tabs and removes the dragged tab from the group. EXPECT_EQ("1 0 2 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(2, 4)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(0)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(1)); @@ -764,8 +760,8 @@ // Dragging the tab in the second index to the tab in the first index switches // the tabs and removes the dragged tab from the group. EXPECT_EQ("1 2 0 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(3)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(3, 4)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(2)); } @@ -782,8 +778,8 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 3)); ASSERT_TRUE(PressInput(GetCenterInScreenCoordinates(tab_strip->tab_at(0)))); ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(1)))); @@ -793,8 +789,8 @@ // Dragging the tab in the zero-th index to the tab in the first index // switches the tabs but group membership does not change. EXPECT_EQ("1 0 2 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 3)); ASSERT_TRUE(PressInput(GetCenterInScreenCoordinates(tab_strip->tab_at(2)))); ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(1)))); @@ -804,8 +800,8 @@ // Dragging the tab in the second index to the tab in the first index switches // the tabs but group membership does not change. EXPECT_EQ("1 2 0 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 3)); } // Creates a browser with four tabs. The first tab is in a Tab Group. Dragging @@ -820,8 +816,8 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 1)); // Dragging the tab in the zero-th index to the tab in the first index // switches the tabs and removes the group of the zero-th tab. @@ -867,8 +863,7 @@ StopAnimating(tab_strip); EXPECT_EQ("1 0 2 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 2)); // Dragging the tab in the second index to the tab in the first index switches // the tabs and adds the dragged tab to the group. @@ -878,8 +873,7 @@ StopAnimating(tab_strip); EXPECT_EQ("1 2 0 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 3)); // Dragging the tab in the third index to the tab in the second index switches // the tabs and adds the dragged tab to the group. @@ -889,8 +883,7 @@ StopAnimating(tab_strip); EXPECT_EQ("1 2 3 0", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 4)); } // Creates a browser with four tabs. The last tab is in Tab Group 1. The @@ -919,8 +912,7 @@ StopAnimating(tab_strip); EXPECT_EQ("0 1 3 2", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(2, 4)); // Dragging the tab in the first index to the tab in the second index switches // the tabs and adds the dragged tab to the group. @@ -930,8 +922,7 @@ StopAnimating(tab_strip); EXPECT_EQ("0 3 1 2", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(1, 4)); // Dragging the tab in the zero-th index to the tab in the first index // switches the tabs and adds the dragged tab to the group. @@ -941,8 +932,7 @@ StopAnimating(tab_strip); EXPECT_EQ("3 0 1 2", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 4)); } // Creates a browser with four tabs each in its own group. Selecting and @@ -981,10 +971,8 @@ StopAnimating(tab_strip); EXPECT_EQ("0 2 1 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group4)->ListTabs(), - testing::ElementsAre(3)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(group_model->GetTabGroup(group4)->ListTabs(), gfx::Range(3, 4)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(0, 3)); // Dragging the center of the first tab to the center of the third tab will // result in the tabs joining the end of Tab Group 4. @@ -996,10 +984,8 @@ StopAnimating(tab_strip); EXPECT_EQ("1 3 0 2", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(0)); - EXPECT_THAT(group_model->GetTabGroup(group4)->ListTabs(), - testing::ElementsAre(1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group4)->ListTabs(), gfx::Range(1, 4)); } // Creates a browser with four tabs each in its own group. Selecting and @@ -1035,10 +1021,8 @@ StopAnimating(tab_strip); EXPECT_EQ("0 2 1 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0)); - EXPECT_THAT(group_model->GetTabGroup(group3)->ListTabs(), - testing::ElementsAre(1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group3)->ListTabs(), gfx::Range(1, 4)); } // Creates a browser with four tabs. The first two tabs are in Tab Group 1. @@ -1061,8 +1045,7 @@ ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(1)))); EXPECT_EQ("0 2 1 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1, 2)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 3)); ASSERT_TRUE(TabDragController::IsActive()); @@ -1070,8 +1053,7 @@ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_ESCAPE, false, false, false, false)); EXPECT_EQ("0 1 2 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 2)); } // Creates a browser with four tabs. The last two tabs are in Tab Group 1. The @@ -1099,8 +1081,7 @@ ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(2)))); EXPECT_EQ("0 2 1 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(1, 2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(1, 4)); ASSERT_TRUE(TabDragController::IsActive()); @@ -1108,10 +1089,8 @@ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_ESCAPE, false, false, false, false)); EXPECT_EQ("0 1 2 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(2, 3)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(1)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(2, 4)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(1, 2)); const tab_groups::TabGroupVisualData* group2_visual_data = group_model->GetTabGroup(group2)->visual_data(); EXPECT_THAT(group2_visual_data->title(), new_data.title()); @@ -1133,7 +1112,7 @@ EnsureFocusToTabStrip(tab_strip); ASSERT_EQ(4, model->count()); - ASSERT_EQ(2u, group_model->GetTabGroup(group)->ListTabs().size()); + ASSERT_EQ(2u, group_model->GetTabGroup(group)->ListTabs().length()); // Drag the entire group right by its header. ASSERT_TRUE( @@ -1143,8 +1122,7 @@ StopAnimating(tab_strip); EXPECT_EQ("0 3 1 2", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group)->ListTabs(), gfx::Range(2, 4)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(0)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(1)); @@ -1156,8 +1134,7 @@ StopAnimating(tab_strip); EXPECT_EQ("1 2 0 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group)->ListTabs(), gfx::Range(0, 2)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(2)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(3)); } @@ -1177,8 +1154,8 @@ StopAnimating(tab_strip); ASSERT_EQ(4, model->count()); - ASSERT_EQ(2u, group_model->GetTabGroup(group1)->ListTabs().size()); - ASSERT_EQ(2u, group_model->GetTabGroup(group2)->ListTabs().size()); + ASSERT_EQ(2u, group_model->GetTabGroup(group1)->ListTabs().length()); + ASSERT_EQ(2u, group_model->GetTabGroup(group2)->ListTabs().length()); // Drag group1 right, but not far enough to get to the other side of group2. ASSERT_TRUE(PressInput( @@ -1189,10 +1166,8 @@ // Expect group1 to "snap back" to its current position, avoiding group2. EXPECT_EQ("0 1 2 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 2)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(2, 4)); // Drag group1 right, far enough to get to the other side of group2. ASSERT_TRUE(PressInput( @@ -1204,10 +1179,8 @@ // Expect group1 to "snap to" the other side of group2 and not land in the // middle. EXPECT_EQ("2 3 0 1", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(2, 3)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(2, 4)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(0, 2)); } // Creates a browser with four tabs. The first two belong in Tab Group 1, and @@ -1225,8 +1198,8 @@ StopAnimating(tab_strip); ASSERT_EQ(4, model->count()); - ASSERT_EQ(2u, group_model->GetTabGroup(group1)->ListTabs().size()); - ASSERT_EQ(2u, group_model->GetTabGroup(group2)->ListTabs().size()); + ASSERT_EQ(2u, group_model->GetTabGroup(group1)->ListTabs().length()); + ASSERT_EQ(2u, group_model->GetTabGroup(group2)->ListTabs().length()); // Drag group2 left, but not far enough to get to the other side of group1. ASSERT_TRUE(PressInput( @@ -1237,10 +1210,8 @@ // Expect group2 to "snap back" to its current position, avoiding group1. EXPECT_EQ("0 1 2 3", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(0, 2)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(2, 4)); // Drag group2 left, far enough to get to the other side of group1. ASSERT_TRUE(PressInput( @@ -1252,10 +1223,8 @@ // Expect group2 to "snap to" the other side of group1 and not land in the // middle. EXPECT_EQ("2 3 0 1", IDString(model)); - EXPECT_THAT(group_model->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(2, 3)); - EXPECT_THAT(group_model->GetTabGroup(group2)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(group_model->GetTabGroup(group1)->ListTabs(), gfx::Range(2, 4)); + EXPECT_EQ(group_model->GetTabGroup(group2)->ListTabs(), gfx::Range(0, 2)); } // Creates a browser with four tabs. The first tab is pinned, and the last @@ -1273,7 +1242,7 @@ StopAnimating(tab_strip); ASSERT_EQ(4, model->count()); - ASSERT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().size()); + ASSERT_EQ(3u, model->group_model()->GetTabGroup(group)->ListTabs().length()); ASSERT_TRUE(PressInput(GetCenterInScreenCoordinates(tab_strip->tab_at(0)))); ASSERT_TRUE(DragInputTo(GetCenterInScreenCoordinates(tab_strip->tab_at(2)))); @@ -1282,8 +1251,8 @@ // The pinned tab should not have moved or joined the group. EXPECT_EQ("0 1 2 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(1, 2, 3)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(1, 4)); EXPECT_EQ(base::nullopt, model->GetTabGroupForTab(0)); } @@ -1576,17 +1545,7 @@ ASSERT_EQ(2u, browser_list->size()); Browser* new_browser = browser_list->get(1); - bool check_new_window_active = true; -#if defined(OS_MAC) - // AppKit 10.10 asynchronously reactivates the first - // window. This behavior is non-deterministic, and appears to be a test-only - // issue. Thus, we just skip the test check. https://crbug.com/862859. - if (base::mac::IsOS10_10()) - check_new_window_active = false; -#endif - if (check_new_window_active) { - EXPECT_TRUE(new_browser->window()->IsActive()); - } + EXPECT_TRUE(new_browser->window()->IsActive()); TabStrip* tab_strip2 = GetTabStripForBrowser(new_browser); EXPECT_FALSE(tab_strip2->GetDragContext()->IsDragSessionActive()); @@ -2069,13 +2028,20 @@ EXPECT_FALSE(browser2->window()->IsMaximized()); } +#if defined(OS_MAC) && defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_DragWindowIntoGroup DISABLED_DragWindowIntoGroup +#else +#define MAYBE_DragWindowIntoGroup DragWindowIntoGroup +#endif + // Creates two browser with two tabs each. The first browser has one tab in a // group and the second tab not in a group. The second browser {browser2} has // two tabs in another group {group1}. Dragging the two tabs in the first // browser into the middle of the second browser will insert the two dragged // tabs into the {group1}} after the first tab. IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, - DragWindowIntoGroup) { + MAYBE_DragWindowIntoGroup) { TabStrip* tab_strip = GetTabStripForBrowser(browser()); TabStripModel* model = browser()->tab_strip_model(); @@ -2107,13 +2073,21 @@ ASSERT_TRUE(ReleaseInput()); EXPECT_EQ("100 0 1 101", IDString(model2)); - EXPECT_THAT(model2->group_model()->GetTabGroup(group1)->ListTabs(), - testing::ElementsAre(0, 1, 2, 3)); + EXPECT_EQ(model2->group_model()->GetTabGroup(group1)->ListTabs(), + gfx::Range(0, 4)); } +#if defined(OS_MAC) && defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_DragGroupHeaderToSeparateWindow \ + DISABLED_DragGroupHeaderToSeparateWindow +#else +#define MAYBE_DragGroupHeaderToSeparateWindow DragGroupHeaderToSeparateWindow +#endif + // Creates two browsers, then drags a group from one to the other. IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, - DragGroupHeaderToSeparateWindow) { + MAYBE_DragGroupHeaderToSeparateWindow) { TabStrip* tab_strip = GetTabStripForBrowser(browser()); TabStripModel* model = browser()->tab_strip_model(); AddTabsAndResetBrowser(browser(), 1); @@ -2139,8 +2113,8 @@ std::vector<tab_groups::TabGroupId> groups2 = model2->group_model()->ListTabGroups(); EXPECT_EQ(1u, groups2.size()); - EXPECT_THAT(model2->group_model()->GetTabGroup(groups2[0])->ListTabs(), - testing::ElementsAre(1, 2)); + EXPECT_EQ(model2->group_model()->GetTabGroup(groups2[0])->ListTabs(), + gfx::Range(1, 3)); EXPECT_EQ(groups2[0], group); EXPECT_EQ(tab_strip2->GetGroupColorId(groups2[0]), group_color); } @@ -2172,8 +2146,8 @@ std::vector<tab_groups::TabGroupId> groups = model->group_model()->ListTabGroups(); EXPECT_EQ(1u, groups.size()); - EXPECT_THAT(model->group_model()->GetTabGroup(groups[0])->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(model->group_model()->GetTabGroup(groups[0])->ListTabs(), + gfx::Range(0, 2)); } // Drags a tab group by the header to a new position toward the left and presses @@ -2203,8 +2177,8 @@ std::vector<tab_groups::TabGroupId> groups = model->group_model()->ListTabGroups(); EXPECT_EQ(1u, groups.size()); - EXPECT_THAT(model->group_model()->GetTabGroup(groups[0])->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(model->group_model()->GetTabGroup(groups[0])->ListTabs(), + gfx::Range(2, 4)); } namespace { @@ -2258,8 +2232,8 @@ std::vector<tab_groups::TabGroupId> groups = model->group_model()->ListTabGroups(); EXPECT_EQ(1u, groups.size()); - EXPECT_THAT(model->group_model()->GetTabGroup(groups[0])->ListTabs(), - testing::ElementsAre(0)); + EXPECT_EQ(model->group_model()->GetTabGroup(groups[0])->ListTabs(), + gfx::Range(0, 1)); } class DetachToBrowserTabDragControllerTestWithTabGroupsCollapseEnabled @@ -2287,8 +2261,8 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(1, 2)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(1, 3)); EXPECT_FALSE(model->IsGroupCollapsed(group)); tab_strip->controller()->ToggleTabGroupCollapsedState(group); StopAnimating(tab_strip); @@ -2303,8 +2277,8 @@ StopAnimating(tab_strip); EXPECT_EQ("0 3 1 2", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(2, 3)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(2, 4)); EXPECT_TRUE(model->IsGroupCollapsed(group)); } @@ -2322,8 +2296,8 @@ StopAnimating(tab_strip); EXPECT_EQ(4, model->count()); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(1, 2)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(1, 3)); EXPECT_FALSE(model->IsGroupCollapsed(group)); tab_strip->controller()->ToggleTabGroupCollapsedState(group); StopAnimating(tab_strip); @@ -2339,8 +2313,8 @@ StopAnimating(tab_strip); EXPECT_EQ("1 2 0 3", IDString(model)); - EXPECT_THAT(model->group_model()->GetTabGroup(group)->ListTabs(), - testing::ElementsAre(0, 1)); + EXPECT_EQ(model->group_model()->GetTabGroup(group)->ListTabs(), + gfx::Range(0, 2)); EXPECT_TRUE(model->IsGroupCollapsed(group)); } @@ -2372,8 +2346,8 @@ std::vector<tab_groups::TabGroupId> groups = model->group_model()->ListTabGroups(); EXPECT_EQ(1u, groups.size()); - EXPECT_THAT(model->group_model()->GetTabGroup(groups[0])->ListTabs(), - testing::ElementsAre(0)); + EXPECT_EQ(model->group_model()->GetTabGroup(groups[0])->ListTabs(), + gfx::Range(0, 1)); EXPECT_TRUE(tab_strip->controller()->IsGroupCollapsed(group)); } @@ -2396,7 +2370,7 @@ EnsureFocusToTabStrip(tab_strip); ASSERT_EQ(4, model->count()); - ASSERT_EQ(2u, group_model->GetTabGroup(group)->ListTabs().size()); + ASSERT_EQ(2u, group_model->GetTabGroup(group)->ListTabs().length()); // Drag group1, this should expand the group. ASSERT_TRUE( @@ -2409,10 +2383,19 @@ EXPECT_FALSE(model->IsGroupCollapsed(group)); } +#if defined(OS_MAC) && defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_DragCollapsedGroupHeaderToSeparateWindow \ + DISABLED_DragCollapsedGroupHeaderToSeparateWindow +#else +#define MAYBE_DragCollapsedGroupHeaderToSeparateWindow \ + DragCollapsedGroupHeaderToSeparateWindow +#endif + // Creates two browsers, then drags a collapsed group from one to the other. IN_PROC_BROWSER_TEST_P( DetachToBrowserTabDragControllerTestWithTabGroupsCollapseEnabled, - DragCollapsedGroupHeaderToSeparateWindow) { + MAYBE_DragCollapsedGroupHeaderToSeparateWindow) { TabStrip* tab_strip = GetTabStripForBrowser(browser()); TabStripModel* model = browser()->tab_strip_model(); AddTabsAndResetBrowser(browser(), 2); @@ -2441,9 +2424,8 @@ std::vector<tab_groups::TabGroupId> browser2_groups = model2->group_model()->ListTabGroups(); EXPECT_EQ(1u, browser2_groups.size()); - EXPECT_THAT( - model2->group_model()->GetTabGroup(browser2_groups[0])->ListTabs(), - testing::ElementsAre(1, 2)); + EXPECT_EQ(model2->group_model()->GetTabGroup(browser2_groups[0])->ListTabs(), + gfx::Range(1, 3)); ASSERT_FALSE(tab_strip->controller()->IsGroupCollapsed(browser2_groups[0])); EXPECT_EQ(browser2_groups[0], group); } @@ -2513,10 +2495,18 @@ } // namespace +#if defined(OS_MAC) && defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_DragAllToSeparateWindowAndCancel \ + DISABLED_DragAllToSeparateWindowAndCancel +#else +#define MAYBE_DragAllToSeparateWindowAndCancel DragAllToSeparateWindowAndCancel +#endif + // Creates two browsers, selects all tabs in first, drags into second, then hits // escape. IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, - DragAllToSeparateWindowAndCancel) { + MAYBE_DragAllToSeparateWindowAndCancel) { TabStrip* tab_strip = GetTabStripForBrowser(browser()); AddTabsAndResetBrowser(browser(), 1); @@ -2623,10 +2613,18 @@ browser2->window()->GetBounds().ToString()); } +#if defined(OS_MAC) && defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_DragSingleTabToSeparateWindow \ + DISABLED_DragSingleTabToSeparateWindow +#else +#define MAYBE_DragSingleTabToSeparateWindow DragSingleTabToSeparateWindow +#endif + // Creates two browsers, the first browser has a single tab and drags into the // second browser. IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, - DragSingleTabToSeparateWindow) { + MAYBE_DragSingleTabToSeparateWindow) { TabStrip* tab_strip = GetTabStripForBrowser(browser()); ResetIDs(browser()->tab_strip_model(), 0);
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc index e8a8ce26..2ddfb97 100644 --- a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc +++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc
@@ -41,6 +41,7 @@ #include "ui/base/pointer/touch_ui_controller.h" #include "ui/events/types/event_type.h" #include "ui/gfx/geometry/insets.h" +#include "ui/gfx/range/range.h" #include "ui/native_theme/native_theme.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/button/label_button.h" @@ -285,7 +286,7 @@ base::UserMetricsAction("TabGroups_TabGroupBubble_NewTabInGroup")); TabStripModel* const model = browser_->tab_strip_model(); const auto tabs = model->group_model()->GetTabGroup(group_)->ListTabs(); - model->delegate()->AddTabAt(GURL(), tabs.back() + 1, true, group_); + model->delegate()->AddTabAt(GURL(), tabs.end(), true, group_); // Close the widget to allow users to continue their work in their newly // created tab. GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified); @@ -297,7 +298,16 @@ if (header_view) header_view->RemoveObserverFromWidget(GetWidget()); TabStripModel* const model = browser_->tab_strip_model(); - model->RemoveFromGroup(model->group_model()->GetTabGroup(group_)->ListTabs()); + + const gfx::Range tab_range = + model->group_model()->GetTabGroup(group_)->ListTabs(); + + std::vector<int> tabs; + tabs.reserve(tab_range.length()); + for (auto i = tab_range.start(); i < tab_range.end(); ++i) + tabs.push_back(i); + + model->RemoveFromGroup(tabs); // Close the widget because it is no longer applicable. GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified); } @@ -306,9 +316,9 @@ base::RecordAction( base::UserMetricsAction("TabGroups_TabGroupBubble_CloseGroup")); TabStripModel* const model = browser_->tab_strip_model(); - const auto tabs = model->group_model()->GetTabGroup(group_)->ListTabs(); - for (const auto& tab : base::Reversed(tabs)) { - model->CloseWebContentsAt(tab, + const gfx::Range tabs = model->group_model()->GetTabGroup(group_)->ListTabs(); + for (auto i = tabs.end(); i != tabs.start(); --i) { + model->CloseWebContentsAt(i - 1, TabStripModel::CLOSE_USER_GESTURE | TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); }
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view_browsertest.cc b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view_browsertest.cc index fac137c..368c964 100644 --- a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view_browsertest.cc
@@ -51,7 +51,7 @@ TabGroupModel* group_model = browser()->tab_strip_model()->group_model(); std::vector<tab_groups::TabGroupId> group_list = group_model->ListTabGroups(); ASSERT_EQ(1u, group_list.size()); - ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().size()); + ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().length()); BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); TabGroupHeader* header = @@ -68,7 +68,7 @@ gfx::PointF(), base::TimeTicks(), 0, 0); views::test::ButtonTestApi(new_tab_button).NotifyClick(released_event); - EXPECT_EQ(2u, group_model->GetTabGroup(group_list[0])->ListTabs().size()); + EXPECT_EQ(2u, group_model->GetTabGroup(group_list[0])->ListTabs().length()); } IN_PROC_BROWSER_TEST_F(TabGroupEditorBubbleViewDialogBrowserTest, Ungroup) { @@ -79,7 +79,7 @@ TabGroupModel* group_model = tsm->group_model(); std::vector<tab_groups::TabGroupId> group_list = group_model->ListTabGroups(); ASSERT_EQ(1u, group_list.size()); - ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().size()); + ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().length()); BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); TabGroupHeader* header = @@ -108,7 +108,7 @@ TabGroupModel* group_model = browser()->tab_strip_model()->group_model(); std::vector<tab_groups::TabGroupId> group_list = group_model->ListTabGroups(); ASSERT_EQ(1u, group_list.size()); - ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().size()); + ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().length()); BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); TabGroupHeader* header = @@ -138,7 +138,7 @@ TabGroupModel* group_model = browser()->tab_strip_model()->group_model(); std::vector<tab_groups::TabGroupId> group_list = group_model->ListTabGroups(); ASSERT_EQ(1u, group_list.size()); - ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().size()); + ASSERT_EQ(1u, group_model->GetTabGroup(group_list[0])->ListTabs().length()); BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); TabGroupHeader* header =
diff --git a/chrome/browser/ui/views/tabs/tab_group_views.cc b/chrome/browser/ui/views/tabs/tab_group_views.cc index e4e229b..ae2ec6b 100644 --- a/chrome/browser/ui/views/tabs/tab_group_views.cc +++ b/chrome/browser/ui/views/tabs/tab_group_views.cc
@@ -66,10 +66,9 @@ } const Tab* TabGroupViews::GetLastTabInGroup() const { - const std::vector<int> tabs_in_group = - tab_strip_->controller()->ListTabsInGroup(group_); - return tabs_in_group.empty() ? nullptr - : tab_strip_->tab_at(tabs_in_group.back()); + const base::Optional<int> last_tab = + tab_strip_->controller()->GetLastTabInGroup(group_); + return last_tab.has_value() ? tab_strip_->tab_at(last_tab.value()) : nullptr; } SkColor TabGroupViews::GetGroupColor() const {
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index 8b334f9..b3b3427 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -82,6 +82,7 @@ #include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/native_widget_types.h" +#include "ui/gfx/range/range.h" #include "ui/gfx/skia_util.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/controls/image_view.h" @@ -380,9 +381,10 @@ TabSlotView::ViewType::kTabGroupHeader) { dragging_views.push_back(source); - const std::vector<int> grouped_tabs = + const gfx::Range grouped_tabs = tab_strip_->controller()->ListTabsInGroup(source->group().value()); - for (int index : grouped_tabs) { + for (auto index = grouped_tabs.start(); index < grouped_tabs.end(); + ++index) { dragging_views.push_back(GetTabAt(index)); // Set |selection_model| if and only if the original selection does not // match the group exactly. See TabDragController::Init() for details @@ -390,7 +392,7 @@ if (!original_selection.IsSelected(index)) selection_model = original_selection; } - if (grouped_tabs.size() != original_selection.size()) + if (grouped_tabs.length() != original_selection.size()) selection_model = original_selection; } else { for (int i = 0; i < GetTabCount(); ++i) { @@ -930,13 +932,14 @@ tab_strip_->controller()->IsGroupCollapsed(candidate_group.value()) && tab_strip_->controller()->GetActiveIndex() < candidate_index) { return tab_strip_->controller() - ->ListTabsInGroup(candidate_group.value()) - .back(); + ->ListTabsInGroup(candidate_group.value()) + .end() - + 1; } return candidate_index; } - const std::vector<int> dragging_tabs = + const gfx::Range dragging_tabs = tab_strip_->controller()->ListTabsInGroup(dragging_group.value()); base::Optional<tab_groups::TabGroupId> other_group = tab_strip_->tab_at(candidate_index)->group(); @@ -948,36 +951,37 @@ if (dragging_group == other_group) { // |dragging_tabs| can only be empty if dragging in from another window, // in which case |dragging_group| can't be the same as |other_group|. - DCHECK_GT(dragging_tabs.size(), 0u); - if (candidate_index <= dragging_tabs.front() || - dragging_tabs.back() >= GetTabCount() - 1) - return dragging_tabs.front(); + DCHECK_GT(dragging_tabs.length(), 0u); + if (candidate_index <= static_cast<int>(dragging_tabs.start()) || + static_cast<int>(dragging_tabs.end()) >= GetTabCount()) + return dragging_tabs.start(); - other_group = tab_strip_->tab_at(dragging_tabs.back() + 1)->group(); + other_group = tab_strip_->tab_at(dragging_tabs.end())->group(); } if (!other_group.has_value()) return candidate_index; - const std::vector<int> other_tabs = + const gfx::Range other_tabs = tab_strip_->controller()->ListTabsInGroup(other_group.value()); - if (other_tabs.size() == 0) + if (other_tabs.length() == 0) return candidate_index; // If the candidate index is in the middle of the other group, instead // return the nearest insertion index that is not in the other group. const int other_group_width = - ideal_bounds(other_tabs.back()).right() - + ideal_bounds(other_tabs.end() - 1).right() - tab_strip_->group_header(other_group.value())->x(); - int left_insertion_index = other_tabs.front(); - if (dragging_tabs.size() > 0 && dragging_tabs.front() < other_tabs.front()) - left_insertion_index = dragging_tabs.front(); + int left_insertion_index = other_tabs.start(); + if (dragging_tabs.length() > 0 && + dragging_tabs.start() < other_tabs.start()) + left_insertion_index = dragging_tabs.start(); if (GetDraggedX(dragged_bounds) < ideal_bounds(left_insertion_index).x() + other_group_width / 2) return left_insertion_index; - return left_insertion_index + other_tabs.size(); + return left_insertion_index + other_tabs.length(); } // Sets the ideal bounds x-coordinates to |positions|. @@ -1402,7 +1406,7 @@ layout_helper_->UpdateGroupHeaderIndex(group); TabGroupHeader* group_header = group_views_[group]->header(); - const int first_tab = controller_->ListTabsInGroup(group).front(); + const int first_tab = controller_->GetFirstTabInGroup(group).value(); const int header_index = GetIndexOf(group_header); const int first_tab_index = GetIndexOf(tab_at(first_tab)); @@ -3066,13 +3070,13 @@ void TabStrip::ShiftGroupRelative(const tab_groups::TabGroupId& group, int offset) { DCHECK_EQ(1, std::abs(offset)); - std::vector<int> tabs_in_group = controller_->ListTabsInGroup(group); + gfx::Range tabs_in_group = controller_->ListTabsInGroup(group); - const int start_index = tabs_in_group.front(); + const int start_index = tabs_in_group.start(); int target_index = start_index + offset; if (offset > 0) - target_index += tabs_in_group.size() - 1; + target_index += tabs_in_group.length() - 1; if (!IsValidModelIndex(start_index) || !IsValidModelIndex(target_index)) return; @@ -3083,7 +3087,7 @@ if (target_group.has_value()) { target_index += offset * - (controller_->ListTabsInGroup(target_group.value()).size() - 1); + (controller_->ListTabsInGroup(target_group.value()).length() - 1); } if (!IsValidModelIndex(target_index))
diff --git a/chrome/browser/ui/views/tabs/tab_strip_controller.h b/chrome/browser/ui/views/tabs/tab_strip_controller.h index 6d044c8..bcbd0514 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_controller.h +++ b/chrome/browser/ui/views/tabs/tab_strip_controller.h
@@ -7,12 +7,14 @@ #include <vector> +#include "base/optional.h" #include "base/strings/string16.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" #include "chrome/browser/ui/views/tabs/tab_strip_types.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/ui_base_types.h" +#include "ui/gfx/range/range.h" class Tab; class TabStrip; @@ -165,8 +167,24 @@ const tab_groups::TabGroupId& group, const tab_groups::TabGroupVisualData& visual_data) = 0; - // Returns the list of tabs in the given |group|. - virtual std::vector<int> ListTabsInGroup( + // Gets the first tab index in |group|, or nullopt if the group is + // currently empty. This is always safe to call unlike + // ListTabsInGroup(). + virtual base::Optional<int> GetFirstTabInGroup( + const tab_groups::TabGroupId& group) const = 0; + + // Gets the last tab index in |group|, or nullopt if the group is + // currently empty. This is always safe to call unlike + // ListTabsInGroup(). + virtual base::Optional<int> GetLastTabInGroup( + const tab_groups::TabGroupId& group) const = 0; + + // Returns the range of tabs in the given |group|. This must not be + // called during intermediate states where the group is not + // contiguous. For example, if tabs elsewhere in the tab strip are + // being moved into |group| it may not be contiguous; this method + // cannot be called. + virtual gfx::Range ListTabsInGroup( const tab_groups::TabGroupId& group) const = 0; // Determines whether the top frame is condensed vertically, as when the
diff --git a/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc b/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc index b1ba11e..1ec9315 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_layout_helper.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip_layout_types.h" #include "chrome/browser/ui/views/tabs/tab_style_views.h" +#include "ui/gfx/range/range.h" #include "ui/views/view_model.h" namespace { @@ -169,9 +170,9 @@ void TabStripLayoutHelper::InsertGroupHeader(tab_groups::TabGroupId group, TabGroupHeader* header) { - std::vector<int> tabs_in_group = controller_->ListTabsInGroup(group); + gfx::Range tabs_in_group = controller_->ListTabsInGroup(group); const int header_slot_index = - GetSlotInsertionIndexForNewTab(tabs_in_group[0], group); + GetSlotInsertionIndexForNewTab(tabs_in_group.start(), group); slots_.insert( slots_.begin() + header_slot_index, TabSlot::CreateForGroupHeader(group, header, TabPinned::kUnpinned)); @@ -179,7 +180,7 @@ // Set the starting location of the header to something reasonable for the // animation. slots_[header_slot_index].view->SetBoundsRect( - GetTabs()[tabs_in_group[0]]->bounds()); + GetTabs()[tabs_in_group.start()]->bounds()); } void TabStripLayoutHelper::RemoveGroupHeader(tab_groups::TabGroupId group) { @@ -193,9 +194,10 @@ TabSlot header_slot = std::move(slots_[slot_index]); slots_.erase(slots_.begin() + slot_index); - std::vector<int> tabs_in_group = controller_->ListTabsInGroup(group); + base::Optional<int> first_tab = controller_->GetFirstTabInGroup(group); + DCHECK(first_tab); const int first_tab_slot_index = - GetSlotInsertionIndexForNewTab(tabs_in_group[0], group); + GetSlotInsertionIndexForNewTab(first_tab.value(), group); slots_.insert(slots_.begin() + first_tab_slot_index, std::move(header_slot)); }
diff --git a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc index 66c86b3..2d69d78 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc
@@ -1228,28 +1228,6 @@ EXPECT_LT(header->x(), tab_strip_->tab_at(1)->x()); } -// This can happen when a tab in the middle of a group starts to close. -TEST_P(TabStripTest, DiscontinuousGroup) { - SetMaxTabStripWidth(1000); - bounds_animator()->SetAnimationDuration(base::TimeDelta()); - - controller_->AddTab(0, false); - controller_->AddTab(1, false); - controller_->AddTab(2, false); - CompleteAnimationAndLayout(); - - const int first_slot_x = tab_strip_->tab_at(0)->x(); - - base::Optional<tab_groups::TabGroupId> group = - tab_groups::TabGroupId::GenerateNew(); - controller_->MoveTabIntoGroup(0, group); - controller_->MoveTabIntoGroup(2, group); - - std::vector<TabGroupViews*> views = ListGroupViews(); - EXPECT_EQ(1u, views.size()); - EXPECT_EQ(first_slot_x, views[0]->header()->x()); -} - TEST_P(TabStripTest, DeleteTabGroupViewsWhenEmpty) { controller_->AddTab(0, false); controller_->AddTab(1, false);
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc index d92037f..7e8e703 100644 --- a/chrome/browser/ui/web_applications/web_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -43,6 +43,7 @@ #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/test/web_app_install_observer.h" #include "chrome/browser/web_applications/web_app_provider.h" +#include "chrome/common/chrome_features.h" #include "chrome/test/base/ui_test_utils.h" #include "components/sessions/core/tab_restore_service.h" #include "content/public/common/content_features.h" @@ -1130,4 +1131,22 @@ app_browser->app_controller()->IsWindowControlsOverlayEnabled()); } +class WebAppBrowserTest_RemoveStatusBar : public WebAppBrowserTest { + public: + WebAppBrowserTest_RemoveStatusBar() { + scoped_feature_list_.InitAndEnableFeature( + features::kRemoveStatusBarInWebApps); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(WebAppBrowserTest_RemoveStatusBar, RemoveStatusBar) { + NavigateToURLAndWait(browser(), GetInstallableAppURL()); + const AppId app_id = InstallPwaForCurrentUrl(); + Browser* const app_browser = LaunchWebAppBrowser(app_id); + EXPECT_EQ(nullptr, app_browser->GetStatusBubbleForTesting()); +} + } // namespace web_app
diff --git a/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc b/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc index 22a5e40..8fc025f0 100644 --- a/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc +++ b/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc
@@ -105,12 +105,14 @@ base::Value CreateProvisioningProcessEntry( const std::string& cert_profile_id, + const std::string& cert_profile_name, bool is_device_wide, CertProvisioningWorkerState state, base::Time time_since_last_update, const std::string& public_key_spki_der) { base::Value entry(base::Value::Type::DICTIONARY); entry.SetStringKey("certProfileId", cert_profile_id); + entry.SetStringKey("certProfileName", cert_profile_name); entry.SetBoolKey("isDeviceWide", is_device_wide); entry.SetStringKey("status", GetProvisioningProcessStatus(state)); entry.SetIntKey("stateId", static_cast<int>(state)); @@ -134,14 +136,15 @@ for (const auto& worker_entry : cert_provisioning_scheduler->GetWorkers()) { CertProvisioningWorker* worker = worker_entry.second.get(); list_to_append_to->Append(CreateProvisioningProcessEntry( - worker_entry.first, is_device_wide, worker->GetState(), - worker->GetLastUpdateTime(), worker->GetPublicKey())); + worker_entry.first, worker->GetCertProfile().name, is_device_wide, + worker->GetState(), worker->GetLastUpdateTime(), + worker->GetPublicKey())); } for (const auto& failed_worker_entry : cert_provisioning_scheduler->GetFailedCertProfileIds()) { const FailedWorkerInfo& worker = failed_worker_entry.second; list_to_append_to->Append(CreateProvisioningProcessEntry( - failed_worker_entry.first, is_device_wide, + failed_worker_entry.first, worker.cert_profile_name, is_device_wide, CertProvisioningWorkerState::kFailed, worker.last_update_time, worker.public_key)); }
diff --git a/chrome/browser/ui/webui/certificate_provisioning_ui_handler_unittest.cc b/chrome/browser/ui/webui/certificate_provisioning_ui_handler_unittest.cc index abf57ab..ef18fbd 100644 --- a/chrome/browser/ui/webui/certificate_provisioning_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/certificate_provisioning_ui_handler_unittest.cc
@@ -13,6 +13,7 @@ #include "base/bind.h" #include "base/strings/string_number_conversions.h" #include "base/test/values_test_util.h" +#include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_common.h" #include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_scheduler.h" #include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h" #include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_worker.h" @@ -75,12 +76,23 @@ Public Exponent (24 bits): 01 00 01)"; +// Test values for creating CertProfile for MockCertProvisioningWorker. +constexpr char kCertProfileVersion[] = "cert_profile_version_1"; +constexpr base::TimeDelta kCertProfileRenewalPeriod = + base::TimeDelta::FromSeconds(0); +constexpr char kDeviceCertProfileId[] = "device_cert_profile_1"; +constexpr char kDeviceCertProfileName[] = "Device Certificate Profile 1"; +constexpr char kUserCertProfileId[] = "user_cert_profile_1"; +constexpr char kUserCertProfileName[] = "User Certificate Profile 1"; + void SetupMockCertProvisioningWorker(MockCertProvisioningWorker* worker, CertProvisioningWorkerState state, - const std::string* public_key) { + const std::string* public_key, + CertProfile& cert_profile) { EXPECT_CALL(*worker, GetState).WillRepeatedly(Return(state)); EXPECT_CALL(*worker, GetLastUpdateTime).WillRepeatedly(Return(base::Time())); EXPECT_CALL(*worker, GetPublicKey).WillRepeatedly(ReturnPointee(public_key)); + ON_CALL(*worker, GetCertProfile).WillByDefault(ReturnRef(cert_profile)); } // Recursively visits all strings in |value| and replaces placeholders such as @@ -263,17 +275,23 @@ } TEST_F(CertificateProvisioningUiHandlerTest, HasProcesses) { + CertProfile user_cert_profile( + kUserCertProfileId, kUserCertProfileName, kCertProfileVersion, + /*is_va_enabled=*/true, kCertProfileRenewalPeriod); auto user_cert_worker = std::make_unique<MockCertProvisioningWorker>(); SetupMockCertProvisioningWorker( user_cert_worker.get(), CertProvisioningWorkerState::kKeypairGenerated, - &der_encoded_spki_); - user_workers_["user_cert_profile_1"] = std::move(user_cert_worker); + &der_encoded_spki_, user_cert_profile); + user_workers_[kUserCertProfileId] = std::move(user_cert_worker); + CertProfile device_cert_profile( + kDeviceCertProfileId, kDeviceCertProfileName, kCertProfileVersion, + /*is_va_enabled=*/true, kCertProfileRenewalPeriod); auto device_cert_worker = std::make_unique<MockCertProvisioningWorker>(); SetupMockCertProvisioningWorker( device_cert_worker.get(), CertProvisioningWorkerState::kKeypairGenerated, - &der_encoded_spki_); - device_workers_["device_cert_profile_1"] = std::move(device_cert_worker); + &der_encoded_spki_, device_cert_profile); + device_workers_[kDeviceCertProfileId] = std::move(device_cert_worker); // Only the user worker is expected to be displayed in the UI, because the // user is not affiliated. @@ -281,36 +299,42 @@ std::vector<std::string> profile_ids; ASSERT_NO_FATAL_FAILURE( RefreshCertProvisioningProcesses(&all_processes, &profile_ids)); - ASSERT_THAT(profile_ids, UnorderedElementsAre("user_cert_profile_1")); - + ASSERT_THAT(profile_ids, UnorderedElementsAre(kUserCertProfileId)); EXPECT_EQ( - GetByProfileId(all_processes, "user_cert_profile_1"), + GetByProfileId(all_processes, kUserCertProfileId), FormatJsonDict( R"({ - "certProfileId": "user_cert_profile_1", + "certProfileId": "$0", + "certProfileName": "$1", "isDeviceWide": false, - "publicKey": "$0", + "publicKey": "$2", "stateId": 1, - "status": "$1", + "status": "$3", "timeSinceLastUpdate": "" })", - {kFormattedPublicKey, + {kUserCertProfileId, kUserCertProfileName, kFormattedPublicKey, l10n_util::GetStringUTF8( IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS_PREPARING_CSR_WAITING)})); } TEST_F(CertificateProvisioningUiHandlerAffiliatedTest, HasProcessesAffiliated) { + CertProfile user_cert_profile( + kUserCertProfileId, kUserCertProfileName, kCertProfileVersion, + /*is_va_enabled=*/true, kCertProfileRenewalPeriod); auto user_cert_worker = std::make_unique<MockCertProvisioningWorker>(); SetupMockCertProvisioningWorker( user_cert_worker.get(), CertProvisioningWorkerState::kKeypairGenerated, - &der_encoded_spki_); - user_workers_["user_cert_profile_1"] = std::move(user_cert_worker); + &der_encoded_spki_, user_cert_profile); + user_workers_[kUserCertProfileId] = std::move(user_cert_worker); + CertProfile device_cert_profile( + kDeviceCertProfileId, kDeviceCertProfileName, kCertProfileVersion, + /*is_va_enabled=*/true, kCertProfileRenewalPeriod); auto device_cert_worker = std::make_unique<MockCertProvisioningWorker>(); SetupMockCertProvisioningWorker(device_cert_worker.get(), CertProvisioningWorkerState::kFailed, - &der_encoded_spki_); - device_workers_["device_cert_profile_1"] = std::move(device_cert_worker); + &der_encoded_spki_, device_cert_profile); + device_workers_[kDeviceCertProfileId] = std::move(device_cert_worker); // Both user and device-wide workers are expected to be displayed in the UI, // because the user is affiliated. @@ -318,35 +342,37 @@ std::vector<std::string> profile_ids; ASSERT_NO_FATAL_FAILURE( RefreshCertProvisioningProcesses(&all_processes, &profile_ids)); - ASSERT_THAT(profile_ids, UnorderedElementsAre("user_cert_profile_1", - "device_cert_profile_1")); + ASSERT_THAT(profile_ids, + UnorderedElementsAre(kUserCertProfileId, kDeviceCertProfileId)); EXPECT_EQ( - GetByProfileId(all_processes, "user_cert_profile_1"), + GetByProfileId(all_processes, kUserCertProfileId), FormatJsonDict( R"({ - "certProfileId": "user_cert_profile_1", + "certProfileId": "$0", + "certProfileName": "$1", "isDeviceWide": false, - "publicKey": "$0", + "publicKey": "$2", "stateId": 1, - "status": "$1", + "status": "$3", "timeSinceLastUpdate": "" })", - {kFormattedPublicKey, + {kUserCertProfileId, kUserCertProfileName, kFormattedPublicKey, l10n_util::GetStringUTF8( IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS_PREPARING_CSR_WAITING)})); EXPECT_EQ( - GetByProfileId(all_processes, "device_cert_profile_1"), + GetByProfileId(all_processes, kDeviceCertProfileId), FormatJsonDict( R"({ - "certProfileId": "device_cert_profile_1", + "certProfileId": "$0", + "certProfileName": "$1", "isDeviceWide": true, - "publicKey": "$0", + "publicKey": "$2", "stateId": 10, - "status": "$1", + "status": "$3", "timeSinceLastUpdate": "" })", - {kFormattedPublicKey, + {kDeviceCertProfileId, kDeviceCertProfileName, kFormattedPublicKey, l10n_util::GetStringUTF8( IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS_FAILURE)})); } @@ -362,11 +388,14 @@ ASSERT_THAT(profile_ids, UnorderedElementsAre()); EXPECT_EQ(1U, handler_->ReadAndResetUiRefreshCountForTesting()); + CertProfile user_cert_profile( + kUserCertProfileId, kUserCertProfileName, kCertProfileVersion, + /*is_va_enabled=*/true, kCertProfileRenewalPeriod); auto user_cert_worker = std::make_unique<MockCertProvisioningWorker>(); SetupMockCertProvisioningWorker( user_cert_worker.get(), CertProvisioningWorkerState::kKeypairGenerated, - &der_encoded_spki_); - user_workers_["user_cert_profile_1"] = std::move(user_cert_worker); + &der_encoded_spki_, user_cert_profile); + user_workers_[kUserCertProfileId] = std::move(user_cert_worker); // The user worker triggers an update content::TestWebUIListenerObserver result_waiter_1( @@ -381,20 +410,21 @@ // Only the user worker is expected to be displayed in the UI, because the // user is not affiliated. - ASSERT_THAT(profile_ids, UnorderedElementsAre("user_cert_profile_1")); + ASSERT_THAT(profile_ids, UnorderedElementsAre(kUserCertProfileId)); EXPECT_EQ( - GetByProfileId(all_processes, "user_cert_profile_1"), + GetByProfileId(all_processes, kUserCertProfileId), FormatJsonDict( R"({ - "certProfileId": "user_cert_profile_1", + "certProfileId": "$0", + "certProfileName": "$1", "isDeviceWide": false, - "publicKey": "$0", + "publicKey": "$2", "stateId": 1, - "status": "$1", + "status": "$3", "timeSinceLastUpdate": "" })", - {kFormattedPublicKey, + {kUserCertProfileId, kUserCertProfileName, kFormattedPublicKey, l10n_util::GetStringUTF8( IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS_PREPARING_CSR_WAITING)}));
diff --git a/chrome/browser/ui/webui/settings/chromeos/internet_section.cc b/chrome/browser/ui/webui/settings/chromeos/internet_section.cc index d854a56f..1e50c8d 100644 --- a/chrome/browser/ui/webui/settings/chromeos/internet_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/internet_section.cc
@@ -713,6 +713,12 @@ IDS_SETTINGS_INTERNET_NETWORK_RENAME_DIALOG_DONE}, {"eSimRenameProfileDialogCancel", IDS_SETTINGS_INTERNET_NETWORK_RENAME_DIALOG_CANCEL}, + {"eSimRemoveProfileDialogCancel", + IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_CANCEL}, + {"esimRemoveProfileDialogTitle", + IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_TITLE}, + {"eSimRemoveProfileDialogRemove", + IDS_SETTINGS_INTERNET_NETWORK_REMOVE_PROFILE_DIALOG_REMOVE}, }; AddLocalizedStringsBulk(html_source, kLocalizedStrings);
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 91a947a..a409e90c 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
@@ -3,8 +3,11 @@ // found in the LICENSE file. #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.h" + +#include <algorithm> #include <memory> +#include "base/containers/span.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/optional.h" @@ -40,6 +43,7 @@ #include "ui/gfx/color_utils.h" #include "ui/gfx/geometry/point_conversions.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/range/range.h" namespace { @@ -148,6 +152,17 @@ const int tab_index_; }; +bool IsSortedAndContiguous(base::span<const int> sequence) { + if (sequence.size() < 2) + return true; + + if (!std::is_sorted(sequence.begin(), sequence.end())) + return false; + + return sequence.back() == + sequence.front() + static_cast<int>(sequence.size()) - 1; +} + } // namespace TabStripUIHandler::TabStripUIHandler(Browser* browser, @@ -201,12 +216,13 @@ } case TabGroupChange::kMoved: { + const int start_tab = browser_->tab_strip_model() + ->group_model() + ->GetTabGroup(change.group) + ->ListTabs() + .start(); FireWebUIListener("tab-group-moved", base::Value(change.group.ToString()), - base::Value(browser_->tab_strip_model() - ->group_model() - ->GetTabGroup(change.group) - ->ListTabs() - .front())); + base::Value(start_tab)); break; } @@ -262,11 +278,17 @@ base::Optional<tab_groups::TabGroupId> tab_group_id = tab_strip_model->GetTabGroupForTab(move->to_index); if (tab_group_id.has_value()) { - const std::vector<int> tabs_in_group = - tab_strip_model->group_model() - ->GetTabGroup(tab_group_id.value()) - ->ListTabs(); - if (tabs_in_group == selection.new_model.selected_indices()) { + const gfx::Range tabs_in_group = tab_strip_model->group_model() + ->GetTabGroup(tab_group_id.value()) + ->ListTabs(); + + const auto& selected_tabs = selection.new_model.selected_indices(); + const bool all_tabs_in_group = + IsSortedAndContiguous(base::make_span(selected_tabs)) && + selected_tabs.front() == static_cast<int>(tabs_in_group.start()) && + selected_tabs.size() == tabs_in_group.length(); + + if (all_tabs_in_group) { // If the selection includes all the tabs within the changed tab's // group, it is an indication that the entire group is being moved. // To prevent sending multiple events for each tab in the group, @@ -607,9 +629,10 @@ TabGroup* group = source_browser->tab_strip_model()->group_model()->GetTabGroup( group_id.value()); + const gfx::Range tabs_in_group = group->ListTabs(); if (source_browser == target_browser) { - if (group->ListTabs().front() == to_index) { + if (static_cast<int>(tabs_in_group.start()) == to_index) { // If the group is already in place, don't move it. This may happen // if multiple drag events happen while the tab group is still // being moved. @@ -622,8 +645,8 @@ int active_index = target_browser->tab_strip_model()->selection_model().active(); ui::ListSelectionModel group_selection; - group_selection.SetSelectedIndex(group->ListTabs().front()); - group_selection.SetSelectionFromAnchorTo(group->ListTabs().back()); + group_selection.SetSelectedIndex(tabs_in_group.start()); + group_selection.SetSelectionFromAnchorTo(tabs_in_group.end() - 1); group_selection.set_active(active_index); target_browser->tab_strip_model()->SetSelectionFromModel(group_selection); @@ -635,12 +658,10 @@ group_id.value(), base::Optional<tab_groups::TabGroupVisualData>{*group->visual_data()}); - std::vector<int> source_tab_indices = group->ListTabs(); - int tab_count = source_tab_indices.size(); + gfx::Range source_tab_indices = group->ListTabs(); + const int tab_count = source_tab_indices.length(); + const int from_index = source_tab_indices.start(); for (int i = 0; i < tab_count; i++) { - // The index needs to account for the tabs being detached, as they will - // cause the indices to shift. - int from_index = source_tab_indices[i] - i; tab_strip_ui::MoveTabAcrossWindows(source_browser, from_index, target_browser, to_index + i, group_id); }
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler_unittest.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler_unittest.cc index 3c1f9a7..15c3626 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler_unittest.cc
@@ -229,13 +229,13 @@ args.AppendInteger(new_index); handler()->HandleMoveGroup(&args); - std::vector<int> tabs_in_group = browser() - ->tab_strip_model() - ->group_model() - ->GetTabGroup(group_id) - ->ListTabs(); - ASSERT_EQ(new_index, tabs_in_group.front()); - ASSERT_EQ(new_index, tabs_in_group.back()); + gfx::Range tabs_in_group = browser() + ->tab_strip_model() + ->group_model() + ->GetTabGroup(group_id) + ->ListTabs(); + ASSERT_EQ(new_index, static_cast<int>(tabs_in_group.start())); + ASSERT_EQ(new_index, static_cast<int>(tabs_in_group.end()) - 1); EXPECT_EQ(1U, web_ui()->call_data().size()); const content::TestWebUI::CallData& call_data =
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc index df257b0..1b23814 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_util.cc
@@ -22,6 +22,7 @@ #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/dragdrop/os_exchange_data.h" +#include "ui/gfx/range/range.h" namespace tab_strip_ui { @@ -122,7 +123,7 @@ return false; Browser* source_browser = nullptr; - std::vector<int> tab_indices_to_move; + gfx::Range tab_indices_to_move; base::Optional<tab_groups::TabGroupId> source_group_id; // TODO(https://crbug.com/1069869): de-duplicate with @@ -141,7 +142,7 @@ /* contents = */ nullptr, &source_index)) { return false; } - tab_indices_to_move.push_back(source_index); + tab_indices_to_move = gfx::Range(source_index, source_index + 1); } else { std::string group_id_utf8 = base::UTF16ToUTF8(group_id_str); source_browser = @@ -162,8 +163,8 @@ *source_group_id, *source_group->visual_data()); } - for (size_t i = 0; i < tab_indices_to_move.size(); ++i) { - int source_index = tab_indices_to_move[i] - i; + const int source_index = tab_indices_to_move.start(); + for (size_t i = 0; i < tab_indices_to_move.length(); ++i) { MoveTabAcrossWindows(source_browser, source_index, new_browser, i, source_group_id); }
diff --git a/chrome/browser/vr/chrome_xr_integration_client.cc b/chrome/browser/vr/chrome_xr_integration_client.cc index 4e5bf60..2bf11d98 100644 --- a/chrome/browser/vr/chrome_xr_integration_client.cc +++ b/chrome/browser/vr/chrome_xr_integration_client.cc
@@ -23,10 +23,12 @@ #include "chrome/browser/android/vr/gvr_install_helper.h" #include "device/vr/android/gvr/gvr_device_provider.h" #if BUILDFLAG(ENABLE_ARCORE) +#include "chrome/browser/android/vr/ar_jni_headers/ArCompositorDelegateProviderImpl_jni.h" #include "chrome/browser/infobars/infobar_service.h" +#include "components/webxr/android/ar_compositor_delegate_provider.h" +#include "components/webxr/android/arcore_device_provider.h" #include "components/webxr/android/arcore_install_helper.h" #include "components/webxr/android/xr_install_helper_delegate.h" -#include "device/vr/android/arcore/arcore_device_provider_factory.h" #endif // ENABLE_ARCORE #endif // OS_WIN/OS_ANDROID @@ -77,16 +79,14 @@ #if BUILDFLAG(ENABLE_ARCORE) // TODO(https://crbug.com/966647) remove this check. if (base::FeatureList::IsEnabled(features::kWebXrArModule)) { - auto arcore_device_provider = device::ArCoreDeviceProviderFactory::Create(); - if (arcore_device_provider) { - providers.push_back(std::move(arcore_device_provider)); - } else { - // TODO(https://crbug.com/1050470): Remove this logging after - // investigation. - LOG(ERROR) << "Could not get ARCoreDeviceProviderFactory"; - base::RecordAction(base::UserMetricsAction( - "XR.ARCoreDeviceProviderFactory.NotInstalled")); - } + base::android::ScopedJavaLocalRef<jobject> + j_ar_compositor_delegate_provider = + vr::Java_ArCompositorDelegateProviderImpl_Constructor( + base::android::AttachCurrentThread()); + + providers.push_back(std::make_unique<webxr::ArCoreDeviceProvider>( + webxr::ArCompositorDelegateProvider( + std::move(j_ar_compositor_delegate_provider)))); } #endif // BUILDFLAG(ENABLE_ARCORE) #endif // defined(OS_ANDROID)
diff --git a/chrome/browser/webshare/chromeos/sharesheet_client.cc b/chrome/browser/webshare/chromeos/sharesheet_client.cc index c2cdffb..fc77356 100644 --- a/chrome/browser/webshare/chromeos/sharesheet_client.cc +++ b/chrome/browser/webshare/chromeos/sharesheet_client.cc
@@ -92,7 +92,7 @@ } if (files.empty()) { - // TODO(crbug.com/1127670): Support title/text/url sharing. + // TODO(crbug.com/1127670): Support title/text/url sharing without files. std::move(callback).Run(blink::mojom::ShareError::CANCELED); return; } @@ -102,6 +102,15 @@ current_share_->directory = chromeos::CrosDisksClient::GetArchiveMountPoint().Append( kWebShareDirname); + if (share_url.is_valid()) { + if (text.empty()) + current_share_->text = share_url.spec(); + else + current_share_->text = text + " " + share_url.spec(); + } else { + current_share_->text = text; + } + current_share_->title = title; current_share_->callback = std::move(callback); current_share_->prepare_directory_task = @@ -155,7 +164,8 @@ GetSharesheetCallback().Run( web_contents(), std::move(current_share_->file_paths), - std::move(current_share_->content_types), + std::move(current_share_->content_types), current_share_->text, + current_share_->title, base::BindOnce(&SharesheetClient::OnShowSharesheet, weak_ptr_factory_.GetWeakPtr())); } @@ -166,10 +176,13 @@ } // static -void SharesheetClient::ShowSharesheet(content::WebContents* web_contents, - std::vector<base::FilePath> file_paths, - std::vector<std::string> content_types, - CloseCallback close_callback) { +void SharesheetClient::ShowSharesheet( + content::WebContents* web_contents, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, + const std::string& text, + const std::string& title, + CloseCallback close_callback) { if (!base::FeatureList::IsEnabled(features::kSharesheet)) { std::move(close_callback).Run(sharesheet::SharesheetResult::kCancel); return; @@ -184,8 +197,8 @@ sharesheet_service->ShowBubble( web_contents, - apps_util::CreateShareIntentFromFiles(profile, std::move(file_paths), - std::move(content_types)), + apps_util::CreateShareIntentFromFiles(profile, file_paths, content_types, + text, title), std::move(close_callback)); }
diff --git a/chrome/browser/webshare/chromeos/sharesheet_client.h b/chrome/browser/webshare/chromeos/sharesheet_client.h index e3864feb..afccf38 100644 --- a/chrome/browser/webshare/chromeos/sharesheet_client.h +++ b/chrome/browser/webshare/chromeos/sharesheet_client.h
@@ -28,11 +28,13 @@ class SharesheetClient : public content::WebContentsObserver { public: using CloseCallback = sharesheet::CloseCallback; - using SharesheetCallback = - base::RepeatingCallback<void(content::WebContents* web_contents, - std::vector<base::FilePath> file_paths, - std::vector<std::string> content_types, - CloseCallback close_callback)>; + using SharesheetCallback = base::RepeatingCallback<void( + content::WebContents* web_contents, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, + const std::string& text, + const std::string& title, + CloseCallback close_callback)>; explicit SharesheetClient(content::WebContents* web_contents); SharesheetClient(const SharesheetClient&) = delete; @@ -55,8 +57,10 @@ void OnShowSharesheet(sharesheet::SharesheetResult result); static void ShowSharesheet(content::WebContents* web_contents, - std::vector<base::FilePath> file_paths, - std::vector<std::string> content_types, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, + const std::string& text, + const std::string& title, CloseCallback close_callback); static SharesheetCallback& GetSharesheetCallback(); @@ -76,6 +80,8 @@ base::FilePath directory; std::vector<base::FilePath> file_paths; std::vector<std::string> content_types; + std::string text; + std::string title; blink::mojom::ShareService::ShareCallback callback; std::unique_ptr<PrepareDirectoryTask> prepare_directory_task;
diff --git a/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc b/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc index 7541723..b56224b1 100644 --- a/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc +++ b/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc
@@ -58,6 +58,29 @@ return embedded_test_server()->GetURL("/webshare/index.html"); } + void ConfirmShareText(const std::string& script, + const char* expected_text, + const char* expected_title) { + SharesheetClient::SetSharesheetCallbackForTesting( + base::BindLambdaForTesting( + [&expected_text, &expected_title]( + content::WebContents* in_contents, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, + const std::string& text, const std::string& title, + SharesheetClient::CloseCallback close_callback) { + EXPECT_EQ(text, expected_text); + EXPECT_EQ(title, expected_title); + std::move(close_callback) + .Run(sharesheet::SharesheetResult::kCancel); + })); + + content::WebContents* const contents = + browser()->tab_strip_model()->GetActiveWebContents(); + EXPECT_EQ("share failed: AbortError: Share canceled", + content::EvalJs(contents, script)); + } + private: base::test::ScopedFeatureList feature_list_; }; @@ -72,8 +95,9 @@ SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting( [contents, &file_paths](content::WebContents* in_contents, - std::vector<base::FilePath> in_file_paths, - std::vector<std::string> content_types, + const std::vector<base::FilePath>& in_file_paths, + const std::vector<std::string>& content_types, + const std::string& text, const std::string& title, SharesheetClient::CloseCallback close_callback) { EXPECT_EQ(contents, in_contents); @@ -107,8 +131,9 @@ base::BindLambdaForTesting( [contents, &file_paths]( content::WebContents* in_contents, - std::vector<base::FilePath> in_file_paths, - std::vector<std::string> content_types, + const std::vector<base::FilePath>& in_file_paths, + const std::vector<std::string>& content_types, + const std::string& text, const std::string& title, SharesheetClient::CloseCallback close_callback) { EXPECT_EQ(contents, in_contents); @@ -136,8 +161,9 @@ ui_test_utils::NavigateToURL(browser(), GetAppUrl()); SharesheetClient::SetSharesheetCallbackForTesting(base::BindLambdaForTesting( [](content::WebContents* in_contents, - std::vector<base::FilePath> file_paths, - std::vector<std::string> content_types, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, const std::string& text, + const std::string& title, SharesheetClient::CloseCallback close_callback) { std::move(close_callback).Run(sharesheet::SharesheetResult::kCancel); })); @@ -146,4 +172,24 @@ content::EvalJs(contents, script)); } +IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, TextWithFile) { + ASSERT_TRUE(embedded_test_server()->Start()); + ui_test_utils::NavigateToURL(browser(), GetAppUrl()); + ConfirmShareText("share_file_title()", + /*expected_text=*/"", + /*expected_title=*/"Subject"); + ConfirmShareText("share_file_title_url()", + /*expected_text=*/"https://example.com/", + /*expected_title=*/"Subject"); + ConfirmShareText("share_file_text()", + /*expected_text=*/"Message", + /*expected_title=*/""); + ConfirmShareText("share_file_text_url()", + /*expected_text=*/"Message https://example.com/", + /*expected_title=*/""); + ConfirmShareText("share_file_url()", + /*expected_text=*/"https://example.com/", + /*expected_title=*/""); +} + } // namespace webshare
diff --git a/chrome/browser/webshare/share_service_unittest.cc b/chrome/browser/webshare/share_service_unittest.cc index d52ae31..8ae1070 100644 --- a/chrome/browser/webshare/share_service_unittest.cc +++ b/chrome/browser/webshare/share_service_unittest.cc
@@ -131,8 +131,10 @@ #if defined(OS_CHROMEOS) static void AcceptShareRequest(content::WebContents* web_contents, - std::vector<base::FilePath> file_paths, - std::vector<std::string> content_types, + const std::vector<base::FilePath>& file_paths, + const std::vector<std::string>& content_types, + const std::string& text, + const std::string& title, sharesheet::CloseCallback close_callback) { std::move(close_callback).Run(sharesheet::SharesheetResult::kSuccess); }
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index eabf76e..fe6c03c 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1606975184-aefe3d214a47b5e57d9dcedd54737f7057f97fb8.profdata +chrome-linux-master-1607018334-f670cab7a0d67beb5d9952b6762b75fa44bc4bec.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 996e611..e3311b1 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1606975184-196f68b969b73bc3452eae4d054586312080107c.profdata +chrome-mac-master-1607018334-4ec258faf10b8c54ec4574a66b7b864fdc99dca8.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 6ba57d6..57c29529 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1606920808-08f6b2c5c596afe8ed94a12135b915a001611c72.profdata +chrome-win32-master-1606996231-fb1aa25fe6cd29fd31733f8199da138cbb1f5caf.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 5258336..4b08e7b8 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-master-1606964048-45fff1aeb7e9c3fd35f310aad8ee0c61f812a3a1.profdata +chrome-win64-master-1607007593-3407e023275e887982890e083190cec03a46fa25.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index c524d81..08a2e2c4 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -742,6 +742,9 @@ "AbusiveOriginNotificationPermissionRevocation", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kRemoveStatusBarInWebApps{ + "RemoveStatusBarInWebApps", base::FEATURE_DISABLED_BY_DEFAULT}; + #if BUILDFLAG(IS_CHROMEOS_ASH) // Enables permanent removal of Legacy Supervised Users on startup. const base::Feature kRemoveSupervisedUsersOnStartup{
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index b50e08c..e57e3ce0 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -493,6 +493,9 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kAbusiveNotificationPermissionRevocation; +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kRemoveStatusBarInWebApps; + #if BUILDFLAG(IS_CHROMEOS_ASH) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kRemoveSupervisedUsersOnStartup;
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json index 6cf6b1f..3ab6d52a 100644 --- a/chrome/common/extensions/api/_permission_features.json +++ b/chrome/common/extensions/api/_permission_features.json
@@ -748,7 +748,7 @@ ] }, "scripting": { - "channel": "dev", + "channel": "stable", "extension_types": ["extension"], "min_manifest_version": 3 },
diff --git a/chrome/common/mac/service_management.mm b/chrome/common/mac/service_management.mm index 20fa327..4cc98625d 100644 --- a/chrome/common/mac/service_management.mm +++ b/chrome/common/mac/service_management.mm
@@ -202,9 +202,9 @@ if (!error) error = ErrnoFromLaunchData(resp.get()); - // On macOS 10.10+, removing a running job yields EINPROGRESS but the - // operation completes eventually (but not necessarily by the time RemoveJob - // is done). See rdar://18398683 for details. + // Removing a running job yields EINPROGRESS but the operation completes + // eventually (but not necessarily by the time RemoveJob is done). See + // rdar://18398683 for details. if (error == EINPROGRESS) error = 0;
diff --git a/chrome/installer/gcapi_mac/gcapi.mm b/chrome/installer/gcapi_mac/gcapi.mm index f5ec409..a5be50a 100644 --- a/chrome/installer/gcapi_mac/gcapi.mm +++ b/chrome/installer/gcapi_mac/gcapi.mm
@@ -66,8 +66,8 @@ // 10.2. int mac_os_x_minor_version = darwin_major_version - 4; - // Chrome is known to work on 10.10 - 10.15. - return mac_os_x_minor_version >= 10 && mac_os_x_minor_version <= 15; + // Chrome is known to work on 10.11 - 10.15. + return mac_os_x_minor_version >= 11 && mac_os_x_minor_version <= 15; } // Returns the pid/gid of the logged-in user, even if getuid() claims that the
diff --git a/chrome/installer/linux/debian/dist_package_versions.json b/chrome/installer/linux/debian/dist_package_versions.json index 42c7216..28ef1c5 100644 --- a/chrome/installer/linux/debian/dist_package_versions.json +++ b/chrome/installer/linux/debian/dist_package_versions.json
@@ -21,8 +21,8 @@ "libpangocairo-1.0-0": "1.42.4-7~deb10u1", "libstdc++6": "8.3.0-6", "libuuid1": "2.33.1-0.1", - "libx11-6": "2:1.6.7-1", - "libx11-xcb1": "2:1.6.7-1", + "libx11-6": "2:1.6.7-1+deb10u1", + "libx11-xcb1": "2:1.6.7-1+deb10u1", "libxcb-dri3-0": "1.13.1-2", "libxcb1": "1.13.1-2", "libxcomposite1": "1:0.4.4-2", @@ -34,6 +34,7 @@ "libxkbcommon0": "0.8.2-1", "libxrandr2": "2:1.5.1-1", "libxrender1": "1:0.9.10-1", + "libxshmfence1": "1.3-1", "libxss1": "1:1.2.3-1", "libxtst6": "2:1.2.3-1" }, @@ -72,6 +73,7 @@ "libxkbcommon0": "0.4.3-2", "libxrandr2": "2:1.4.2-1+deb8u1", "libxrender1": "1:0.9.8-1+b1", + "libxshmfence1": "1.1-4", "libxss1": "1:1.2.2-1", "libxtst6": "2:1.2.2-1+deb8u1" }, @@ -92,13 +94,13 @@ "libglib2.0-0": "2.50.3-2+deb9u2", "libgtk-3-0": "3.22.11-1", "libnspr4": "2:4.12-6", - "libnss3": "2:3.26.2-1.1+deb9u1", + "libnss3": "2:3.26.2-1.1+deb9u2", "libpango-1.0-0": "1.40.5-1", "libpangocairo-1.0-0": "1.40.5-1", "libstdc++6": "6.3.0-18+deb9u1", "libuuid1": "2.29.2-1+deb9u1", - "libx11-6": "2:1.6.4-3+deb9u2", - "libx11-xcb1": "2:1.6.4-3+deb9u2", + "libx11-6": "2:1.6.4-3+deb9u3", + "libx11-xcb1": "2:1.6.4-3+deb9u3", "libxcb-dri3-0": "1.12-1", "libxcb1": "1.12-1", "libxcomposite1": "1:0.4.4-2", @@ -110,6 +112,7 @@ "libxkbcommon0": "0.7.1-2~deb9u1", "libxrandr2": "2:1.5.1-1", "libxrender1": "1:0.9.10-1", + "libxshmfence1": "1.2-1+b2", "libxss1": "1:1.2.2-1", "libxtst6": "2:1.2.3-1" }, @@ -148,6 +151,7 @@ "libxkbcommon0": "0.4.1-0ubuntu1.1", "libxrandr2": "2:1.5.0-1~trusty1", "libxrender1": "1:0.9.8-1build0.14.04.1", + "libxshmfence1": "1.1-2", "libxss1": "1:1.2.2-1", "libxtst6": "2:1.2.2-1" }, @@ -168,13 +172,13 @@ "libglib2.0-0": "2.48.2-0ubuntu4.6", "libgtk-3-0": "3.18.9-1ubuntu3.3", "libnspr4": "2:4.13.1-0ubuntu0.16.04.1", - "libnss3": "2:3.28.4-0ubuntu0.16.04.13", + "libnss3": "2:3.28.4-0ubuntu0.16.04.14", "libpango-1.0-0": "1.38.1-1", "libpangocairo-1.0-0": "1.38.1-1", "libstdc++6": "5.4.0-6ubuntu1~16.04.12", "libuuid1": "2.27.1-6ubuntu3.10", - "libx11-6": "2:1.6.3-1ubuntu2.1", - "libx11-xcb1": "2:1.6.3-1ubuntu2.1", + "libx11-6": "2:1.6.3-1ubuntu2.2", + "libx11-xcb1": "2:1.6.3-1ubuntu2.2", "libxcb-dri3-0": "1.11.1-1ubuntu1", "libxcb1": "1.11.1-1ubuntu1", "libxcomposite1": "1:0.4.4-1", @@ -186,6 +190,7 @@ "libxkbcommon0": "0.5.0-1ubuntu2.1", "libxrandr2": "2:1.5.0-1", "libxrender1": "1:0.9.9-0ubuntu1", + "libxshmfence1": "1.2-1", "libxss1": "1:1.2.2-1", "libxtst6": "2:1.2.2-1" }, @@ -206,13 +211,13 @@ "libglib2.0-0": "2.56.4-0ubuntu0.18.04.6", "libgtk-3-0": "3.22.30-1ubuntu4", "libnspr4": "2:4.18-1ubuntu1", - "libnss3": "2:3.35-2ubuntu2.11", + "libnss3": "2:3.35-2ubuntu2.12", "libpango-1.0-0": "1.40.14-1ubuntu0.1", "libpangocairo-1.0-0": "1.40.14-1ubuntu0.1", "libstdc++6": "8.4.0-1ubuntu1~18.04", - "libuuid1": "2.31.1-0.4ubuntu3.6", - "libx11-6": "2:1.6.4-3ubuntu0.1", - "libx11-xcb1": "2:1.6.4-3ubuntu0.1", + "libuuid1": "2.31.1-0.4ubuntu3.7", + "libx11-6": "2:1.6.4-3ubuntu0.3", + "libx11-xcb1": "2:1.6.4-3ubuntu0.3", "libxcb-dri3-0": "1.13-2~ubuntu18.04", "libxcb1": "1.13-2~ubuntu18.04", "libxcomposite1": "1:0.4.4-2", @@ -224,6 +229,7 @@ "libxkbcommon0": "0.8.0-1ubuntu0.1", "libxrandr2": "2:1.5.1-1", "libxrender1": "1:0.9.10-1", + "libxshmfence1": "1.3-1", "libxss1": "1:1.2.2-1", "libxtst6": "2:1.2.3-1" }, @@ -262,33 +268,34 @@ "libxkbcommon0": "0.8.4-1", "libxrandr2": "2:1.5.2-0ubuntu1", "libxrender1": "1:0.9.10-1", + "libxshmfence1": "1.3-1", "libxss1": "1:1.2.3-1", "libxtst6": "2:1.2.3-1" }, "Ubuntu 20.04 (Focal)": { - "libasound2": "1.2.2-2.1ubuntu1", + "libasound2": "1.2.2-2.1ubuntu2.2", "libatk-bridge2.0-0": "2.34.2-0ubuntu2~20.04.1", "libatk1.0-0": "2.35.1-1ubuntu2", "libatspi2.0-0": "2.36.0-2", - "libc6": "2.31-0ubuntu9", + "libc6": "2.31-0ubuntu9.1", "libcairo2": "1.16.0-4ubuntu1", "libcups2": "2.3.1-9ubuntu1.1", "libdbus-1-3": "1.12.16-2ubuntu2.1", "libdrm2": "2.4.101-2", "libexpat1": "2.2.9-1build1", "libgbm1": "20.0.8-0ubuntu1~20.04.1", - "libgcc1": "1:10-20200411-0ubuntu1", + "libgcc1": "1:10.2.0-5ubuntu1~20.04", "libgdk-pixbuf2.0-0": "2.40.0+dfsg-3", "libglib2.0-0": "2.64.3-1~ubuntu20.04.1", "libgtk-3-0": "3.24.20-0ubuntu1", "libnspr4": "2:4.25-1", - "libnss3": "2:3.49.1-1ubuntu1.4", + "libnss3": "2:3.49.1-1ubuntu1.5", "libpango-1.0-0": "1.44.7-2ubuntu4", "libpangocairo-1.0-0": "1.44.7-2ubuntu4", - "libstdc++6": "10-20200411-0ubuntu1", - "libuuid1": "2.34-0.1ubuntu9", - "libx11-6": "2:1.6.9-2ubuntu1", - "libx11-xcb1": "2:1.6.9-2ubuntu1", + "libstdc++6": "10.2.0-5ubuntu1~20.04", + "libuuid1": "2.34-0.1ubuntu9.1", + "libx11-6": "2:1.6.9-2ubuntu1.1", + "libx11-xcb1": "2:1.6.9-2ubuntu1.1", "libxcb-dri3-0": "1.14-2", "libxcb1": "1.14-2", "libxcomposite1": "1:0.4.5-1", @@ -300,6 +307,7 @@ "libxkbcommon0": "0.10.0-1", "libxrandr2": "2:1.5.2-0ubuntu1", "libxrender1": "1:0.9.10-1", + "libxshmfence1": "1.3-1", "libxss1": "1:1.2.3-1", "libxtst6": "2:1.2.3-1" }
diff --git a/chrome/installer/linux/debian/update_dist_package_versions.py b/chrome/installer/linux/debian/update_dist_package_versions.py index 6f03f890..00bccb4c 100755 --- a/chrome/installer/linux/debian/update_dist_package_versions.py +++ b/chrome/installer/linux/debian/update_dist_package_versions.py
@@ -59,7 +59,6 @@ "libuuid1", "libx11-6", "libx11-xcb1", - "libxkbcommon0", "libxcb1", "libxcb-dri3-0", "libxcomposite1", @@ -68,8 +67,10 @@ "libxext6", "libxfixes3", "libxi6", + "libxkbcommon0", "libxrandr2", "libxrender1", + "libxshmfence1", "libxss1", "libxtst6", ])
diff --git a/chrome/installer/linux/rpm/dist_package_provides.json b/chrome/installer/linux/rpm/dist_package_provides.json index 3b3645b..2c2e140 100644 --- a/chrome/installer/linux/rpm/dist_package_provides.json +++ b/chrome/installer/linux/rpm/dist_package_provides.json
@@ -1,284 +1,4 @@ { - "Fedora 30": [ - "ld-linux-x86-64.so.2()(64bit)", - "ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)", - "ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)", - "ld-linux-x86-64.so.2(GLIBC_2.4)(64bit)", - "libX11-xcb.so.1()(64bit)", - "libX11.so.6()(64bit)", - "libXcomposite.so.1()(64bit)", - "libXcursor.so.1()(64bit)", - "libXdamage.so.1()(64bit)", - "libXext.so.6()(64bit)", - "libXfixes.so.3()(64bit)", - "libXi.so.6()(64bit)", - "libXrandr.so.2()(64bit)", - "libXrender.so.1()(64bit)", - "libXss.so.1()(64bit)", - "libXtst.so.6()(64bit)", - "libasound.so.2()(64bit)", - "libasound.so.2(ALSA_0.9)(64bit)", - "libasound.so.2(ALSA_0.9.0)(64bit)", - "libasound.so.2(ALSA_0.9.0rc4)(64bit)", - "libasound.so.2(ALSA_0.9.0rc8)(64bit)", - "libasound.so.2(ALSA_0.9.3)(64bit)", - "libasound.so.2(ALSA_0.9.5)(64bit)", - "libasound.so.2(ALSA_0.9.7)(64bit)", - "libasound.so.2(ALSA_1.1.6)(64bit)", - "libatk-1.0.so.0()(64bit)", - "libatk-bridge-2.0.so.0()(64bit)", - "libatspi.so.0()(64bit)", - "libc.so.6()(64bit)", - "libc.so.6(GLIBC_2.10)(64bit)", - "libc.so.6(GLIBC_2.11)(64bit)", - "libc.so.6(GLIBC_2.12)(64bit)", - "libc.so.6(GLIBC_2.13)(64bit)", - "libc.so.6(GLIBC_2.14)(64bit)", - "libc.so.6(GLIBC_2.15)(64bit)", - "libc.so.6(GLIBC_2.16)(64bit)", - "libc.so.6(GLIBC_2.17)(64bit)", - "libc.so.6(GLIBC_2.18)(64bit)", - "libc.so.6(GLIBC_2.2.5)(64bit)", - "libc.so.6(GLIBC_2.2.6)(64bit)", - "libc.so.6(GLIBC_2.22)(64bit)", - "libc.so.6(GLIBC_2.23)(64bit)", - "libc.so.6(GLIBC_2.24)(64bit)", - "libc.so.6(GLIBC_2.25)(64bit)", - "libc.so.6(GLIBC_2.26)(64bit)", - "libc.so.6(GLIBC_2.27)(64bit)", - "libc.so.6(GLIBC_2.28)(64bit)", - "libc.so.6(GLIBC_2.29)(64bit)", - "libc.so.6(GLIBC_2.3)(64bit)", - "libc.so.6(GLIBC_2.3.2)(64bit)", - "libc.so.6(GLIBC_2.3.3)(64bit)", - "libc.so.6(GLIBC_2.3.4)(64bit)", - "libc.so.6(GLIBC_2.4)(64bit)", - "libc.so.6(GLIBC_2.5)(64bit)", - "libc.so.6(GLIBC_2.6)(64bit)", - "libc.so.6(GLIBC_2.7)(64bit)", - "libc.so.6(GLIBC_2.8)(64bit)", - "libc.so.6(GLIBC_2.9)(64bit)", - "libcairo.so()(64bit)", - "libcairo.so.2()(64bit)", - "libcups.so.2()(64bit)", - "libdbus-1.so.3()(64bit)", - "libdbus-1.so.3(LIBDBUS_1_3)(64bit)", - "libdbus-1.so.3(LIBDBUS_PRIVATE_1.12.16)(64bit)", - "libdl.so.2()(64bit)", - "libdl.so.2(GLIBC_2.2.5)(64bit)", - "libdl.so.2(GLIBC_2.3.3)(64bit)", - "libdl.so.2(GLIBC_2.3.4)(64bit)", - "libdrm.so.2()(64bit)", - "libexpat.so.1()(64bit)", - "libgbm.so.1()(64bit)", - "libgcc_s.so.1()(64bit)", - "libgcc_s.so.1(GCC_3.0)(64bit)", - "libgcc_s.so.1(GCC_3.3)(64bit)", - "libgcc_s.so.1(GCC_3.3.1)(64bit)", - "libgcc_s.so.1(GCC_3.4)(64bit)", - "libgcc_s.so.1(GCC_3.4.2)(64bit)", - "libgcc_s.so.1(GCC_3.4.4)(64bit)", - "libgcc_s.so.1(GCC_4.0.0)(64bit)", - "libgcc_s.so.1(GCC_4.2.0)(64bit)", - "libgcc_s.so.1(GCC_4.3.0)(64bit)", - "libgcc_s.so.1(GCC_4.7.0)(64bit)", - "libgcc_s.so.1(GCC_4.8.0)(64bit)", - "libgcc_s.so.1(GCC_7.0.0)(64bit)", - "libgdk-3.so.0()(64bit)", - "libgdk_pixbuf-2.0.so.0()(64bit)", - "libgio-2.0.so.0()(64bit)", - "libglib-2.0.so.0()(64bit)", - "libgmodule-2.0.so.0()(64bit)", - "libgobject-2.0.so.0()(64bit)", - "libgtk-3.so.0()(64bit)", - "libm.so.6()(64bit)", - "libm.so.6(GLIBC_2.15)(64bit)", - "libm.so.6(GLIBC_2.18)(64bit)", - "libm.so.6(GLIBC_2.2.5)(64bit)", - "libm.so.6(GLIBC_2.23)(64bit)", - "libm.so.6(GLIBC_2.24)(64bit)", - "libm.so.6(GLIBC_2.25)(64bit)", - "libm.so.6(GLIBC_2.26)(64bit)", - "libm.so.6(GLIBC_2.27)(64bit)", - "libm.so.6(GLIBC_2.28)(64bit)", - "libm.so.6(GLIBC_2.29)(64bit)", - "libm.so.6(GLIBC_2.4)(64bit)", - "libnspr4.so()(64bit)", - "libnss3.so()(64bit)", - "libnss3.so(NSS_3.10)(64bit)", - "libnss3.so(NSS_3.10.2)(64bit)", - "libnss3.so(NSS_3.11)(64bit)", - "libnss3.so(NSS_3.11.1)(64bit)", - "libnss3.so(NSS_3.11.2)(64bit)", - "libnss3.so(NSS_3.11.7)(64bit)", - "libnss3.so(NSS_3.11.9)(64bit)", - "libnss3.so(NSS_3.12)(64bit)", - "libnss3.so(NSS_3.12.1)(64bit)", - "libnss3.so(NSS_3.12.10)(64bit)", - "libnss3.so(NSS_3.12.3)(64bit)", - "libnss3.so(NSS_3.12.4)(64bit)", - "libnss3.so(NSS_3.12.5)(64bit)", - "libnss3.so(NSS_3.12.6)(64bit)", - "libnss3.so(NSS_3.12.7)(64bit)", - "libnss3.so(NSS_3.12.9)(64bit)", - "libnss3.so(NSS_3.13)(64bit)", - "libnss3.so(NSS_3.13.2)(64bit)", - "libnss3.so(NSS_3.14)(64bit)", - "libnss3.so(NSS_3.14.1)(64bit)", - "libnss3.so(NSS_3.14.3)(64bit)", - "libnss3.so(NSS_3.15)(64bit)", - "libnss3.so(NSS_3.15.4)(64bit)", - "libnss3.so(NSS_3.16.1)(64bit)", - "libnss3.so(NSS_3.16.2)(64bit)", - "libnss3.so(NSS_3.18)(64bit)", - "libnss3.so(NSS_3.19)(64bit)", - "libnss3.so(NSS_3.19.1)(64bit)", - "libnss3.so(NSS_3.2)(64bit)", - "libnss3.so(NSS_3.2.1)(64bit)", - "libnss3.so(NSS_3.21)(64bit)", - "libnss3.so(NSS_3.22)(64bit)", - "libnss3.so(NSS_3.3)(64bit)", - "libnss3.so(NSS_3.3.1)(64bit)", - "libnss3.so(NSS_3.30)(64bit)", - "libnss3.so(NSS_3.31)(64bit)", - "libnss3.so(NSS_3.33)(64bit)", - "libnss3.so(NSS_3.34)(64bit)", - "libnss3.so(NSS_3.39)(64bit)", - "libnss3.so(NSS_3.4)(64bit)", - "libnss3.so(NSS_3.43)(64bit)", - "libnss3.so(NSS_3.44)(64bit)", - "libnss3.so(NSS_3.45)(64bit)", - "libnss3.so(NSS_3.47)(64bit)", - "libnss3.so(NSS_3.5)(64bit)", - "libnss3.so(NSS_3.6)(64bit)", - "libnss3.so(NSS_3.7)(64bit)", - "libnss3.so(NSS_3.7.1)(64bit)", - "libnss3.so(NSS_3.8)(64bit)", - "libnss3.so(NSS_3.9)(64bit)", - "libnss3.so(NSS_3.9.2)(64bit)", - "libnss3.so(NSS_3.9.3)(64bit)", - "libnssutil3.so()(64bit)", - "libnssutil3.so(NSSUTIL_3.12)(64bit)", - "libnssutil3.so(NSSUTIL_3.12.3)(64bit)", - "libnssutil3.so(NSSUTIL_3.12.5)(64bit)", - "libnssutil3.so(NSSUTIL_3.12.7)(64bit)", - "libnssutil3.so(NSSUTIL_3.13)(64bit)", - "libnssutil3.so(NSSUTIL_3.14)(64bit)", - "libnssutil3.so(NSSUTIL_3.15)(64bit)", - "libnssutil3.so(NSSUTIL_3.17.1)(64bit)", - "libnssutil3.so(NSSUTIL_3.21)(64bit)", - "libnssutil3.so(NSSUTIL_3.24)(64bit)", - "libnssutil3.so(NSSUTIL_3.25)(64bit)", - "libnssutil3.so(NSSUTIL_3.31)(64bit)", - "libnssutil3.so(NSSUTIL_3.33)(64bit)", - "libnssutil3.so(NSSUTIL_3.38)(64bit)", - "libnssutil3.so(NSSUTIL_3.39)(64bit)", - "libpango-1.0.so.0()(64bit)", - "libpangocairo-1.0.so.0()(64bit)", - "libpthread.so.0()(64bit)", - "libpthread.so.0(GLIBC_2.11)(64bit)", - "libpthread.so.0(GLIBC_2.12)(64bit)", - "libpthread.so.0(GLIBC_2.18)(64bit)", - "libpthread.so.0(GLIBC_2.2.5)(64bit)", - "libpthread.so.0(GLIBC_2.2.6)(64bit)", - "libpthread.so.0(GLIBC_2.28)(64bit)", - "libpthread.so.0(GLIBC_2.3.2)(64bit)", - "libpthread.so.0(GLIBC_2.3.3)(64bit)", - "libpthread.so.0(GLIBC_2.3.4)(64bit)", - "libpthread.so.0(GLIBC_2.4)(64bit)", - "librt.so.1()(64bit)", - "librt.so.1(GLIBC_2.2.5)(64bit)", - "librt.so.1(GLIBC_2.3.3)(64bit)", - "librt.so.1(GLIBC_2.3.4)(64bit)", - "librt.so.1(GLIBC_2.4)(64bit)", - "librt.so.1(GLIBC_2.7)(64bit)", - "libsmime3.so()(64bit)", - "libsmime3.so(NSS_3.10)(64bit)", - "libsmime3.so(NSS_3.12.10)(64bit)", - "libsmime3.so(NSS_3.12.2)(64bit)", - "libsmime3.so(NSS_3.13)(64bit)", - "libsmime3.so(NSS_3.15)(64bit)", - "libsmime3.so(NSS_3.16)(64bit)", - "libsmime3.so(NSS_3.18)(64bit)", - "libsmime3.so(NSS_3.2)(64bit)", - "libsmime3.so(NSS_3.2.1)(64bit)", - "libsmime3.so(NSS_3.3)(64bit)", - "libsmime3.so(NSS_3.4)(64bit)", - "libsmime3.so(NSS_3.4.1)(64bit)", - "libsmime3.so(NSS_3.6)(64bit)", - "libsmime3.so(NSS_3.7)(64bit)", - "libsmime3.so(NSS_3.7.2)(64bit)", - "libsmime3.so(NSS_3.8)(64bit)", - "libsmime3.so(NSS_3.9)(64bit)", - "libsmime3.so(NSS_3.9.3)(64bit)", - "libstdc++.so.5()(64bit)", - "libstdc++.so.5(CXXABI_1.2)(64bit)", - "libstdc++.so.5(CXXABI_1.2.1)(64bit)", - "libstdc++.so.5(CXXABI_1.2.2)(64bit)", - "libstdc++.so.5(GLIBCPP_3.2)(64bit)", - "libstdc++.so.5(GLIBCPP_3.2.1)(64bit)", - "libstdc++.so.5(GLIBCPP_3.2.2)(64bit)", - "libstdc++.so.5(GLIBCPP_3.2.3)(64bit)", - "libstdc++.so.5(GLIBCPP_3.2.4)(64bit)", - "libstdc++.so.6()(64bit)", - "libstdc++.so.6(CXXABI_1.3)(64bit)", - "libstdc++.so.6(CXXABI_1.3.1)(64bit)", - "libstdc++.so.6(CXXABI_1.3.10)(64bit)", - "libstdc++.so.6(CXXABI_1.3.11)(64bit)", - "libstdc++.so.6(CXXABI_1.3.12)(64bit)", - "libstdc++.so.6(CXXABI_1.3.2)(64bit)", - "libstdc++.so.6(CXXABI_1.3.3)(64bit)", - "libstdc++.so.6(CXXABI_1.3.4)(64bit)", - "libstdc++.so.6(CXXABI_1.3.5)(64bit)", - "libstdc++.so.6(CXXABI_1.3.6)(64bit)", - "libstdc++.so.6(CXXABI_1.3.7)(64bit)", - "libstdc++.so.6(CXXABI_1.3.8)(64bit)", - "libstdc++.so.6(CXXABI_1.3.9)(64bit)", - "libstdc++.so.6(CXXABI_FLOAT128)(64bit)", - "libstdc++.so.6(CXXABI_TM_1)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.1)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.10)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.11)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.12)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.13)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.14)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.15)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.16)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.17)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.18)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.19)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.2)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.20)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.21)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.22)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.23)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.24)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.25)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.26)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.27)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.28)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.3)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.4)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.5)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.6)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.7)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.8)(64bit)", - "libstdc++.so.6(GLIBCXX_3.4.9)(64bit)", - "libuuid.so.1()(64bit)", - "libuuid.so.1(UUIDD_PRIVATE)(64bit)", - "libuuid.so.1(UUID_1.0)(64bit)", - "libuuid.so.1(UUID_2.20)(64bit)", - "libuuid.so.1(UUID_2.31)(64bit)", - "libxcb-dri3.so.0()(64bit)", - "libxcb.so.1()(64bit)", - "libxkbcommon.so.0()(64bit)", - "libxkbcommon.so.0(V_0.5.0)(64bit)", - "libxkbcommon.so.0(V_0.6.0)(64bit)", - "libxkbcommon.so.0(V_0.7.0)(64bit)", - "libxkbcommon.so.0(V_0.8.0)(64bit)", - "rtld(GNU_HASH)" - ], "Fedora 31": [ "ld-linux-x86-64.so.2()(64bit)", "ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)", @@ -433,6 +153,8 @@ "libnss3.so(NSS_3.5)(64bit)", "libnss3.so(NSS_3.52)(64bit)", "libnss3.so(NSS_3.53)(64bit)", + "libnss3.so(NSS_3.55)(64bit)", + "libnss3.so(NSS_3.58)(64bit)", "libnss3.so(NSS_3.6)(64bit)", "libnss3.so(NSS_3.7)(64bit)", "libnss3.so(NSS_3.7.1)(64bit)", @@ -552,6 +274,571 @@ "libxkbcommon.so.0(V_0.6.0)(64bit)", "libxkbcommon.so.0(V_0.7.0)(64bit)", "libxkbcommon.so.0(V_0.8.0)(64bit)", + "libxshmfence.so.1()(64bit)", + "rtld(GNU_HASH)" + ], + "Fedora 32": [ + "ld-linux-x86-64.so.2()(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.4)(64bit)", + "libX11-xcb.so.1()(64bit)", + "libX11.so.6()(64bit)", + "libXcomposite.so.1()(64bit)", + "libXcursor.so.1()(64bit)", + "libXdamage.so.1()(64bit)", + "libXext.so.6()(64bit)", + "libXfixes.so.3()(64bit)", + "libXi.so.6()(64bit)", + "libXrandr.so.2()(64bit)", + "libXrender.so.1()(64bit)", + "libXss.so.1()(64bit)", + "libXtst.so.6()(64bit)", + "libasound.so.2()(64bit)", + "libasound.so.2(ALSA_0.9)(64bit)", + "libasound.so.2(ALSA_0.9.0)(64bit)", + "libasound.so.2(ALSA_0.9.0rc4)(64bit)", + "libasound.so.2(ALSA_0.9.0rc8)(64bit)", + "libasound.so.2(ALSA_0.9.3)(64bit)", + "libasound.so.2(ALSA_0.9.5)(64bit)", + "libasound.so.2(ALSA_0.9.7)(64bit)", + "libasound.so.2(ALSA_1.1.6)(64bit)", + "libatk-1.0.so.0()(64bit)", + "libatk-bridge-2.0.so.0()(64bit)", + "libatspi.so.0()(64bit)", + "libc.so.6()(64bit)", + "libc.so.6(GLIBC_2.10)(64bit)", + "libc.so.6(GLIBC_2.11)(64bit)", + "libc.so.6(GLIBC_2.12)(64bit)", + "libc.so.6(GLIBC_2.13)(64bit)", + "libc.so.6(GLIBC_2.14)(64bit)", + "libc.so.6(GLIBC_2.15)(64bit)", + "libc.so.6(GLIBC_2.16)(64bit)", + "libc.so.6(GLIBC_2.17)(64bit)", + "libc.so.6(GLIBC_2.18)(64bit)", + "libc.so.6(GLIBC_2.2.5)(64bit)", + "libc.so.6(GLIBC_2.2.6)(64bit)", + "libc.so.6(GLIBC_2.22)(64bit)", + "libc.so.6(GLIBC_2.23)(64bit)", + "libc.so.6(GLIBC_2.24)(64bit)", + "libc.so.6(GLIBC_2.25)(64bit)", + "libc.so.6(GLIBC_2.26)(64bit)", + "libc.so.6(GLIBC_2.27)(64bit)", + "libc.so.6(GLIBC_2.28)(64bit)", + "libc.so.6(GLIBC_2.29)(64bit)", + "libc.so.6(GLIBC_2.3)(64bit)", + "libc.so.6(GLIBC_2.3.2)(64bit)", + "libc.so.6(GLIBC_2.3.3)(64bit)", + "libc.so.6(GLIBC_2.3.4)(64bit)", + "libc.so.6(GLIBC_2.30)(64bit)", + "libc.so.6(GLIBC_2.4)(64bit)", + "libc.so.6(GLIBC_2.5)(64bit)", + "libc.so.6(GLIBC_2.6)(64bit)", + "libc.so.6(GLIBC_2.7)(64bit)", + "libc.so.6(GLIBC_2.8)(64bit)", + "libc.so.6(GLIBC_2.9)(64bit)", + "libcairo.so()(64bit)", + "libcairo.so.2()(64bit)", + "libcups.so.2()(64bit)", + "libdbus-1.so.3()(64bit)", + "libdbus-1.so.3(LIBDBUS_1_3)(64bit)", + "libdbus-1.so.3(LIBDBUS_PRIVATE_1.12.20)(64bit)", + "libdl.so.2()(64bit)", + "libdl.so.2(GLIBC_2.2.5)(64bit)", + "libdl.so.2(GLIBC_2.3.3)(64bit)", + "libdl.so.2(GLIBC_2.3.4)(64bit)", + "libdrm.so.2()(64bit)", + "libexpat.so.1()(64bit)", + "libgbm.so.1()(64bit)", + "libgcc_s.so.1()(64bit)", + "libgcc_s.so.1(GCC_3.0)(64bit)", + "libgcc_s.so.1(GCC_3.3)(64bit)", + "libgcc_s.so.1(GCC_3.3.1)(64bit)", + "libgcc_s.so.1(GCC_3.4)(64bit)", + "libgcc_s.so.1(GCC_3.4.2)(64bit)", + "libgcc_s.so.1(GCC_3.4.4)(64bit)", + "libgcc_s.so.1(GCC_4.0.0)(64bit)", + "libgcc_s.so.1(GCC_4.2.0)(64bit)", + "libgcc_s.so.1(GCC_4.3.0)(64bit)", + "libgcc_s.so.1(GCC_4.7.0)(64bit)", + "libgcc_s.so.1(GCC_4.8.0)(64bit)", + "libgcc_s.so.1(GCC_7.0.0)(64bit)", + "libgdk-3.so.0()(64bit)", + "libgdk_pixbuf-2.0.so.0()(64bit)", + "libgio-2.0.so.0()(64bit)", + "libglib-2.0.so.0()(64bit)", + "libgmodule-2.0.so.0()(64bit)", + "libgobject-2.0.so.0()(64bit)", + "libgtk-3.so.0()(64bit)", + "libm.so.6()(64bit)", + "libm.so.6(GLIBC_2.15)(64bit)", + "libm.so.6(GLIBC_2.18)(64bit)", + "libm.so.6(GLIBC_2.2.5)(64bit)", + "libm.so.6(GLIBC_2.23)(64bit)", + "libm.so.6(GLIBC_2.24)(64bit)", + "libm.so.6(GLIBC_2.25)(64bit)", + "libm.so.6(GLIBC_2.26)(64bit)", + "libm.so.6(GLIBC_2.27)(64bit)", + "libm.so.6(GLIBC_2.28)(64bit)", + "libm.so.6(GLIBC_2.29)(64bit)", + "libm.so.6(GLIBC_2.31)(64bit)", + "libm.so.6(GLIBC_2.4)(64bit)", + "libnspr4.so()(64bit)", + "libnss3.so()(64bit)", + "libnss3.so(NSS_3.10)(64bit)", + "libnss3.so(NSS_3.10.2)(64bit)", + "libnss3.so(NSS_3.11)(64bit)", + "libnss3.so(NSS_3.11.1)(64bit)", + "libnss3.so(NSS_3.11.2)(64bit)", + "libnss3.so(NSS_3.11.7)(64bit)", + "libnss3.so(NSS_3.11.9)(64bit)", + "libnss3.so(NSS_3.12)(64bit)", + "libnss3.so(NSS_3.12.1)(64bit)", + "libnss3.so(NSS_3.12.10)(64bit)", + "libnss3.so(NSS_3.12.3)(64bit)", + "libnss3.so(NSS_3.12.4)(64bit)", + "libnss3.so(NSS_3.12.5)(64bit)", + "libnss3.so(NSS_3.12.6)(64bit)", + "libnss3.so(NSS_3.12.7)(64bit)", + "libnss3.so(NSS_3.12.9)(64bit)", + "libnss3.so(NSS_3.13)(64bit)", + "libnss3.so(NSS_3.13.2)(64bit)", + "libnss3.so(NSS_3.14)(64bit)", + "libnss3.so(NSS_3.14.1)(64bit)", + "libnss3.so(NSS_3.14.3)(64bit)", + "libnss3.so(NSS_3.15)(64bit)", + "libnss3.so(NSS_3.15.4)(64bit)", + "libnss3.so(NSS_3.16.1)(64bit)", + "libnss3.so(NSS_3.16.2)(64bit)", + "libnss3.so(NSS_3.18)(64bit)", + "libnss3.so(NSS_3.19)(64bit)", + "libnss3.so(NSS_3.19.1)(64bit)", + "libnss3.so(NSS_3.2)(64bit)", + "libnss3.so(NSS_3.2.1)(64bit)", + "libnss3.so(NSS_3.21)(64bit)", + "libnss3.so(NSS_3.22)(64bit)", + "libnss3.so(NSS_3.3)(64bit)", + "libnss3.so(NSS_3.3.1)(64bit)", + "libnss3.so(NSS_3.30)(64bit)", + "libnss3.so(NSS_3.31)(64bit)", + "libnss3.so(NSS_3.33)(64bit)", + "libnss3.so(NSS_3.34)(64bit)", + "libnss3.so(NSS_3.39)(64bit)", + "libnss3.so(NSS_3.4)(64bit)", + "libnss3.so(NSS_3.43)(64bit)", + "libnss3.so(NSS_3.44)(64bit)", + "libnss3.so(NSS_3.45)(64bit)", + "libnss3.so(NSS_3.47)(64bit)", + "libnss3.so(NSS_3.5)(64bit)", + "libnss3.so(NSS_3.52)(64bit)", + "libnss3.so(NSS_3.53)(64bit)", + "libnss3.so(NSS_3.55)(64bit)", + "libnss3.so(NSS_3.58)(64bit)", + "libnss3.so(NSS_3.6)(64bit)", + "libnss3.so(NSS_3.7)(64bit)", + "libnss3.so(NSS_3.7.1)(64bit)", + "libnss3.so(NSS_3.8)(64bit)", + "libnss3.so(NSS_3.9)(64bit)", + "libnss3.so(NSS_3.9.2)(64bit)", + "libnss3.so(NSS_3.9.3)(64bit)", + "libnssutil3.so()(64bit)", + "libnssutil3.so(NSSUTIL_3.12)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.3)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.5)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.7)(64bit)", + "libnssutil3.so(NSSUTIL_3.13)(64bit)", + "libnssutil3.so(NSSUTIL_3.14)(64bit)", + "libnssutil3.so(NSSUTIL_3.15)(64bit)", + "libnssutil3.so(NSSUTIL_3.17.1)(64bit)", + "libnssutil3.so(NSSUTIL_3.21)(64bit)", + "libnssutil3.so(NSSUTIL_3.24)(64bit)", + "libnssutil3.so(NSSUTIL_3.25)(64bit)", + "libnssutil3.so(NSSUTIL_3.31)(64bit)", + "libnssutil3.so(NSSUTIL_3.33)(64bit)", + "libnssutil3.so(NSSUTIL_3.38)(64bit)", + "libnssutil3.so(NSSUTIL_3.39)(64bit)", + "libpango-1.0.so.0()(64bit)", + "libpangocairo-1.0.so.0()(64bit)", + "libpthread.so.0()(64bit)", + "libpthread.so.0(GLIBC_2.11)(64bit)", + "libpthread.so.0(GLIBC_2.12)(64bit)", + "libpthread.so.0(GLIBC_2.18)(64bit)", + "libpthread.so.0(GLIBC_2.2.5)(64bit)", + "libpthread.so.0(GLIBC_2.2.6)(64bit)", + "libpthread.so.0(GLIBC_2.28)(64bit)", + "libpthread.so.0(GLIBC_2.3.2)(64bit)", + "libpthread.so.0(GLIBC_2.3.3)(64bit)", + "libpthread.so.0(GLIBC_2.3.4)(64bit)", + "libpthread.so.0(GLIBC_2.30)(64bit)", + "libpthread.so.0(GLIBC_2.31)(64bit)", + "libpthread.so.0(GLIBC_2.4)(64bit)", + "librt.so.1()(64bit)", + "librt.so.1(GLIBC_2.2.5)(64bit)", + "librt.so.1(GLIBC_2.3.3)(64bit)", + "librt.so.1(GLIBC_2.3.4)(64bit)", + "librt.so.1(GLIBC_2.4)(64bit)", + "librt.so.1(GLIBC_2.7)(64bit)", + "libsmime3.so()(64bit)", + "libsmime3.so(NSS_3.10)(64bit)", + "libsmime3.so(NSS_3.12.10)(64bit)", + "libsmime3.so(NSS_3.12.2)(64bit)", + "libsmime3.so(NSS_3.13)(64bit)", + "libsmime3.so(NSS_3.15)(64bit)", + "libsmime3.so(NSS_3.16)(64bit)", + "libsmime3.so(NSS_3.18)(64bit)", + "libsmime3.so(NSS_3.2)(64bit)", + "libsmime3.so(NSS_3.2.1)(64bit)", + "libsmime3.so(NSS_3.3)(64bit)", + "libsmime3.so(NSS_3.4)(64bit)", + "libsmime3.so(NSS_3.4.1)(64bit)", + "libsmime3.so(NSS_3.6)(64bit)", + "libsmime3.so(NSS_3.7)(64bit)", + "libsmime3.so(NSS_3.7.2)(64bit)", + "libsmime3.so(NSS_3.8)(64bit)", + "libsmime3.so(NSS_3.9)(64bit)", + "libsmime3.so(NSS_3.9.3)(64bit)", + "libstdc++.so.6()(64bit)", + "libstdc++.so.6(CXXABI_1.3)(64bit)", + "libstdc++.so.6(CXXABI_1.3.1)(64bit)", + "libstdc++.so.6(CXXABI_1.3.10)(64bit)", + "libstdc++.so.6(CXXABI_1.3.11)(64bit)", + "libstdc++.so.6(CXXABI_1.3.12)(64bit)", + "libstdc++.so.6(CXXABI_1.3.2)(64bit)", + "libstdc++.so.6(CXXABI_1.3.3)(64bit)", + "libstdc++.so.6(CXXABI_1.3.4)(64bit)", + "libstdc++.so.6(CXXABI_1.3.5)(64bit)", + "libstdc++.so.6(CXXABI_1.3.6)(64bit)", + "libstdc++.so.6(CXXABI_1.3.7)(64bit)", + "libstdc++.so.6(CXXABI_1.3.8)(64bit)", + "libstdc++.so.6(CXXABI_1.3.9)(64bit)", + "libstdc++.so.6(CXXABI_FLOAT128)(64bit)", + "libstdc++.so.6(CXXABI_TM_1)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.1)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.10)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.11)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.12)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.13)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.14)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.15)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.16)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.17)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.18)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.19)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.2)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.20)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.21)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.22)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.23)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.24)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.25)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.26)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.27)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.28)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.3)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.4)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.5)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.6)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.7)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.8)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.9)(64bit)", + "libuuid.so.1()(64bit)", + "libuuid.so.1(UUIDD_PRIVATE)(64bit)", + "libuuid.so.1(UUID_1.0)(64bit)", + "libuuid.so.1(UUID_2.20)(64bit)", + "libuuid.so.1(UUID_2.31)(64bit)", + "libxcb-dri3.so.0()(64bit)", + "libxcb.so.1()(64bit)", + "libxkbcommon.so.0()(64bit)", + "libxkbcommon.so.0(V_0.5.0)(64bit)", + "libxkbcommon.so.0(V_0.6.0)(64bit)", + "libxkbcommon.so.0(V_0.7.0)(64bit)", + "libxkbcommon.so.0(V_0.8.0)(64bit)", + "libxshmfence.so.1()(64bit)", + "rtld(GNU_HASH)" + ], + "Fedora 33": [ + "ld-linux-x86-64.so.2()(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.2.5)(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)", + "ld-linux-x86-64.so.2(GLIBC_2.4)(64bit)", + "libX11-xcb.so.1()(64bit)", + "libX11.so.6()(64bit)", + "libXcomposite.so.1()(64bit)", + "libXcursor.so.1()(64bit)", + "libXdamage.so.1()(64bit)", + "libXext.so.6()(64bit)", + "libXfixes.so.3()(64bit)", + "libXi.so.6()(64bit)", + "libXrandr.so.2()(64bit)", + "libXrender.so.1()(64bit)", + "libXss.so.1()(64bit)", + "libXtst.so.6()(64bit)", + "libasound.so.2()(64bit)", + "libasound.so.2(ALSA_0.9)(64bit)", + "libasound.so.2(ALSA_0.9.0)(64bit)", + "libasound.so.2(ALSA_0.9.0rc4)(64bit)", + "libasound.so.2(ALSA_0.9.0rc8)(64bit)", + "libasound.so.2(ALSA_0.9.3)(64bit)", + "libasound.so.2(ALSA_0.9.5)(64bit)", + "libasound.so.2(ALSA_0.9.7)(64bit)", + "libasound.so.2(ALSA_1.1.6)(64bit)", + "libatk-1.0.so.0()(64bit)", + "libatk-bridge-2.0.so.0()(64bit)", + "libatspi.so.0()(64bit)", + "libc.so.6()(64bit)", + "libc.so.6(GLIBC_2.10)(64bit)", + "libc.so.6(GLIBC_2.11)(64bit)", + "libc.so.6(GLIBC_2.12)(64bit)", + "libc.so.6(GLIBC_2.13)(64bit)", + "libc.so.6(GLIBC_2.14)(64bit)", + "libc.so.6(GLIBC_2.15)(64bit)", + "libc.so.6(GLIBC_2.16)(64bit)", + "libc.so.6(GLIBC_2.17)(64bit)", + "libc.so.6(GLIBC_2.18)(64bit)", + "libc.so.6(GLIBC_2.2.5)(64bit)", + "libc.so.6(GLIBC_2.2.6)(64bit)", + "libc.so.6(GLIBC_2.22)(64bit)", + "libc.so.6(GLIBC_2.23)(64bit)", + "libc.so.6(GLIBC_2.24)(64bit)", + "libc.so.6(GLIBC_2.25)(64bit)", + "libc.so.6(GLIBC_2.26)(64bit)", + "libc.so.6(GLIBC_2.27)(64bit)", + "libc.so.6(GLIBC_2.28)(64bit)", + "libc.so.6(GLIBC_2.29)(64bit)", + "libc.so.6(GLIBC_2.3)(64bit)", + "libc.so.6(GLIBC_2.3.2)(64bit)", + "libc.so.6(GLIBC_2.3.3)(64bit)", + "libc.so.6(GLIBC_2.3.4)(64bit)", + "libc.so.6(GLIBC_2.30)(64bit)", + "libc.so.6(GLIBC_2.32)(64bit)", + "libc.so.6(GLIBC_2.4)(64bit)", + "libc.so.6(GLIBC_2.5)(64bit)", + "libc.so.6(GLIBC_2.6)(64bit)", + "libc.so.6(GLIBC_2.7)(64bit)", + "libc.so.6(GLIBC_2.8)(64bit)", + "libc.so.6(GLIBC_2.9)(64bit)", + "libcairo.so()(64bit)", + "libcairo.so.2()(64bit)", + "libcups.so.2()(64bit)", + "libdbus-1.so.3()(64bit)", + "libdbus-1.so.3(LIBDBUS_1_3)(64bit)", + "libdbus-1.so.3(LIBDBUS_PRIVATE_1.12.20)(64bit)", + "libdl.so.2()(64bit)", + "libdl.so.2(GLIBC_2.2.5)(64bit)", + "libdl.so.2(GLIBC_2.3.3)(64bit)", + "libdl.so.2(GLIBC_2.3.4)(64bit)", + "libdrm.so.2()(64bit)", + "libexpat.so.1()(64bit)", + "libgbm.so.1()(64bit)", + "libgcc_s.so.1()(64bit)", + "libgcc_s.so.1(GCC_3.0)(64bit)", + "libgcc_s.so.1(GCC_3.3)(64bit)", + "libgcc_s.so.1(GCC_3.3.1)(64bit)", + "libgcc_s.so.1(GCC_3.4)(64bit)", + "libgcc_s.so.1(GCC_3.4.2)(64bit)", + "libgcc_s.so.1(GCC_3.4.4)(64bit)", + "libgcc_s.so.1(GCC_4.0.0)(64bit)", + "libgcc_s.so.1(GCC_4.2.0)(64bit)", + "libgcc_s.so.1(GCC_4.3.0)(64bit)", + "libgcc_s.so.1(GCC_4.7.0)(64bit)", + "libgcc_s.so.1(GCC_4.8.0)(64bit)", + "libgcc_s.so.1(GCC_7.0.0)(64bit)", + "libgdk-3.so.0()(64bit)", + "libgdk_pixbuf-2.0.so.0()(64bit)", + "libgio-2.0.so.0()(64bit)", + "libglib-2.0.so.0()(64bit)", + "libgmodule-2.0.so.0()(64bit)", + "libgobject-2.0.so.0()(64bit)", + "libgtk-3.so.0()(64bit)", + "libm.so.6()(64bit)", + "libm.so.6(GLIBC_2.15)(64bit)", + "libm.so.6(GLIBC_2.18)(64bit)", + "libm.so.6(GLIBC_2.2.5)(64bit)", + "libm.so.6(GLIBC_2.23)(64bit)", + "libm.so.6(GLIBC_2.24)(64bit)", + "libm.so.6(GLIBC_2.25)(64bit)", + "libm.so.6(GLIBC_2.26)(64bit)", + "libm.so.6(GLIBC_2.27)(64bit)", + "libm.so.6(GLIBC_2.28)(64bit)", + "libm.so.6(GLIBC_2.29)(64bit)", + "libm.so.6(GLIBC_2.31)(64bit)", + "libm.so.6(GLIBC_2.32)(64bit)", + "libm.so.6(GLIBC_2.4)(64bit)", + "libnspr4.so()(64bit)", + "libnss3.so()(64bit)", + "libnss3.so(NSS_3.10)(64bit)", + "libnss3.so(NSS_3.10.2)(64bit)", + "libnss3.so(NSS_3.11)(64bit)", + "libnss3.so(NSS_3.11.1)(64bit)", + "libnss3.so(NSS_3.11.2)(64bit)", + "libnss3.so(NSS_3.11.7)(64bit)", + "libnss3.so(NSS_3.11.9)(64bit)", + "libnss3.so(NSS_3.12)(64bit)", + "libnss3.so(NSS_3.12.1)(64bit)", + "libnss3.so(NSS_3.12.10)(64bit)", + "libnss3.so(NSS_3.12.3)(64bit)", + "libnss3.so(NSS_3.12.4)(64bit)", + "libnss3.so(NSS_3.12.5)(64bit)", + "libnss3.so(NSS_3.12.6)(64bit)", + "libnss3.so(NSS_3.12.7)(64bit)", + "libnss3.so(NSS_3.12.9)(64bit)", + "libnss3.so(NSS_3.13)(64bit)", + "libnss3.so(NSS_3.13.2)(64bit)", + "libnss3.so(NSS_3.14)(64bit)", + "libnss3.so(NSS_3.14.1)(64bit)", + "libnss3.so(NSS_3.14.3)(64bit)", + "libnss3.so(NSS_3.15)(64bit)", + "libnss3.so(NSS_3.15.4)(64bit)", + "libnss3.so(NSS_3.16.1)(64bit)", + "libnss3.so(NSS_3.16.2)(64bit)", + "libnss3.so(NSS_3.18)(64bit)", + "libnss3.so(NSS_3.19)(64bit)", + "libnss3.so(NSS_3.19.1)(64bit)", + "libnss3.so(NSS_3.2)(64bit)", + "libnss3.so(NSS_3.2.1)(64bit)", + "libnss3.so(NSS_3.21)(64bit)", + "libnss3.so(NSS_3.22)(64bit)", + "libnss3.so(NSS_3.3)(64bit)", + "libnss3.so(NSS_3.3.1)(64bit)", + "libnss3.so(NSS_3.30)(64bit)", + "libnss3.so(NSS_3.31)(64bit)", + "libnss3.so(NSS_3.33)(64bit)", + "libnss3.so(NSS_3.34)(64bit)", + "libnss3.so(NSS_3.39)(64bit)", + "libnss3.so(NSS_3.4)(64bit)", + "libnss3.so(NSS_3.43)(64bit)", + "libnss3.so(NSS_3.44)(64bit)", + "libnss3.so(NSS_3.45)(64bit)", + "libnss3.so(NSS_3.47)(64bit)", + "libnss3.so(NSS_3.5)(64bit)", + "libnss3.so(NSS_3.52)(64bit)", + "libnss3.so(NSS_3.53)(64bit)", + "libnss3.so(NSS_3.55)(64bit)", + "libnss3.so(NSS_3.58)(64bit)", + "libnss3.so(NSS_3.6)(64bit)", + "libnss3.so(NSS_3.7)(64bit)", + "libnss3.so(NSS_3.7.1)(64bit)", + "libnss3.so(NSS_3.8)(64bit)", + "libnss3.so(NSS_3.9)(64bit)", + "libnss3.so(NSS_3.9.2)(64bit)", + "libnss3.so(NSS_3.9.3)(64bit)", + "libnssutil3.so()(64bit)", + "libnssutil3.so(NSSUTIL_3.12)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.3)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.5)(64bit)", + "libnssutil3.so(NSSUTIL_3.12.7)(64bit)", + "libnssutil3.so(NSSUTIL_3.13)(64bit)", + "libnssutil3.so(NSSUTIL_3.14)(64bit)", + "libnssutil3.so(NSSUTIL_3.15)(64bit)", + "libnssutil3.so(NSSUTIL_3.17.1)(64bit)", + "libnssutil3.so(NSSUTIL_3.21)(64bit)", + "libnssutil3.so(NSSUTIL_3.24)(64bit)", + "libnssutil3.so(NSSUTIL_3.25)(64bit)", + "libnssutil3.so(NSSUTIL_3.31)(64bit)", + "libnssutil3.so(NSSUTIL_3.33)(64bit)", + "libnssutil3.so(NSSUTIL_3.38)(64bit)", + "libnssutil3.so(NSSUTIL_3.39)(64bit)", + "libpango-1.0.so.0()(64bit)", + "libpangocairo-1.0.so.0()(64bit)", + "libpthread.so.0()(64bit)", + "libpthread.so.0(GLIBC_2.11)(64bit)", + "libpthread.so.0(GLIBC_2.12)(64bit)", + "libpthread.so.0(GLIBC_2.18)(64bit)", + "libpthread.so.0(GLIBC_2.2.5)(64bit)", + "libpthread.so.0(GLIBC_2.2.6)(64bit)", + "libpthread.so.0(GLIBC_2.28)(64bit)", + "libpthread.so.0(GLIBC_2.3.2)(64bit)", + "libpthread.so.0(GLIBC_2.3.3)(64bit)", + "libpthread.so.0(GLIBC_2.3.4)(64bit)", + "libpthread.so.0(GLIBC_2.30)(64bit)", + "libpthread.so.0(GLIBC_2.31)(64bit)", + "libpthread.so.0(GLIBC_2.4)(64bit)", + "librt.so.1()(64bit)", + "librt.so.1(GLIBC_2.2.5)(64bit)", + "librt.so.1(GLIBC_2.3.3)(64bit)", + "librt.so.1(GLIBC_2.3.4)(64bit)", + "librt.so.1(GLIBC_2.4)(64bit)", + "librt.so.1(GLIBC_2.7)(64bit)", + "libsmime3.so()(64bit)", + "libsmime3.so(NSS_3.10)(64bit)", + "libsmime3.so(NSS_3.12.10)(64bit)", + "libsmime3.so(NSS_3.12.2)(64bit)", + "libsmime3.so(NSS_3.13)(64bit)", + "libsmime3.so(NSS_3.15)(64bit)", + "libsmime3.so(NSS_3.16)(64bit)", + "libsmime3.so(NSS_3.18)(64bit)", + "libsmime3.so(NSS_3.2)(64bit)", + "libsmime3.so(NSS_3.2.1)(64bit)", + "libsmime3.so(NSS_3.3)(64bit)", + "libsmime3.so(NSS_3.4)(64bit)", + "libsmime3.so(NSS_3.4.1)(64bit)", + "libsmime3.so(NSS_3.6)(64bit)", + "libsmime3.so(NSS_3.7)(64bit)", + "libsmime3.so(NSS_3.7.2)(64bit)", + "libsmime3.so(NSS_3.8)(64bit)", + "libsmime3.so(NSS_3.9)(64bit)", + "libsmime3.so(NSS_3.9.3)(64bit)", + "libstdc++.so.6()(64bit)", + "libstdc++.so.6(CXXABI_1.3)(64bit)", + "libstdc++.so.6(CXXABI_1.3.1)(64bit)", + "libstdc++.so.6(CXXABI_1.3.10)(64bit)", + "libstdc++.so.6(CXXABI_1.3.11)(64bit)", + "libstdc++.so.6(CXXABI_1.3.12)(64bit)", + "libstdc++.so.6(CXXABI_1.3.2)(64bit)", + "libstdc++.so.6(CXXABI_1.3.3)(64bit)", + "libstdc++.so.6(CXXABI_1.3.4)(64bit)", + "libstdc++.so.6(CXXABI_1.3.5)(64bit)", + "libstdc++.so.6(CXXABI_1.3.6)(64bit)", + "libstdc++.so.6(CXXABI_1.3.7)(64bit)", + "libstdc++.so.6(CXXABI_1.3.8)(64bit)", + "libstdc++.so.6(CXXABI_1.3.9)(64bit)", + "libstdc++.so.6(CXXABI_FLOAT128)(64bit)", + "libstdc++.so.6(CXXABI_TM_1)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.1)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.10)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.11)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.12)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.13)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.14)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.15)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.16)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.17)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.18)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.19)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.2)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.20)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.21)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.22)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.23)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.24)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.25)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.26)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.27)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.28)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.3)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.4)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.5)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.6)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.7)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.8)(64bit)", + "libstdc++.so.6(GLIBCXX_3.4.9)(64bit)", + "libuuid.so.1()(64bit)", + "libuuid.so.1(UUIDD_PRIVATE)(64bit)", + "libuuid.so.1(UUID_1.0)(64bit)", + "libuuid.so.1(UUID_2.20)(64bit)", + "libuuid.so.1(UUID_2.31)(64bit)", + "libuuid.so.1(UUID_2.36)(64bit)", + "libxcb-dri3.so.0()(64bit)", + "libxcb.so.1()(64bit)", + "libxkbcommon.so.0()(64bit)", + "libxkbcommon.so.0(V_0.5.0)(64bit)", + "libxkbcommon.so.0(V_0.6.0)(64bit)", + "libxkbcommon.so.0(V_0.7.0)(64bit)", + "libxkbcommon.so.0(V_0.8.0)(64bit)", + "libxkbcommon.so.0(V_1.0.0)(64bit)", + "libxshmfence.so.1()(64bit)", "rtld(GNU_HASH)" ], "openSUSE Leap 15.1": [ @@ -1097,6 +1384,8 @@ "libxkbcommon.so.0(V_0.7.0)(64bit)", "libxkbcommon.so.0(V_0.8.0)", "libxkbcommon.so.0(V_0.8.0)(64bit)", + "libxshmfence.so.1", + "libxshmfence.so.1()(64bit)", "rtld(GNU_HASH)" ], "openSUSE Leap 15.2": [ @@ -1642,6 +1931,8 @@ "libxkbcommon.so.0(V_0.7.0)(64bit)", "libxkbcommon.so.0(V_0.8.0)", "libxkbcommon.so.0(V_0.8.0)(64bit)", + "libxshmfence.so.1", + "libxshmfence.so.1()(64bit)", "rtld(GNU_HASH)" ] }
diff --git a/chrome/installer/linux/rpm/update_package_provides.py b/chrome/installer/linux/rpm/update_package_provides.py index 0f38d92..f6ea0bf 100755 --- a/chrome/installer/linux/rpm/update_package_provides.py +++ b/chrome/installer/linux/rpm/update_package_provides.py
@@ -58,13 +58,14 @@ "libsmime3.so", "libstdc++.so", "libuuid.so", - "libxkbcommon.so.0", "libxcb.so", "libxcb-dri3.so.0", + "libxkbcommon.so.0", + "libxshmfence.so.1", "rtld(GNU_HASH)", ]) -SUPPORTED_FEDORA_RELEASES = ['30', '31'] +SUPPORTED_FEDORA_RELEASES = ['31', '32', '33'] SUPPORTED_OPENSUSE_LEAP_RELEASES = ['15.1', '15.2'] COMMON_NS = "http://linux.duke.edu/metadata/common"
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index 18874ffe..e9c8c71 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -805,6 +805,16 @@ render_frame, original_params); } } else { + // Flash is deprecated in M87 and removed in M88+. If a plugin uses flash, + // its status will be |PluginStatus::kNotFound|. If for some reason the + // status is different, we should not treat it as JavaScript plugin but + // return a deprecated message. + if (!ShouldUseJavaScriptSettingForPlugin(info)) { + return NonLoadablePluginPlaceholder::CreateFlashDeprecatedPlaceholder( + render_frame, original_params) + ->plugin(); + } + // TODO(bauerb): This should be in content/. WebPluginParams params(original_params); for (const auto& mime_type : info.mime_types) { @@ -827,10 +837,7 @@ auto* content_settings_agent_delegate = ChromeContentSettingsAgentDelegate::Get(render_frame); - const ContentSettingsType content_type = - ShouldUseJavaScriptSettingForPlugin(info) - ? ContentSettingsType::JAVASCRIPT - : ContentSettingsType::PLUGINS; + const ContentSettingsType content_type = ContentSettingsType::JAVASCRIPT; if ((status == chrome::mojom::PluginStatus::kUnauthorized || status == chrome::mojom::PluginStatus::kBlocked) &&
diff --git a/chrome/services/sharing/nearby/platform/webrtc.cc b/chrome/services/sharing/nearby/platform/webrtc.cc index cb809128..f91adfb 100644 --- a/chrome/services/sharing/nearby/platform/webrtc.cc +++ b/chrome/services/sharing/nearby/platform/webrtc.cc
@@ -9,6 +9,7 @@ #include "chrome/services/sharing/webrtc/ipc_packet_socket_factory.h" #include "chrome/services/sharing/webrtc/mdns_responder_adapter.h" #include "chrome/services/sharing/webrtc/p2p_port_allocator.h" +#include "chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom-shared.h" #include "jingle/glue/thread_wrapper.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" @@ -109,9 +110,11 @@ public: WebRtcSignalingMessengerImpl( const std::string& self_id, + const connections::LocationHint& location_hint, const mojo::SharedRemote<sharing::mojom::WebRtcSignalingMessenger>& messenger) : self_id_(self_id), + location_hint_(location_hint), messenger_(messenger), task_runner_( base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})) {} @@ -123,12 +126,39 @@ WebRtcSignalingMessengerImpl& operator=( const WebRtcSignalingMessengerImpl& other) = delete; + sharing::mojom::LocationHintPtr CreateLocationHint() { + sharing::mojom::LocationHintPtr location_hint_ptr = + sharing::mojom::LocationHint::New(); + location_hint_ptr->location = location_hint_.location(); + switch (location_hint_.format()) { + case location::nearby::connections::LocationStandard_Format:: + LocationStandard_Format_E164_CALLING: + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::E164_CALLING; + break; + case location::nearby::connections::LocationStandard_Format:: + LocationStandard_Format_ISO_3166_1_ALPHA_2: + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2; + break; + case location::nearby::connections::LocationStandard_Format:: + LocationStandard_Format_UNKNOWN: + // Here we default to the current default country code before sending. + location_hint_ptr->location = base::CountryCodeForCurrentTimezone(); + location_hint_ptr->format = + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2; + break; + } + return location_hint_ptr; + } + // api::WebRtcSignalingMessenger: bool SendMessage(absl::string_view peer_id, const ByteArray& message) override { bool success = false; if (!messenger_->SendMessage(self_id_, std::string(peer_id), - std::string(message), &success)) { + CreateLocationHint(), std::string(message), + &success)) { return false; } @@ -155,7 +185,8 @@ pending_remote; mojo::PendingReceiver<sharing::mojom::IncomingMessagesListener> pending_receiver = pending_remote.InitWithNewPipeAndPassReceiver(); - if (!messenger_->StartReceivingMessages(self_id_, std::move(pending_remote), + if (!messenger_->StartReceivingMessages(self_id_, CreateLocationHint(), + std::move(pending_remote), &success) || !success) { receiving_messages_ = false; @@ -186,6 +217,7 @@ private: bool receiving_messages_ = false; std::string self_id_; + connections::LocationHint location_hint_; mojo::SharedRemote<sharing::mojom::WebRtcSignalingMessenger> messenger_; scoped_refptr<base::SequencedTaskRunner> task_runner_; }; @@ -307,9 +339,8 @@ WebRtcMedium::GetSignalingMessenger( absl::string_view self_id, const connections::LocationHint& location_hint) { - // TODO(https://crbug.com/1142001): Use |location_hint|. return std::make_unique<WebRtcSignalingMessengerImpl>( - std::string(self_id), webrtc_signaling_messenger_); + std::string(self_id), location_hint, webrtc_signaling_messenger_); } } // namespace chrome
diff --git a/chrome/services/sharing/nearby/platform/webrtc_test.cc b/chrome/services/sharing/nearby/platform/webrtc_test.cc index ebde882..759649a 100644 --- a/chrome/services/sharing/nearby/platform/webrtc_test.cc +++ b/chrome/services/sharing/nearby/platform/webrtc_test.cc
@@ -4,6 +4,7 @@ #include "chrome/services/sharing/nearby/platform/webrtc.h" +#include "base/i18n/timezone.h" #include "base/test/task_environment.h" #include "chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -65,6 +66,30 @@ return mojo_impl_; } + connections::LocationHint GetCountryCodeLocationHint( + const std::string& country_code) { + auto location_hint = connections::LocationHint(); + location_hint.set_location(country_code); + location_hint.set_format( + connections::LocationStandard_Format_ISO_3166_1_ALPHA_2); + return location_hint; + } + + connections::LocationHint GetCallingCodeLocationHint( + const std::string& calling_code) { + auto location_hint = connections::LocationHint(); + location_hint.set_location(calling_code); + location_hint.set_format(connections::LocationStandard_Format_E164_CALLING); + return location_hint; + } + + connections::LocationHint GetUnknownLocationHint() { + auto location_hint = connections::LocationHint(); + location_hint.set_location(""); + location_hint.set_format(connections::LocationStandard_Format_UNKNOWN); + return location_hint; + } + private: base::test::TaskEnvironment task_environment_; testing::NiceMock<sharing::MockWebRtcDependencies> mojo_impl_; @@ -97,9 +122,9 @@ } TEST_F(WebRtcMediumTest, GetSignalingMessenger) { - // TODO(https://crbug.com/1142001): Test with non-trivial |location_hint|. std::unique_ptr<api::WebRtcSignalingMessenger> messenger = - GetMedium().GetSignalingMessenger("from", connections::LocationHint()); + GetMedium().GetSignalingMessenger("from", + GetCountryCodeLocationHint("ZZ")); EXPECT_TRUE(messenger); } @@ -110,17 +135,49 @@ base::RunLoop loop; EXPECT_CALL(GetMockWebRtcDependencies(), - SendMessage(testing::Eq(from), testing::Eq(to), + SendMessage(testing::Eq(from), testing::Eq(to), testing::_, testing::Eq(std::string(message)), testing::_)) - .WillOnce(testing::WithArg<3>(testing::Invoke( + .WillOnce(testing::WithArg<4>(testing::Invoke( [&](sharing::MockWebRtcDependencies::SendMessageCallback callback) { std::move(callback).Run(/*success=*/true); loop.Quit(); }))); - // TODO(https://crbug.com/1142001): Test with non-trivial |location_hint|. std::unique_ptr<api::WebRtcSignalingMessenger> messenger = - GetMedium().GetSignalingMessenger(from, connections::LocationHint()); + GetMedium().GetSignalingMessenger(from, GetCountryCodeLocationHint("ZZ")); + EXPECT_TRUE(messenger); + + EXPECT_TRUE(messenger->SendMessage(to, message)); + loop.Run(); +} + +TEST_F(WebRtcMediumTest, GetMessengerAndSendMessageWithUnknownLocationHint) { + ByteArray message("message"); + const std::string from = "from"; + const std::string to = "to"; + + base::RunLoop loop; + EXPECT_CALL(GetMockWebRtcDependencies(), + SendMessage(testing::Eq(from), testing::Eq(to), testing::_, + testing::Eq(std::string(message)), testing::_)) + .WillOnce(testing::Invoke( + [&](const std::string& self_id, const std::string& peer_id, + sharing::mojom::LocationHintPtr location_hint, + const std::string& message, + sharing::MockWebRtcDependencies::SendMessageCallback callback) { + // Validate we get the default country code if we pass an UNKNOWN + // location hint. + EXPECT_EQ(base::CountryCodeForCurrentTimezone(), + location_hint->location); + EXPECT_EQ( + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2, + location_hint->format); + std::move(callback).Run(/*success=*/true); + loop.Quit(); + })); + + std::unique_ptr<api::WebRtcSignalingMessenger> messenger = + GetMedium().GetSignalingMessenger(from, GetUnknownLocationHint()); EXPECT_TRUE(messenger); EXPECT_TRUE(messenger->SendMessage(to, message)); @@ -132,24 +189,28 @@ const std::string from = "from"; EXPECT_CALL(GetMockWebRtcDependencies(), - StartReceivingMessages(testing::Eq(from), testing::_, testing::_)) + StartReceivingMessages(testing::Eq(from), testing::_, testing::_, + testing::_)) .WillOnce(testing::Invoke( [&message]( const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> listener, sharing::MockWebRtcDependencies::StartReceivingMessagesCallback callback) { + EXPECT_EQ("ZZ", location_hint->location); + EXPECT_EQ( + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2, + location_hint->format); std::move(callback).Run(/*success=*/true); - mojo::Remote<sharing::mojom::IncomingMessagesListener> remote( std::move(listener)); remote->OnMessage(std::string(message)); })); - // TODO(https://crbug.com/1142001): Test with non-trivial |location_hint|. std::unique_ptr<api::WebRtcSignalingMessenger> messenger = - GetMedium().GetSignalingMessenger(from, connections::LocationHint()); + GetMedium().GetSignalingMessenger(from, GetCountryCodeLocationHint("ZZ")); EXPECT_TRUE(messenger); base::RunLoop loop; @@ -167,13 +228,23 @@ mojo::Remote<sharing::mojom::IncomingMessagesListener> remote; EXPECT_CALL(GetMockWebRtcDependencies(), - StartReceivingMessages(testing::Eq(from), testing::_, testing::_)) + StartReceivingMessages(testing::Eq(from), testing::_, testing::_, + testing::_)) .WillOnce(testing::Invoke( [&](const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> listener, sharing::MockWebRtcDependencies::StartReceivingMessagesCallback callback) { + // Expect the unknown location hint to get defaulted by the time we + // get here. + EXPECT_EQ(base::CountryCodeForCurrentTimezone(), + location_hint->location); + EXPECT_EQ( + sharing::mojom::LocationStandardFormat::ISO_3166_1_ALPHA_2, + location_hint->format); + std::move(callback).Run(/*success=*/true); remote.Bind(std::move(listener)); @@ -186,9 +257,8 @@ } })); - // TODO(https://crbug.com/1142001): Test with non-trivial |location_hint|. std::unique_ptr<api::WebRtcSignalingMessenger> messenger = - GetMedium().GetSignalingMessenger(from, connections::LocationHint()); + GetMedium().GetSignalingMessenger(from, GetUnknownLocationHint()); EXPECT_TRUE(messenger); base::RunLoop loop; @@ -211,14 +281,20 @@ const std::string from = "from"; EXPECT_CALL(GetMockWebRtcDependencies(), - StartReceivingMessages(testing::Eq(from), testing::_, testing::_)) + StartReceivingMessages(testing::Eq(from), testing::_, testing::_, + testing::_)) .WillOnce(testing::Invoke( [&message]( const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> listener, sharing::MockWebRtcDependencies::StartReceivingMessagesCallback callback) { + EXPECT_EQ("+1", location_hint->location); + EXPECT_EQ(sharing::mojom::LocationStandardFormat::E164_CALLING, + location_hint->format); + std::move(callback).Run(/*success=*/true); mojo::Remote<sharing::mojom::IncomingMessagesListener> remote( @@ -226,9 +302,8 @@ remote->OnMessage(std::string(message)); })); - // TODO(https://crbug.com/1142001): Test with non-trivial |location_hint|. std::unique_ptr<api::WebRtcSignalingMessenger> messenger = - GetMedium().GetSignalingMessenger(from, connections::LocationHint()); + GetMedium().GetSignalingMessenger(from, GetCallingCodeLocationHint("+1")); EXPECT_TRUE(messenger); base::RunLoop loop; @@ -240,14 +315,20 @@ message = ByteArray("message_2"); EXPECT_CALL(GetMockWebRtcDependencies(), - StartReceivingMessages(testing::Eq(from), testing::_, testing::_)) + StartReceivingMessages(testing::Eq(from), testing::_, testing::_, + testing::_)) .WillOnce(testing::Invoke( [&message]( const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> listener, sharing::MockWebRtcDependencies::StartReceivingMessagesCallback callback) { + EXPECT_EQ("+1", location_hint->location); + EXPECT_EQ(sharing::mojom::LocationStandardFormat::E164_CALLING, + location_hint->format); + std::move(callback).Run(/*success=*/true); mojo::Remote<sharing::mojom::IncomingMessagesListener> remote(
diff --git a/chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h b/chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h index 295a8a29..215911f3 100644 --- a/chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h +++ b/chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h
@@ -71,6 +71,7 @@ SendMessage, (const std::string& self_id, const std::string& peer_id, + sharing::mojom::LocationHintPtr location_hint, const std::string& message, SendMessageCallback callback), (override)); @@ -78,6 +79,7 @@ MOCK_METHOD(void, StartReceivingMessages, (const std::string& self_id, + sharing::mojom::LocationHintPtr location_hint, mojo::PendingRemote<sharing::mojom::IncomingMessagesListener> incoming_messages_listener, StartReceivingMessagesCallback callback),
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 94497cea..0fcadb8 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2853,7 +2853,7 @@ } deps += [ "//printing:test_support" ] } - if (enable_cros_libassistant) { + if (enable_assistant_integration_tests) { sources += [ "../browser/ui/ash/assistant/assistant_browsertest.cc", "../browser/ui/ash/assistant/assistant_test_mixin.cc", @@ -4355,6 +4355,7 @@ "//chrome:chrome_android_core", "//chrome/android:app_hooks_java", "//chrome/android:chrome_java", + "//chrome/browser/continuous_search/internal:unit_tests", "//chrome/browser/long_screenshots:services", "//chrome/browser/optimization_guide/android:native_j_unittests_jni_headers", "//chrome/browser/optimization_guide/android:native_java_unittests",
diff --git a/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java b/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java index 3919619f..a19168a 100644 --- a/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java +++ b/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java
@@ -14,6 +14,7 @@ import org.chromium.chrome.browser.payments.ChromePaymentRequestFactory; import org.chromium.chrome.browser.payments.ChromePaymentRequestService; import org.chromium.components.autofill.EditableOption; +import org.chromium.components.payments.PaymentApp; import org.chromium.components.payments.PaymentRequestService; import org.chromium.components.payments.PaymentRequestService.NativeObserverForTest; import org.chromium.components.payments.PaymentUiServiceTestInterface; @@ -159,7 +160,7 @@ } @Override - public void onAppListReady(List<EditableOption> apps, PaymentItem total) { + public void onAppListReady(List<PaymentApp> apps, PaymentItem total) { String[] appLabels = new String[apps.size()]; String[] appSublabels = new String[apps.size()]; String[] appTotals = new String[apps.size()];
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h index 376c2e7..c8969b4 100644 --- a/chrome/test/base/test_browser_window.h +++ b/chrome/test/base/test_browser_window.h
@@ -164,7 +164,7 @@ void ConfirmBrowserCloseWithPendingDownloads( int download_count, Browser::DownloadCloseType dialog_type, - const base::Callback<void(bool)>& callback) override {} + base::OnceCallback<void(bool)> callback) override {} void UserChangedTheme(BrowserThemeChangeType theme_change_type) override {} void CutCopyPaste(int command_id) override {} std::unique_ptr<FindBar> CreateFindBar() override;
diff --git a/chrome/test/data/android/manage_render_test_goldens.py b/chrome/test/data/android/manage_render_test_goldens.py deleted file mode 100755 index 52c888f8..0000000 --- a/chrome/test/data/android/manage_render_test_goldens.py +++ /dev/null
@@ -1,76 +0,0 @@ -#!/usr/bin/env python -# -# 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. - -# Simple script to automatically download all current golden images for Android -# render tests or upload any newly generated ones. - -import argparse -import os -from upload_download_utils import download -from upload_download_utils import upload - -STORAGE_BUCKET = 'chromium-android-render-test-goldens' -THIS_DIR = os.path.abspath(os.path.dirname(__file__)) -CHROMIUM_SRC = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..', '..')) -GOLDEN_DIRECTORIES = [ - os.path.join(THIS_DIR, 'render_tests'), - os.path.join( - CHROMIUM_SRC, 'components', 'test', 'data', 'js_dialogs', 'render_tests'), - os.path.join( - CHROMIUM_SRC, 'components', 'test', 'data', 'payments', 'render_tests'), - os.path.join( - CHROMIUM_SRC, 'components', 'test', 'data', 'permission_dialogs', - 'render_tests'), - os.path.join( - CHROMIUM_SRC, 'components', 'test', 'data', 'vr_browser_ui', - 'render_tests'), - os.path.join( - CHROMIUM_SRC, 'components', 'test', 'data', 'vr_browser_video', - 'render_tests'), -] - -# This is to prevent accidentally uploading random, non-golden images that -# might be in the directory. -ALLOWED_DEVICE_SDK_COMBINATIONS = [ - # From RenderTestRule.java - 'Nexus_5-19', - 'Nexus_5X-23', - # For VR tests. - 'Pixel_XL-25', - 'Pixel_XL-26', -] - - -def _is_file_of_interest(f): - """Filter through png files with right device sdk combo in the names.""" - if not f.endswith('.png'): - return False - for combo in ALLOWED_DEVICE_SDK_COMBINATIONS: - if combo in f: - return True - return False - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('action', choices=['download', 'upload'], - help='Which action to perform') - parser.add_argument('--dry_run', action='store_true', - default=False, help='Dry run for uploading') - args = parser.parse_args() - - if args.action == 'download': - for d in GOLDEN_DIRECTORIES: - download(d, _is_file_of_interest, - 'RenderTest Goldens', STORAGE_BUCKET) - else: - for d in GOLDEN_DIRECTORIES: - upload(d, _is_file_of_interest, - 'RenderTest Goldens', STORAGE_BUCKET, args.dry_run) - - -if __name__ == '__main__': - main()
diff --git a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5-19.png.sha1 deleted file mode 100644 index 6b962c9..0000000 --- a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -60048324997000d9d85b813b67bb6df2a33f5d65 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6bc0b71..0000000 --- a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -48e3386cb791857a2d9cd6b2e121142f870c44a8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5-19.png.sha1 deleted file mode 100644 index e446e70..0000000 --- a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -37978d1f06ac88c25de5fb9898217679f48f9036 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5X-23.png.sha1 deleted file mode 100644 index 9ef9c66..0000000 --- a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_legacy.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cb605756f17e02c7f6da73af44536e176d5b19fd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_update_selected_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_update_selected_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index 794807c..0000000 --- a/chrome/test/data/android/render_tests/AccountPickerDialogFragmentTest.account_picker_dialog_update_selected_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -001ef6d0007c82d6a6a3522ac3a24135398a398a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AllDismissedItemTest.afternoon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AllDismissedItemTest.afternoon.Nexus_5-19.png.sha1 deleted file mode 100644 index 0f7438d..0000000 --- a/chrome/test/data/android/render_tests/AllDismissedItemTest.afternoon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -da7fdd9893c177a733fd777588914e642ddfb44b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AllDismissedItemTest.evening.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AllDismissedItemTest.evening.Nexus_5-19.png.sha1 deleted file mode 100644 index a9b1383..0000000 --- a/chrome/test/data/android/render_tests/AllDismissedItemTest.evening.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c504fe81da81120595df7ddaf390def62b106e47 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AllDismissedItemTest.modern.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AllDismissedItemTest.modern.Nexus_5-19.png.sha1 deleted file mode 100644 index 72856ac..0000000 --- a/chrome/test/data/android/render_tests/AllDismissedItemTest.modern.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -942eaaa077c03c228285a620553323f13094a6b8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AllDismissedItemTest.morning.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AllDismissedItemTest.morning.Nexus_5-19.png.sha1 deleted file mode 100644 index 38a26f0..0000000 --- a/chrome/test/data/android/render_tests/AllDismissedItemTest.morning.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -eea2fa8d6f8761ba918d9539932a35247d60ee66 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5-19.png.sha1 deleted file mode 100644 index 680787b..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3d24f985df143ce89ea302499e04c4fcfc1c5009 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5X-23.png.sha1 deleted file mode 100644 index fed4861..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-iconrow_three_icons.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9a313a69e15c705d44c5c946d591630ab3fa568c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5-19.png.sha1 deleted file mode 100644 index 52b5ca3..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a4201a720f7bd86bd2d2ee430c5d474a46045c49 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5X-23.png.sha1 deleted file mode 100644 index b006564..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -34fea7e9326406eb5cfe01a5634bd06d0190dd94 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index 21ab5b0f..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -44984e4a09254091ca2ac3952771ad23fd16d649 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index c5528332..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-standard_with_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -279e458afcd8a7fd8d05b9bef55df24d29cbc912 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 deleted file mode 100644 index 6b26c6f..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4ff7987d03f4de39eb9d2a6061a4a4a6248880b5 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 deleted file mode 100644 index 9b5bdea..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -299d8121310a83dc8318e3320caaae494ef8ae06 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 deleted file mode 100644 index 5fbfc8f..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5c2314ad7f5c94b41e68643918d6964922868281 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 deleted file mode 100644 index 67831da..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c97051f7de10714df300ac06ce7b515568cf53f0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index d2634e10..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b3af4981e29bd780534a3b878ed573e962775197 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index 861b1692..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Disabled-title_button_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2a559382000b7ee740bd65fed62eacf369119ec4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5-19.png.sha1 deleted file mode 100644 index a0b854f5..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -67229cbe52704eb08a204ca4dabfc10f755f00ab \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5X-23.png.sha1 deleted file mode 100644 index bc0dec2..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_five_icons.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0bbaae448ecf5ee7ad7d25aa9be6ec31497fb9b5 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5-19.png.sha1 deleted file mode 100644 index b2b00f5..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fd8c57b066236bfae0828a0817e10f24b1c7daa4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5X-23.png.sha1 deleted file mode 100644 index c5c9a49..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_four_icons.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -eae6a0f06769851d9ce7686844a05a01437ed53f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5-19.png.sha1 deleted file mode 100644 index 8c6da34..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -79ebf03db99fec18e683c1c2ce89574f0bd26dbd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5X-23.png.sha1 deleted file mode 100644 index 26ca8a6..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-iconrow_three_icons.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cb427383a6e354dfb6fb87e6410fbb034fb1c909 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5-19.png.sha1 deleted file mode 100644 index 49e5de1..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -aee3b1f0f4ebedc3f638a67a1ac10e8a1f3ad26f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3b06d5da..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5da2d109a052745c399180848e5cd66be85e9d57 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index 566be68..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0e97b9dadad0f6eea64a632a6d68fea31f4a210a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index 069f4bd..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-standard_with_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -18ac175cea84cad12b81e31c61cbcf8bfd4c0b82 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 deleted file mode 100644 index c26c987..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -549f55ccbd398fa52b9d189fd3d8fd02f7f5ef47 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3528654c..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_checked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bc2620499b4aea6fe7f7dfa654cef0b1f8314cca \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 deleted file mode 100644 index 8c92610..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2dcf682967bd4c02f2907d4e2802ec68f6b0c078 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 deleted file mode 100644 index 295861b..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_checkbox_unchecked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a49c490303a8fa14615628ea5e3e806dae31142d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index b3b4d5c7..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cdd099bbe651bac77d857e67ba1a9ac5c011b2af \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6741338..0000000 --- a/chrome/test/data/android/render_tests/AppMenuAdapterRenderTest.Enabled-title_button_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d78622089a3027e6bcb2a081d53d59d1d47f5eb6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 deleted file mode 100644 index d2167e2..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7450976a04ef614fac574216433939d6b3208122 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 deleted file mode 100644 index 7441da8..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -aa8946db796ddca10b1a9e7e7b000480507fbdf6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 deleted file mode 100644 index f742ea9..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c37f218483916934aa2b427d90d44767fd7e93fd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 deleted file mode 100644 index d882c08..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b9b99cdb2eb25dbd09b4be62d34859c1e5959895 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index f1d8f04..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7066f7088f9ac993ecce95eca8f6f242ab53c6c4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index 44d0652..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -88ae504cc4ee3dbb21605f30c6f49c04b2d1a159 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index fd5ff1a..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fedf1b5e79b847fa3343bf87fc86ee86fb854735 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index b39c340..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -aad58c8a86c22835ee7d228286a8a18b6b4b7075 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index e485c30..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8240f0ec2b804fc98fc50bb653a652365a7c560a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index a906902..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-long_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -626077e6f0cea16e79aca85643beb4297e72324b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index 9f56637b..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dee8fdfbf94330e026770dd354428bbac6e51a30 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index f06742e..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-minimal_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b1f12eaa6f3cffebd819c9807a8cf09852baadb9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index 179668f..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7ff73eb5311c830d103bfcf43d4235a8f002b298 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index aa8c474d..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9efc532499c44f217febfc61085456d781d64ae4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index 9724a2b6..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f0db2dc8feb066e3ece5c5c566f1cdac25867e59 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index b405938d..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -43a82499a1cac0eb430fdfa80d89b2a4d3cf5738 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index 400c9a1..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -755d3e95c0ab71adcef1404d56f6735b3040aa11 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index 1f51475..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-short_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -27f8edfdb86102e7f46df4b470fda110e36144b3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 deleted file mode 100644 index a9c4347..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ef73f11637ec5cd03f8b6635397c917f0cd78adc \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 deleted file mode 100644 index 483049b9..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -203691e16a5ccefba15681eac236fe053edd9a20 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 deleted file mode 100644 index f5edb20..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4d62c938b7ecd9250f30a2ee1854812d9dff9c4e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 deleted file mode 100644 index 0a420a7..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7136a0319e26f20389cc1b8b6afaa0de051f50ad \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 deleted file mode 100644 index bc1cc40..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d199e4f28aa526a334400e3326f09464f5e92bd3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 deleted file mode 100644 index cbbb409..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -43c1df185f3050c48f2c924244b0d34b95affc43 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 deleted file mode 100644 index 4eeff12..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -24cdf45e4687fc2d8a642f512dfde554661b7899 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 deleted file mode 100644 index 32292d8..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeDisabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -433df23a275d15bdf09aa3b2db789403badb9ed4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 deleted file mode 100644 index 6f64ed4..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -eeed6de2f4d9d44df5d60646c2c2242370bb3488 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4c07b35..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-cold_state_personalized_signin_promo.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a56d6613d9b4e5b9fd366b296a47e4609e1221b1 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 deleted file mode 100644 index ce1f5a6b..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ffb3888992096cfebcce0d33528a20297b185f21 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 deleted file mode 100644 index d991f70c..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-hot_state_personalized_signin_promo.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fb15b9ab1b443f600667629c4f250c56ed688d1d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index b5ca567..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9ad13b9229cc2927a950d478fcbdd06c5eec585d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5933ae1..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_minimal_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d1c5d618a0962e280bc9da0cf6ce990f4739e59a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index 21a427d..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -77101db367db460486d2c35adb7bb603f8b88fe9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index 61886e4..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e52fedde4ea8394ff5fed867d3a16b5b3a1e7eac \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index a56d21b4..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0fb6e763ef6cf9c6a93fca1caa644e8489b59deb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index b874ac06..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-long_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -898ffbe14d1b87b0a6578277657a7788b504c2c8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index b56938e..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d0724cfdcfabe1f502f879a219da8d6cfc2ddfed \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index 9c69e69..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-minimal_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a43d7760cb0321c0137cce9cd8a11c4792fc653b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index 487f732..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -75e3192c8029c1481dafa54a5dd31f2e46618284 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index a8189a8..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_minimal_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1f51cd1f5931f19334a156d690bd229228aa87bf \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5-19.png.sha1 deleted file mode 100644 index 993cc95..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4f683b8ebe53cf1dc9233d6481e0417de9cda780 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5X-23.png.sha1 deleted file mode 100644 index 2d499cd..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6b2e7e9e504c2765cde05db1ff0577723f20972f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5-19.png.sha1 deleted file mode 100644 index 107dbae..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0eea85fd2d51efbfb6942006ef863bd8abc96beb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5X-23.png.sha1 deleted file mode 100644 index dda4d1f..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-short_snippet_narrow.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2f60f1e7207eed1caa517fb9836d129d3a2d4498 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 deleted file mode 100644 index 8a3127ee..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -95b1f25236225a4865abd94d1724bad724d7c3ef \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 deleted file mode 100644 index a3f5e96e..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_dominant_color.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -94eed5466230fbb6b0d0f46b5406f625e19606bb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 deleted file mode 100644 index 61f80700..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -317dc3bff0867710f7bbe01e7875bee73bef2599 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 deleted file mode 100644 index 30c7049..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_dark_thumbnail.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fc9187f8ae856e379861ec8a32c95871b9d0086d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 deleted file mode 100644 index 996efde..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -14ac5323250ad7dd55f3e84bd4e852aa5a0544c3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 deleted file mode 100644 index 1f921b4..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_dominant_color.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5dbc844d778eff9929747c9aa96e7330d4a283d2 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 deleted file mode 100644 index 9ecac9ba..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -028a4f7a66d38531661aaa613ba43807508dd16f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 deleted file mode 100644 index 921d6c0..0000000 --- a/chrome/test/data/android/render_tests/ArticleSnippetsTest.NightModeEnabled-video_suggestion_with_light_thumbnail.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -51e6ab8914af6584244f4575211430fa93d91957 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 deleted file mode 100644 index 978791a..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a7b6d7735bc4e0e2646f098433cdb2083e85ffc6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 deleted file mode 100644 index ae844087..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d42cc98534f9333f5b5c62a159980cfdc67d4caa \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 deleted file mode 100644 index d35f3d8..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -498c2ad61394be8b7bdf4e003e7dc995cf789a7c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 deleted file mode 100644 index 7ca50b34..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeDisabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -37e56a940b34cd5c0f96df2ed506cf3ad31b81a9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 deleted file mode 100644 index 671919b..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b520fc4f59f7e59621bc3c533175c8bdff45337e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4621d34..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_folder_selected.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ca5e1d1ff616d2c80d96056f97517966b2002dae \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 deleted file mode 100644 index 65c78ad..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -593fad9011ec836fd30bb0ba12b7a25c64b658d7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 deleted file mode 100644 index 242ee8a..0000000 --- a/chrome/test/data/android/render_tests/BookmarkTest.NightModeEnabled-bookmark_manager_one_folder.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e55d821d8711d556c24070b0abcaa21ad4781aad \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeDisabled-color_picker_dialog.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeDisabled-color_picker_dialog.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5a4f9fc..0000000 --- a/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeDisabled-color_picker_dialog.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9dd61cf83e86f243291f884a7257cbc3f9a7cd2c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeEnabled-color_picker_dialog.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeEnabled-color_picker_dialog.Nexus_5X-23.png.sha1 deleted file mode 100644 index 36c059f..0000000 --- a/chrome/test/data/android/render_tests/ColorPickerDialogRenderTest.NightModeEnabled-color_picker_dialog.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -191c5c1ffd1c98a2a89af85ce44d0d4665617ec6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_all.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_all.Nexus_5X-23.png.sha1 deleted file mode 100644 index 1d90dcb..0000000 --- a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_all.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -163d9ba4eb2cd861b3e50cce8462357fa8cb5669 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_none.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_none.Nexus_5X-23.png.sha1 deleted file mode 100644 index 58abc12..0000000 --- a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_none.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -89ca67644ead85e147fd61942d10e2bfb1ff34f6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_some.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_some.Nexus_5X-23.png.sha1 deleted file mode 100644 index c969400..0000000 --- a/chrome/test/data/android/render_tests/ContactsPickerDialogTest.selection_some.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -74553f4a666233d702df38c3a9aaccd0aabb3211 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout.Nexus_5X-23.png.sha1 deleted file mode 100644 index 49d71ed..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2770e1f17c608fecc3658e8e179da37718581796 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 deleted file mode 100644 index e670d362..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5f8b24bf7551e52a3d01321bdd4653864209092a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8dc1e751..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -09258a839a020b9939793afd1910b473babb5d19 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3402e82..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeDisabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a11cdba2ff4f4665cf5f344d01385990bb2bb4ef \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout.Nexus_5X-23.png.sha1 deleted file mode 100644 index 45b901a..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -06a77948428c974cf5652626453229833721b1ed \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 deleted file mode 100644 index e58df44..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_bottom.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -db01f8f38bdf79b6ab0a9710ab51c173aae046be \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 deleted file mode 100644 index ce8f87e..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-initial_layout_dense_title_right.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7c5bb9ba6437e4a43d69c8adc0b0e34e88925926 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index 41aac3b..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.NightModeEnabled-scrolled_to_category_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -480f273f41b109eb077ae37bf10cdae32f962736 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout.Nexus_5-19.png.sha1 deleted file mode 100644 index 44d81ba..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d60de483ccbe01a433798e31df3f9f08dc387480 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout_back.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout_back.Nexus_5-19.png.sha1 deleted file mode 100644 index d6523ec..0000000 --- a/chrome/test/data/android/render_tests/ExploreSitesPageTest.recycler_layout_back.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -33ecdb2b25aac53cc826f38e281a11cf6eefdb8e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5-19.png.sha1 deleted file mode 100644 index 6cdb3ae..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -30772aa78d2f06117ecbee8252a0562c8a61b093 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5X-23.png.sha1 deleted file mode 100644 index bc78ca2d..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_bottom_world.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3e1e6c549cf4519e2a17778b741d194e35d6061a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5-19.png.sha1 deleted file mode 100644 index 359b8d41..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b9995434a6c30a2a23aedc84d61a881b6e02b483 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5X-23.png.sha1 deleted file mode 100644 index d14254e2..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_again_world.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ca7192407d01e46a7c3dbe545b7f57407b6f8e63 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5-19.png.sha1 deleted file mode 100644 index 651e6d4..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -03ff57d50e9e4fdfbf4300819e52d0ee54ea2680 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5X-23.png.sha1 deleted file mode 100644 index c8781a1..0000000 --- a/chrome/test/data/android/render_tests/FeedNewTabPageCardRenderTest.render_feed_cards_top_world.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -61dbfc645c260bd4cbc4c2216f51666c1abbac50 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5d20bed..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5346bf283d40e694c30767d73b4d1ae64b1c2257 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Pixel_2-28.png.sha1 deleted file mode 100644 index ecf551b..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.singlePane_singleTab_noMV.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -37f6f12ab234c2796bfb3c82702e052637e5be10 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs.Nexus_5X-23.png.sha1 deleted file mode 100644 index 84edb39..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -447470455aa2afcb3c2f0abe8a86a69c4840b84d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs_postNative.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs_postNative.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3aeb75cf..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_3tabs_postNative.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -684f77e63aef056e0d5568ab8ff78f9b17f6c5e9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_empty.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_empty.Nexus_5X-23.png.sha1 deleted file mode 100644 index 2c6646e..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_empty.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6b84e01daf77a9204a8225528f9eead72c2d6b84 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_tabGroups.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_tabGroups.Nexus_5X-23.png.sha1 deleted file mode 100644 index ebe8fa7d..0000000 --- a/chrome/test/data/android/render_tests/InstantStartTest.tabSwitcher_tabGroups.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -54a386119693dbee82caed78871a661927b535a5 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4bf9694f..0000000 --- a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -674dad2a4bbc57e179add7769e21c63b241754d4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1 deleted file mode 100644 index 2841ed5..0000000 --- a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -05ec9348dca4c304762ae06e3fb5390d5d4e3ed7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_bottom_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_bottom_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index 887d8b22..0000000 --- a/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_bottom_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d7d4886e77c6dd5cda37d353c47ae06d6a7c2d45 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_top_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_top_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index ebec11d1..0000000 --- a/chrome/test/data/android/render_tests/ManageSyncSettingsTest.advanced_sync_flow_top_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6828aad74f2e361af550cbe12771fe048a43cb4e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5-19.png.sha1 deleted file mode 100644 index 17256198..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -690a2a9f8b3310321902345d3a9c284b0f9f67ec \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index fc8a6f8..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-custom_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -05b3e32dae4a04290ecc46ac823964aba6cceafa \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5-19.png.sha1 deleted file mode 100644 index 309522a..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -19ff77253841df5014547a85a17bf7c1b291c242 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5X-23.png.sha1 deleted file mode 100644 index ccb727f..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-filled_primary_button.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e181abfa36fb03f22e36889dc543248d67594b47 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5-19.png.sha1 deleted file mode 100644 index 1ce8e1e..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a8422dc187be8777e2badb744fc8598b853eab0c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5X-23.png.sha1 deleted file mode 100644 index fff741d1..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-scrollable_title.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8fd262d31231ee1410810b0df39868f7aa4a69d2 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5-19.png.sha1 deleted file mode 100644 index 2f6ae9e0..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -75c54a6b4e93a8b33e8e8c1618617074ebc6a745 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5X-23.png.sha1 deleted file mode 100644 index cdaef8f..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_message.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8babd7b44fbf340f63416da10c5c1f09f8844bdc \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index bd2a90ca..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a4b753a76a447edff278445a997f989f5e4f07ab \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index d67b5da9..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeDisabled-title_and_title_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e22e7dde68b2fe990894262f30d36c58c59c9758 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5-19.png.sha1 deleted file mode 100644 index 1413de4..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -42d498a023a8570c6949ce5e5b0222573c543e73 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index e92216e..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-custom_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b9c5a3d666ef47d70f4dcc725ed7038bc3eca3b7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-filled_primary_button.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-filled_primary_button.Nexus_5X-23.png.sha1 deleted file mode 100644 index d69d8dc..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-filled_primary_button.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -14e90ed2bc6e85b59898587c7b9ce3824def7557 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5-19.png.sha1 deleted file mode 100644 index 09a9379..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a73a4e719a401fa977d1415732992fc8eb904028 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5X-23.png.sha1 deleted file mode 100644 index dc16ca8..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-scrollable_title.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b0b18c28a426f5204ce44dbbab7d9d20236e8ee7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5-19.png.sha1 deleted file mode 100644 index 96753cd1..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4c9142b323f65afdf4b2f1b1fb235cb5e434e5c2 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5X-23.png.sha1 deleted file mode 100644 index 903e3ed..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_message.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -098f280b66a2ee491530149df17fe853cbb0e925 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index b9e28da6..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b4a5f0c38b145a9a598aad6a7fcc263075e0d7a3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5375aac..0000000 --- a/chrome/test/data/android/render_tests/ModalDialogViewRenderTest.NightModeEnabled-title_and_title_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ab9b7cc343922f223821c1c98a48ebf7254352f8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5-19.png.sha1 deleted file mode 100644 index adce74b5..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4edaa7fc2eca1b5baf8aa1e0a8c85817433a30af \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8b5de9b..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_collapsed.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e56d2a4dbd8a8a78c5c6cb8ea5428588cffe1332 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5-19.png.sha1 deleted file mode 100644 index 1f171f6..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -720a1939ebcd1953cc5318eec2ba8a4521fe0739 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6575975..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.expandable_header_expanded.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8ef5fc962c9a6447b5fe004c299e5c2b3e4d6112 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.fakebox.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.fakebox.Nexus_5-19.png.sha1 deleted file mode 100644 index 2ae3417..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.fakebox.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -20ebe570ae4b102fc529331d946513545b4d714e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.focus_fake_box.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.focus_fake_box.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8a40b66..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.focus_fake_box.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -140f051117bed24841ed77d43b1197d1aea028bf \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.most_visited.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.most_visited.Nexus_5-19.png.sha1 deleted file mode 100644 index 309add6..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.most_visited.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f5de972f218b1a379684ec6f50230c26cde7dbbf \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page.Nexus_5-19.png.sha1 deleted file mode 100644 index 74f987c3..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e5a2775b7427d6de4b4614f50d84bfa15118ec39 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page_scrolled.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page_scrolled.Nexus_5-19.png.sha1 deleted file mode 100644 index 1cf99a2e..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.new_tab_page_scrolled.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e7028dad49dac106656da264904d64905824a5e4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/NewTabPageTest.sign_in_promo.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/NewTabPageTest.sign_in_promo.Nexus_5-19.png.sha1 deleted file mode 100644 index 824bd28..0000000 --- a/chrome/test/data/android/render_tests/NewTabPageTest.sign_in_promo.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -102426687018862c89fa03d485acfe10437a612f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PhotoPickerDialogTest.first_view_clicked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PhotoPickerDialogTest.first_view_clicked.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3e2a432..0000000 --- a/chrome/test/data/android/render_tests/PhotoPickerDialogTest.first_view_clicked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -712be6658684375f38d598a119343b391acdffde \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PhotoPickerDialogTest.initial_load.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PhotoPickerDialogTest.initial_load.Nexus_5X-23.png.sha1 deleted file mode 100644 index d7bb7c3..0000000 --- a/chrome/test/data/android/render_tests/PhotoPickerDialogTest.initial_load.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -45dd2fd26f943d60d1b4bb4f113fbe7c2c69bd00 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5-19.png.sha1 deleted file mode 100644 index 26b042c..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3cf76bf7cb229c327498c29a0bd9267b4408ca6c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6697b86..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar128.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bc5eded0129e9cc9d64ca23a4cc705bba9d99a25 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5-19.png.sha1 deleted file mode 100644 index 186cf68..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e11505d1a1e829824079e949294488297ff78d3a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5X-23.png.sha1 deleted file mode 100644 index 38897c6..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_avatar64.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e81d4696a828b231cc893f0736a6d24b460fb5e0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5-19.png.sha1 deleted file mode 100644 index 8c8530c9..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2e062f07f87adf32dc4c8849904d345fc2c0dacb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8a3e265..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder128.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c37a79b36aa21023e5e85b29a658c235d9e50b9d \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5-19.png.sha1 deleted file mode 100644 index 05def136..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -90bb3abd6d872495e6a61ef02e7d21b3bdaa53bd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5X-23.png.sha1 deleted file mode 100644 index 9881482..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheRenderTest.profile_data_cache_placeholder64.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b020698d2e3e67696cf953e2cb528a5224003017 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_with_child_badge.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_with_child_badge.Nexus_5X-23.png.sha1 deleted file mode 100644 index c075922..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_with_child_badge.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -847af162240fa3742b8484c5fca7621f8666daa7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_without_badge.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_without_badge.Nexus_5X-23.png.sha1 deleted file mode 100644 index 352e534..0000000 --- a/chrome/test/data/android/render_tests/ProfileDataCacheWithBadgeRenderTest.profile_data_cache_without_badge.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -32f14a9facf4f7781a44164c5d09d453f5bf58ff \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact.Nexus_5X-23.png.sha1 deleted file mode 100644 index dc50f87..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f6e9a9e90f8b977ac1ab12a510652033e673f8f3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5cdbea2..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1d9263a4eec2f1753cccaa06cdb3efa469ddecc8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_default.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_default.Nexus_5X-23.png.sha1 deleted file mode 100644 index 32c99ac2..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_default.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -81b1ac98f141b5a7c07b03c466b60ce06f84d299 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 deleted file mode 100644 index ee55a38..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -924aebba853a13a719f0ec4082f48a839d8601c8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_slim.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_slim.Nexus_5X-23.png.sha1 deleted file mode 100644 index 11110ea..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeDisabled-promo_card_slim.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8665b2e46dd1218708720c5761ce75f424f58af9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact.Nexus_5X-23.png.sha1 deleted file mode 100644 index 35648b1b..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6506ab28e428fc3dda12c35d3fbaf28b150ae2d9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4c13377..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_compact_stack.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -12ed6d10ddbda41842cf8ec2ec20506799d702e0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_default.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_default.Nexus_5X-23.png.sha1 deleted file mode 100644 index c72e4ba..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_default.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -90f145e66f786473cf0e97857a281a27008fd79c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 deleted file mode 100644 index ec552b66..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_secondary_hidden.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f08ce76ecdd54952ce5a1656313c054bc0d1f114 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_slim.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_slim.Nexus_5X-23.png.sha1 deleted file mode 100644 index 93a838f..0000000 --- a/chrome/test/data/android/render_tests/PromoCardViewRenderTest.NightModeEnabled-promo_card_slim.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bbc47fc021fe00f58573098f6b88bebb70345e46 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5-19.png.sha1 deleted file mode 100644 index 871748ba..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2b018a650926d65d2fb58e66e90b026ba9fab1e1 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5X-23.png.sha1 deleted file mode 100644 index 723c86f..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_1.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c6f1e7ab1027bfa1686ceb5eb776be8646d94ff9 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5-19.png.sha1 deleted file mode 100644 index 61d394ca9..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b31c2976535edd9eb2b31d21926e04f2c3ca52ef \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index 9d6d1a3..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9b01b20b67256fcad8b57961c5a99d6770bbe2c3 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5-19.png.sha1 deleted file mode 100644 index e2d488d..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0f35fa3236e2f0a97bb20e0ec44316f4defb1650 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5X-23.png.sha1 deleted file mode 100644 index 559a963..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_description_3.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cf4824710099cfd170481b87d7ba6b6ba6421a77 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 deleted file mode 100644 index e0186ca..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -82f3134485cc8a48c70761b3809872b9504ba2d1 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4615717..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b6d85910a1f0335f0e8af003b4c4f28a436ef350 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 deleted file mode 100644 index dd3228f..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e5d824c177f4eff64d55aefcd04377458027f3ed \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6918c71..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7b918d5848ed88e457e402cdcc602f24fc74ffcb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 deleted file mode 100644 index be48832..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3f2db50e0c2d55df499ac6a41eb5bd69c309685b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 deleted file mode 100644 index a4930ee..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -63336b71ffdcdf47b2a2e0e12c2b88105d54edbf \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 deleted file mode 100644 index 182cbd2..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d4a33d89133e26f7b8df5c559c97672d564a2aa4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 deleted file mode 100644 index d82f3b0..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeDisabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0a4c74b83c767570539530891fd9b404686d5293 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5-19.png.sha1 deleted file mode 100644 index c922dea..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -542a3d4b731907be83f2215f5cd89ac626967fee \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5X-23.png.sha1 deleted file mode 100644 index 88f0bbb..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_1.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -43dc990dbc28afb48077220e42300da4b7e57021 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5-19.png.sha1 deleted file mode 100644 index 8e9647b3..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bb7ac8ada8d39d2846b300bb936f5a557879cdda \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index e0e8620..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b69dcd2af2c79f6a206d1e3fa624871ec5f352b2 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5-19.png.sha1 deleted file mode 100644 index ecd991a..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -80c46b8ed5b5dc2d56d8f6f8bc8f3b395744ab5a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5X-23.png.sha1 deleted file mode 100644 index 18e3e1f7..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_description_3.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f119191f7a806fbd27fbf6bb16e59df7a6425bc0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 deleted file mode 100644 index 84d3a0ce..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -90f8b68dac348a2ca4cce6706b11acecd075c0eb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 deleted file mode 100644 index 670d9058..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_1.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c35e2896b1be7979365e588bfce39047ec72db67 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 deleted file mode 100644 index b987dda0..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8a0fb530f9dbc8eb2a571048050945e86a9133b0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 deleted file mode 100644 index 42a8117..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_2.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fb79f426d29b1c5e65d6314cf381445bf8625a74 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 deleted file mode 100644 index 1248bec20..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7d29286bca9da206ee24f565233699733e069204 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 deleted file mode 100644 index 0358dcb..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_3.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c26c89e5d2c401b226bf7d68d3df998bd3c19233 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 deleted file mode 100644 index 8fb581e..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9f6ba65430430cbfc3d59ffda0cf619b4e0e882c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8d106efe..0000000 --- a/chrome/test/data/android/render_tests/RadioButtonRenderTest.NightModeEnabled-test_radio_edit_text_4.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -adfb1f2b93518e72fe031d7c72551450641b9b55 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5-19.png.sha1 deleted file mode 100644 index 6f86ebc2..0000000 --- a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -93a32a7c0dd79074f2d1d40038f0e46b122de0ba \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 deleted file mode 100644 index 686ad19..0000000 --- a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -22635e645468d82ffeaf0297a4d132b37821b4cc \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 deleted file mode 100644 index b02e2a8..0000000 --- a/chrome/test/data/android/render_tests/ReturnToChromeTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dab25947a177f0e9de3dac2b12fdc2c6638d6422 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 deleted file mode 100644 index f56d05ab..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cf768a5b0d584220aa0562d269413709c2023c09 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3bfd79c..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -964088d28d774b541bf732877165dfa3e8832d09 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 deleted file mode 100644 index 66ca7246..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9cf8759a34e1637f52b02b243d0817d95638f9f1 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 deleted file mode 100644 index a00c221..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeDisabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -afb5d1dd2ff5bf749eb952c91920f7069ba2f8eb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 deleted file mode 100644 index 7c0dbf8..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -be64f9a19ab9f75dd013570fc553fa0dec7c2bb1 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 deleted file mode 100644 index b5b6b6e..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_image_link.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7d036a8252193ba814ecc877e8eebd7172e20682 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 deleted file mode 100644 index 23cad0f..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2200572811e25ed46858bce6496c7c3195306c5a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 deleted file mode 100644 index 7069c0c..0000000 --- a/chrome/test/data/android/render_tests/RevampedContextMenuRenderTest.NightModeEnabled-revamped_context_menu_with_link.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3541c95bbe0b94b95b24ea0509fac291a090e8aa \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5-19.png.sha1 deleted file mode 100644 index 261cffb7..0000000 --- a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -90c64ece8c2e1b8941e7cf9e380dceefe47be95b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index b05d515..0000000 --- a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_managed_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b2fc2ca505e6bbbc1b6a27d313311f13f0deafba \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5-19.png.sha1 deleted file mode 100644 index 6d969b3..0000000 --- a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -66045ee91a31bbdee7d7e08c4a83bd22e76f7dfb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index 530373b..0000000 --- a/chrome/test/data/android/render_tests/SignOutDialogRenderTest.signout_dialog_for_non_managed_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -faea5d82d4a9dd8043e058bad2165c8010043b45 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5-19.png.sha1 deleted file mode 100644 index ef43934..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b8353c8df4086d03ef88a33d59e1b6f5236ef974 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index ab5b6287..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_primary_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e0d9af955d1148bb137bd4cd9b7f1f143e4a7bef \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5-19.png.sha1 deleted file mode 100644 index 0ebf7ca0..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ed69f9a278b62dcc9a8aa7247e840ef19cd48db4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index 0f855a98..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_choose_secondary_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ef9dd3bee2736200f73303bccd680c232f2c24e4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5-19.png.sha1 deleted file mode 100644 index ef43934..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b8353c8df4086d03ef88a33d59e1b6f5236ef974 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index ab5b6287..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_default_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e0d9af955d1148bb137bd4cd9b7f1f143e4a7bef \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5-19.png.sha1 deleted file mode 100644 index 42c39d2..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bc3c29db5ef3330f4b1143030267bfa0db56130c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5X-23.png.sha1 deleted file mode 100644 index 836a8be..0000000 --- a/chrome/test/data/android/render_tests/SigninFragmentTest.signin_fragment_new_account.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -09c0e504f66ae6cc15486bad90171e56bd63ffa7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 deleted file mode 100644 index e7e5de2..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b023ee8ba638975924a9dc5b2c2dae738859ffe5 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 deleted file mode 100644 index fd348b4..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa98aefcb8086f224786715eda9f13acd1340561 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5371224..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ffba0627d0598dfdfb09c9e5bc11f1df70ad6e27 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1 deleted file mode 100644 index ba9651a..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -57edc2c0238df085a1c07eeb3f777a3696d829ff \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3c7c2a1c..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -89e92b1dbefe9eeda6af75b6d1bbf7ce8b40008c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1 deleted file mode 100644 index 1a40339..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d0005b01db02cd457c8356c4204a3a51379ce62b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Nexus_5X-23.png.sha1 deleted file mode 100644 index 62a999e..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c01e49815559f454ef10bd000ff39bc0a7d6a9bf \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1 deleted file mode 100644 index dea470ae..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -35c87059bad2d390adf4f7978b8da96acc13a1ed \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Nexus_5X-23.png.sha1 deleted file mode 100644 index 39185d4..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -40c29ca171d2f5d3b07e570c1bc889bbb48060fe \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1 deleted file mode 100644 index ab4ae4dd..0000000 --- a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5737404db83a4a8c182f4219e78f6752220f7134 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5-19.png.sha1 deleted file mode 100644 index 9b0e0490..0000000 --- a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -68f0298d3543fb10343eefc1d68bc0cd819d32ee \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5X-23.png.sha1 deleted file mode 100644 index f51c78937..0000000 --- a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c1aac4edb3995a31df587e029e72e9dffc6b295c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5-19.png.sha1 deleted file mode 100644 index 2a21fc0..0000000 --- a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6b1298f352e2fd819cba056417008a8ecbffeec6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5X-23.png.sha1 deleted file mode 100644 index 4f8d0255..0000000 --- a/chrome/test/data/android/render_tests/StatusViewRenderTest.status_view_verbose_padding_with_dse_icon.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -88ded67364374371bad308486f1a37e9e1a31e88 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5-19.png.sha1 deleted file mode 100644 index 023e22bc..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -94ece76e55f5113bc51be7ae94916c17a6c17360 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5X-23.png.sha1 deleted file mode 100644 index eaeaa67..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_auth_error.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -15ccc402f0cc34c63f5b2dd840c5f47d5fa66b4a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5-19.png.sha1 deleted file mode 100644 index 8a44d5af..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d3a18d483d3f34dba557f1a79b102112fa08cfce \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5X-23.png.sha1 deleted file mode 100644 index 40b692e..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_passphrase_required.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -03ecb6ccb707d3652ba2cbda9ea410623c70f344 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5-19.png.sha1 deleted file mode 100644 index 60371f8e..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3b17651c85716e57a835cd3d87e50fefef997781 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5749e06f..0000000 --- a/chrome/test/data/android/render_tests/SyncErrorInfoBarTest.sync_error_infobar_sync_setup_incomplete.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -82985d6760779449f21a97eb76e496c780e9606e \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_landscape.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_landscape.Nexus_5X-23.png.sha1 deleted file mode 100644 index 6528d1f..0000000 --- a/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_landscape.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d76153dca1df2d860af22aa88cbf1cf6f5a3a3cd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_portrait.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_portrait.Nexus_5X-23.png.sha1 deleted file mode 100644 index 8e1e070..0000000 --- a/chrome/test/data/android/render_tests/TabGridIphTest.iph_dialog_portrait.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -701552f328c3fb19d2f5f9f39bf2ed3af075cc15 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_landscape.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_landscape.Nexus_5X-23.png.sha1 deleted file mode 100644 index 77190b0..0000000 --- a/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_landscape.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0a623106e18ee66d98b5ff303f323b76ff47c3fd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_portrait.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_portrait.Nexus_5X-23.png.sha1 deleted file mode 100644 index 494262a..0000000 --- a/chrome/test/data/android/render_tests/TabGridIphTest.iph_entrance_portrait.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7ab885e96dc61f343e0f6c5c6496bc6079ab7983 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5-19.png.sha1 deleted file mode 100644 index 056c61a..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -661913928237b92a6e9b775bc6b25e9a9bfd70d8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5X-23.png.sha1 deleted file mode 100644 index f8534645..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.10th_tab_selected.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5713f6c62cefc91492f211a5badb30ca86a455c7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5-19.png.sha1 deleted file mode 100644 index 056c61a..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -661913928237b92a6e9b775bc6b25e9a9bfd70d8 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5X-23.png.sha1 deleted file mode 100644 index f8534645..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.11th_tab_selected.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5713f6c62cefc91492f211a5badb30ca86a455c7 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5-19.png.sha1 deleted file mode 100644 index 0fa0e96..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -edb4497eafe8220b91051e45f71bc8710c0cadcb \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5X-23.png.sha1 deleted file mode 100644 index 89bdff8..0000000 --- a/chrome/test/data/android/render_tests/TabGroupUiTest.5th_tab_selected.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c449c79435992d4082fe2ece1bf5c1da933b7745 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index 7f23c62..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -33a38987a9d771506289dc0c7cb3998540946591 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_all_pre_selected_tab.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_all_pre_selected_tab.Nexus_5X-23.png.sha1 deleted file mode 100644 index 770d038..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_all_pre_selected_tab.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b1e7c8bae2c1ee95f66af5493f556648f0a120b4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_pre_selected_tab.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_pre_selected_tab.Nexus_5X-23.png.sha1 deleted file mode 100644 index ed698a2..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_pre_selected_tab.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6ddca914fbe99f57401d9279a2e090fcef235c0b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_selected_tab.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_selected_tab.Nexus_5X-23.png.sha1 deleted file mode 100644 index 87ea805..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_one_selected_tab.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ebefd89c951cdea452941f1e96dde5c0b744ef12 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_two_pre_selected_tab.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_two_pre_selected_tab.Nexus_5X-23.png.sha1 deleted file mode 100644 index a422cc1..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.grid_view_two_pre_selected_tab.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cd10094e3ce343e8253ab7d8509c06afc3a9cf00 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view.Nexus_5X-23.png.sha1 deleted file mode 100644 index b1f7872..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -38f569cf5796ddd4cbd4cb17920b05faaaeca4bd \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view_one_selected_tab.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view_one_selected_tab.Nexus_5X-23.png.sha1 deleted file mode 100644 index e3bf735..0000000 --- a/chrome/test/data/android/render_tests/TabSelectionEditorTest.list_view_one_selected_tab.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1806aba0441b7fdaba023f5a4855c5dc94a9d0f6 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 deleted file mode 100644 index 940925af..0000000 --- a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -36922243716a9a31e37e703c02b4a225d550bb01 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5cb50ad..0000000 --- a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeDisabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -82fb8cfeae1997262e4cc8a72ba2b1a31a4a8327 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 deleted file mode 100644 index 097aa490..0000000 --- a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -464c46ab165beca1b41c2ecbd49bf0243b0e6e4b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 deleted file mode 100644 index 0af79eb..0000000 --- a/chrome/test/data/android/render_tests/TabSwitcherActionMenuRenderTest.NightModeEnabled-tab_switcher_action_menu.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -334ef585d964a33bb482cd9ae2585f5478b572b5 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row.Nexus_5X-23.png.sha1 deleted file mode 100644 index 071e93d..0000000 --- a/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0b0fd89740557b45cef420c4a7eb38af723a925a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row_page_bookmarked.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row_page_bookmarked.Nexus_5X-23.png.sha1 deleted file mode 100644 index f0ca4a9..0000000 --- a/chrome/test/data/android/render_tests/TabbedAppMenuTest.icon_row_page_bookmarked.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -969ed1588982ce359e0a5962b7b5a9cf8de82cb0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 deleted file mode 100644 index 09f35d3..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bfb1122bde0df353b7a61ab8792bb6d4b1c199de \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 deleted file mode 100644 index 3bb7cf5..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -383c8d7a39dfdb0b510fd9da253324bc38eaf936 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5-19.png.sha1 deleted file mode 100644 index 8ddc4ad..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -babdabc285985dbfe78836c50356a5b1ee3a855a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5X-23.png.sha1 deleted file mode 100644 index 52b937ee..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8123c2ab97acf4e2046a74a5e48c29e77d449978 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5-19.png.sha1 deleted file mode 100644 index f4df585..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ff4afedf90fe2d8593c76e961575afdb1116f737 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5X-23.png.sha1 deleted file mode 100644 index ebfb9df..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeDisabled-tile_modern_offline.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -33d52a171095518e539769ffc4c657fb90ad8fa4 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 deleted file mode 100644 index a2e27d4..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -69cf590fc039410c9ac3435b2c147051071d095a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 deleted file mode 100644 index 61c3387b..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-ntp_tile_grid_layout.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dbfbb6662bbb38f6e4a6652f2fdde938d90c814b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5-19.png.sha1 deleted file mode 100644 index 86758a4..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -028dace8f780670c5ee2d3056fa26fa5bb6d479b \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5X-23.png.sha1 deleted file mode 100644 index 5f4e911b..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -abc136eb601ef329d9a8e808b4dd9599cfbe818a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5-19.png.sha1 deleted file mode 100644 index 2b08e3d..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1c5be21be3ab31491022d02295e45111abda7c6a \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5X-23.png.sha1 deleted file mode 100644 index 19e2ae5..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.NightModeEnabled-tile_modern_offline.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -29a190e64fdeba6c9d9a3c372558dec5a431350c \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_landscape.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_landscape.Nexus_5-19.png.sha1 deleted file mode 100644 index 8952d085..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_landscape.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c48830c9e56501ca6828d5c97e2967223e000196 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_portrait.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_portrait.Nexus_5-19.png.sha1 deleted file mode 100644 index 22f1867b..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_full_grid_portrait.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6c5d558291bb6b2065ab4a60f84c450f690e39e0 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_landscape.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_landscape.Nexus_5-19.png.sha1 deleted file mode 100644 index a174564..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_landscape.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fc40b09357001a7865c5e9d58a31d776620ad62f \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_portrait.Nexus_5-19.png.sha1 b/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_portrait.Nexus_5-19.png.sha1 deleted file mode 100644 index 72360760..0000000 --- a/chrome/test/data/android/render_tests/TileGridLayoutTest.modern_two_tiles_grid_portrait.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fdc8e626e0fd098b7dc3051d5992457e384b8750 \ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/TrendyTermsCoordinatorTest.start_surface_trendy_terms.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/TrendyTermsCoordinatorTest.start_surface_trendy_terms.Nexus_5X-23.png.sha1 deleted file mode 100644 index 0ff06f9..0000000 --- a/chrome/test/data/android/render_tests/TrendyTermsCoordinatorTest.start_surface_trendy_terms.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0dfee4d66e323fc50013b58bb754d0340d134f41 \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/declarative_net_request/get_matched_rules/background.js b/chrome/test/data/extensions/api_test/declarative_net_request/get_matched_rules/background.js index 969f0c0d..198c2fdb 100644 --- a/chrome/test/data/extensions/api_test/declarative_net_request/get_matched_rules/background.js +++ b/chrome/test/data/extensions/api_test/declarative_net_request/get_matched_rules/background.js
@@ -24,10 +24,16 @@ var testData = [ {host: 'ab.com', rule: {ruleId: 1, rulesetId: 'rules1'}}, {host: 'abc.com', rule: {ruleId: 2, rulesetId: 'rules1'}}, - {host: 'abcd.com', rule: {ruleId: 1, rulesetId: 'rules2'}}, { - host: 'def.com', + {host: 'abcd.com', rule: {ruleId: 1, rulesetId: 'rules2'}}, + { + host: 'dynamic.com', rule: {ruleId: 1, rulesetId: chrome.declarativeNetRequest.DYNAMIC_RULESET_ID} + }, + { + host: 'session.com', + rule: + {ruleId: 5, rulesetId: chrome.declarativeNetRequest.SESSION_RULESET_ID} } ]; @@ -35,7 +41,7 @@ const rule = { id: 1, priority: 1, - condition: {urlFilter: 'def', resourceTypes: ['main_frame']}, + condition: {urlFilter: 'dynamic', resourceTypes: ['main_frame']}, action: {type: 'block'}, }; chrome.declarativeNetRequest.updateDynamicRules({addRules: [rule]}, () => { @@ -44,6 +50,19 @@ }); } +function addSessionRule() { + const rule = { + id: 5, + priority: 1, + condition: {urlFilter: 'session', resourceTypes: ['main_frame']}, + action: {type: 'block'}, + }; + chrome.declarativeNetRequest.updateSessionRules({addRules: [rule]}, () => { + chrome.test.assertNoLastError(); + chrome.test.succeed(); + }); +} + function checkTimeStamp(timeStamp) { chrome.test.assertTrue(!!timeStamp); @@ -96,8 +115,10 @@ testServerPort = config.testServer.port; var tests = []; - // First add the dynamic rule, since it's required by one of the latter tests. + // First add the dynamic and session rule, since it's required by one of the + // latter tests. tests.push(addDynamicRule); + tests.push(addSessionRule); for (var i = 0; i < testData.length; ++i) { var test = createTest(i);
diff --git a/chrome/test/data/treat-as-public-address.html b/chrome/test/data/no-favicon-treat-as-public-address.html similarity index 100% rename from chrome/test/data/treat-as-public-address.html rename to chrome/test/data/no-favicon-treat-as-public-address.html
diff --git a/chrome/test/data/treat-as-public-address.html.mock-http-headers b/chrome/test/data/no-favicon-treat-as-public-address.html.mock-http-headers similarity index 100% rename from chrome/test/data/treat-as-public-address.html.mock-http-headers rename to chrome/test/data/no-favicon-treat-as-public-address.html.mock-http-headers
diff --git a/chrome/test/data/treat-as-public-address.html b/chrome/test/data/no-favicon.html similarity index 100% copy from chrome/test/data/treat-as-public-address.html copy to chrome/test/data/no-favicon.html
diff --git a/chrome/test/data/webshare/index.html b/chrome/test/data/webshare/index.html index a3dc6d69..2ee7f23 100644 --- a/chrome/test/data/webshare/index.html +++ b/chrome/test/data/webshare/index.html
@@ -40,6 +40,61 @@ return ('share failed: ' + error); } } + + async function share_file_title() { + try { + const single_file = create_file('sample.webp', 'image/webp', 12); + await navigator.share({files: [single_file], title: "Subject"}); + return 'share succeeded'; + } catch(error) { + return ('share failed: ' + error); + } + } + + async function share_file_title_url() { + try { + const single_file = create_file('sample.webp', 'image/webp', 12); + await navigator.share({files: [single_file], + title: "Subject", + url: "https://example.com/"}); + return 'share succeeded'; + } catch(error) { + return ('share failed: ' + error); + } + } + + async function share_file_text() { + try { + const single_file = create_file('sample.webp', 'image/webp', 12); + await navigator.share({files: [single_file], text: "Message"}); + return 'share succeeded'; + } catch(error) { + return ('share failed: ' + error); + } + } + + async function share_file_text_url() { + try { + const single_file = create_file('sample.webp', 'image/webp', 12); + await navigator.share({files: [single_file], + text: "Message", + url: "https://example.com/"}); + return 'share succeeded'; + } catch(error) { + return ('share failed: ' + error); + } + } + + async function share_file_url() { + try { + const single_file = create_file('sample.webp', 'image/webp', 12); + await navigator.share({files: [single_file], + url: "https://example.com/"}); + return 'share succeeded'; + } catch(error) { + return ('share failed: ' + error); + } + } </script> </head> <body>
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index c722203..17ead35 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -310,6 +310,8 @@ "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/date_time_page_tests.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/chromeos/esim_remove_profile_dialog_test.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/chromeos/esim_rename_dialog_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_bluetooth_private.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_bluetooth.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_receive_manager.m.js", @@ -318,6 +320,7 @@ "$root_gen_dir/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/input_page_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_config_test.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_detail_menu_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_known_networks_page_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.m.js",
diff --git a/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn b/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn index f2b4819a..5fe7cee 100644 --- a/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn +++ b/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn
@@ -42,6 +42,7 @@ "//chromeos/components/diagnostics_ui/resources:battery_status_card", "//chromeos/components/diagnostics_ui/resources:diagnostics_types", "//chromeos/components/diagnostics_ui/resources:fake_data", + "//chromeos/components/diagnostics_ui/resources:routine_section", "//ui/webui/resources/js:load_time_data.m", ] externs_list = [ "$externs_path/mocha-2.5.js" ]
diff --git a/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js index 70bf8d7..d6df6a19 100644 --- a/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js +++ b/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js
@@ -138,4 +138,29 @@ assertFalse(isRunTestsButtonDisabled()); }); }); + + test('PowerRoutine', () => { + return initializeBatteryStatusCard( + fakeBatteryInfo, fakeBatteryChargeStatus, fakeBatteryHealth) + .then(() => { + const routineSectionElement = getRoutineSection(); + + assertEquals(routineSectionElement.routines.length, 1); + assertEquals( + routineSectionElement.routines[0], + chromeos.diagnostics.mojom.RoutineType.kBatteryCharge); + + batteryStatusElement.onBatteryChargeStatusUpdated( + fakeBatteryChargeStatus[2]); + return flushTasks(); + }) + .then(() => { + const routineSectionElement = getRoutineSection(); + + assertEquals(routineSectionElement.routines.length, 1); + assertEquals( + routineSectionElement.routines[0], + chromeos.diagnostics.mojom.RoutineType.kBatteryDischarge); + }); + }); }
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js index a29f80bc..12ba2f7 100644 --- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js +++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -239,6 +239,62 @@ /** @type {?FakeScanService} */ let fakeScanService_ = null; + /** @type {?HTMLSelectElement} */ + let scannerSelect = null; + + /** @type {?HTMLSelectElement} */ + let sourceSelect = null; + + /** @type {?HTMLSelectElement} */ + let fileTypeSelect = null; + + /** @type {?HTMLSelectElement} */ + let colorModeSelect = null; + + /** @type {?HTMLSelectElement} */ + let pageSizeSelect = null; + + /** @type {?HTMLSelectElement} */ + let resolutionSelect = null; + + /** @type {?CrButtonElement} */ + let scanButton = null; + + /** @type {?CrButtonElement} */ + let cancelButton = null; + + /** @type {?HTMLElement} */ + let statusText = null; + + /** @type {?HTMLElement} */ + let helperText = null; + + /** @type {?HTMLElement} */ + let scanProgress = null; + + /** @type {?HTMLElement} */ + let progressText = null; + + /** @type {?HTMLElement} */ + let progressBar = null; + + /** @type {?HTMLElement} */ + let scannedImages = null; + + /** + * @type {!Map<!mojoBase.mojom.UnguessableToken, + * !chromeos.scanning.mojom.ScannerCapabilities>} + */ + const capabilities = new Map(); + capabilities.set(firstScannerId, firstCapabilities); + capabilities.set(secondScannerId, secondCapabilities); + + /** @type {!ScannerArr} */ + const expectedScanners = [ + createScanner(firstScannerId, firstScannerName), + createScanner(secondScannerId, secondScannerName) + ]; + suiteSetup(() => { fakeScanService_ = new FakeScanService(); setScanServiceForTesting(fakeScanService_); @@ -252,6 +308,20 @@ fakeScanService_.resetForTest(); scanningApp.remove(); scanningApp = null; + scannerSelect = null; + sourceSelect = null; + fileTypeSelect = null; + colorModeSelect = null; + pageSizeSelect = null; + resolutionSelect = null; + scanButton = null; + cancelButton = null; + statusText = null; + helperText = null; + scanProgress = null; + progressText = null; + progressBar = null; + scannedImages = null; }); /** @@ -302,6 +372,17 @@ } /** + * Clicks the "Ok" button to close the scan failed dialog. + * @return {!Promise} + */ + function clickOkButton() { + const button = scanningApp.$$('#okButton'); + assertTrue(!!button); + button.click(); + return flushTasks(); + } + + /** * Returns whether the "More settings" section is expanded or not. * @return {boolean} */ @@ -310,47 +391,10 @@ } test('Scan', () => { - const expectedScanners = [ - createScanner(firstScannerId, firstScannerName), - createScanner(secondScannerId, secondScannerName) - ]; - - let capabilities = new Map(); - capabilities.set(firstScannerId, firstCapabilities); - capabilities.set(secondScannerId, secondCapabilities); /** @type {!mojoBase.mojom.FilePath} */ const lastScannedFilePath = {'path': '/test/path/scan.jpg'}; - /** @type {!HTMLSelectElement} */ - let scannerSelect; - /** @type {!HTMLSelectElement} */ - let sourceSelect; - /** @type {!HTMLSelectElement} */ - let fileTypeSelect; - /** @type {!HTMLSelectElement} */ - let colorModeSelect; - /** @type {!HTMLSelectElement} */ - let pageSizeSelect; - /** @type {!HTMLSelectElement} */ - let resolutionSelect; - /** @type {!CrButtonElement} */ - let scanButton; - /** @type {!CrButtonElement} */ - let cancelButton; - /** @type {!HTMLElement} */ - let statusText; - /** @type {!HTMLElement} */ - let helperText; - /** @type {!HTMLElement} */ - let scanProgress; - /** @type {!HTMLElement} */ - let progressText; - /** @type {!HTMLElement} */ - let progressBar; - /** @type {!HTMLElement} */ - let scannedImages; - return initializeScanningApp(expectedScanners, capabilities) .then(() => { scannerSelect = scanningApp.$$('#scannerSelect').$$('select'); @@ -399,11 +443,12 @@ assertFalse(pageSizeSelect.disabled); assertFalse(resolutionSelect.disabled); assertFalse(scanButton.disabled); - assertTrue(isVisible(scanButton)); - assertFalse(isVisible(cancelButton)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertFalse( + isVisible(/** @type {!CrButtonElement} */ (cancelButton))); assertEquals('', statusText.textContent.trim()); - assertTrue(isVisible(helperText)); - assertFalse(isVisible(scanProgress)); + assertTrue(isVisible(/** @type {!HTMLElement} */ (helperText))); + assertFalse(isVisible(/** @type {!HTMLElement} */ (scanProgress))); assertFalse(isVisible( /** @type {!HTMLElement} */ ( scanningApp.$$('scan-done-section')))); @@ -424,10 +469,10 @@ assertTrue(pageSizeSelect.disabled); assertTrue(resolutionSelect.disabled); assertTrue(scanButton.disabled); - assertFalse(isVisible(scanButton)); - assertTrue(isVisible(cancelButton)); - assertFalse(isVisible(helperText)); - assertTrue(isVisible(scanProgress)); + assertFalse(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (cancelButton))); + assertFalse(isVisible(/** @type {!HTMLElement} */ (helperText))); + assertTrue(isVisible(/** @type {!HTMLElement} */ (scanProgress))); assertFalse(isVisible( /** @type {!HTMLElement} */ ( scanningApp.$$('scan-done-section')))); @@ -467,7 +512,7 @@ true, lastScannedFilePath); }) .then(() => { - assertTrue(isVisible(scannedImages)); + assertTrue(isVisible(/** @type {!HTMLElement} */ (scannedImages))); assertEquals(2, scannedImages.querySelectorAll('img').length); assertTrue(isVisible( /** @type {!HTMLElement} */ ( @@ -489,33 +534,55 @@ assertFalse(pageSizeSelect.disabled); assertFalse(resolutionSelect.disabled); assertFalse(scanButton.disabled); - assertTrue(isVisible(scanButton)); - assertFalse(isVisible(cancelButton)); - assertTrue(isVisible(helperText)); - assertFalse(isVisible(scanProgress)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertFalse( + isVisible(/** @type {!CrButtonElement} */ (cancelButton))); + assertTrue(isVisible(/** @type {!HTMLElement} */ (helperText))); + assertFalse(isVisible(/** @type {!HTMLElement} */ (scanProgress))); assertFalse(isVisible( /** @type {!HTMLElement} */ ( scanningApp.$$('scan-done-section')))); - assertFalse(isVisible(scannedImages)); + assertFalse(isVisible(/** @type {!HTMLElement} */ (scannedImages))); assertEquals(0, scannedImages.querySelectorAll('img').length); }); }); + test('ScanFailed', () => { + return initializeScanningApp(expectedScanners, capabilities) + .then(() => { + scanButton = + /** @type {!CrButtonElement} */ (scanningApp.$$('#scanButton')); + return fakeScanService_.whenCalled('getScannerCapabilities'); + }) + .then(() => { + // Click the Scan button and wait till the scan is started. + scanButton.click(); + return fakeScanService_.whenCalled('startScan'); + }) + .then(() => { + // Simulate a progress update. + return fakeScanService_.simulateProgress(1, 17); + }) + .then(() => { + // Simulate the scan failing. + return fakeScanService_.simulateScanComplete(false, {'path': ''}); + }) + .then(() => { + // The scan failed dialog should open. + assertTrue(scanningApp.$$('#scanFailedDialog').open); + // Click the dialog's Ok button to return to READY state. + return clickOkButton(); + }) + .then(() => { + // After the dialog closes, the scan button should be enabled and + // ready to start a new scan. + assertFalse(scanningApp.$$('#scanFailedDialog').open); + assertFalse(scanButton.disabled); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + }); + }); + test('CancelScan', () => { - const expectedScanners = [ - createScanner(firstScannerId, firstScannerName), - createScanner(secondScannerId, secondScannerName) - ]; - - let capabilities = new Map(); - capabilities.set(firstScannerId, firstCapabilities); - capabilities.set(secondScannerId, secondCapabilities); - - /** @type {!CrButtonElement} */ - let scanButton; - /** @type {!CrButtonElement} */ - let cancelButton; - return initializeScanningApp(expectedScanners, capabilities) .then(() => { scanButton = @@ -528,8 +595,9 @@ // Before the scan button is clicked, the scan button should be // visible and enabled, and the cancel button shouldn't be visible. assertFalse(scanButton.disabled); - assertTrue(isVisible(scanButton)); - assertFalse(isVisible(cancelButton)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertFalse( + isVisible(/** @type {!CrButtonElement} */ (cancelButton))); // Click the Scan button and wait till the scan is started. scanButton.click(); @@ -540,8 +608,8 @@ // button should be disabled and not visible, and the cancel button // should be visible. assertTrue(scanButton.disabled); - assertFalse(isVisible(scanButton)); - assertTrue(isVisible(cancelButton)); + assertFalse(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (cancelButton))); // Simulate a progress update and verify the progress bar and text are // updated correctly. @@ -561,11 +629,12 @@ .then(() => { // After canceling is complete, the scan button should be visible and // enabled, and the cancel button shouldn't be visible. - assertTrue(isVisible(scanButton)); - assertFalse(isVisible(cancelButton)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); + assertFalse( + isVisible(/** @type {!CrButtonElement} */ (cancelButton))); assertTrue(scanningApp.$$('#toast').open); assertFalse(isVisible( - /** @type {!HTMLElement} */ (scanningApp.$$('#infoIcon')))); + /** @type {!HTMLElement} */ (scanningApp.$$('#toastInfoIcon')))); assertFalse(isVisible( /** @type {!HTMLElement} */ (scanningApp.$$('#getHelpLink')))); assertEquals( @@ -575,18 +644,6 @@ }); test('CancelScanFailed', () => { - const expectedScanners = [ - createScanner(firstScannerId, firstScannerName), - ]; - - let capabilities = new Map(); - capabilities.set(firstScannerId, firstCapabilities); - - /** @type {!CrButtonElement} */ - let scanButton; - /** @type {!CrButtonElement} */ - let cancelButton; - return initializeScanningApp(expectedScanners, capabilities) .then(() => { scanButton = @@ -621,7 +678,7 @@ // After canceling fails, the error toast should pop up. assertTrue(scanningApp.$$('#toast').open); assertTrue(isVisible( - /** @type {!HTMLElement} */ (scanningApp.$$('#infoIcon')))); + /** @type {!HTMLElement} */ (scanningApp.$$('#toastInfoIcon')))); assertTrue(isVisible( /** @type {!HTMLElement} */ (scanningApp.$$('#getHelpLink')))); assertEquals( @@ -631,26 +688,16 @@ // button visible. assertTrue( isVisible(scanningApp.$$('#scanPreview').$$('#scanProgress'))); - assertTrue(isVisible(cancelButton)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (cancelButton))); assertFalse( isVisible(scanningApp.$$('#scanPreview').$$('#helperText'))); - assertFalse(isVisible(scanButton)); + assertFalse(isVisible(/** @type {!CrButtonElement} */ (scanButton))); }); }); test('ScanFailedToStart', () => { - const expectedScanners = [ - createScanner(firstScannerId, firstScannerName), - ]; - - let capabilities = new Map(); - capabilities.set(firstScannerId, firstCapabilities); - fakeScanService_.setFailStartScan(true); - /** @type {!CrButtonElement} */ - let scanButton; - return initializeScanningApp(expectedScanners, capabilities) .then(() => { scanButton = @@ -666,7 +713,7 @@ .then(() => { assertTrue(scanningApp.$$('#toast').open); assertTrue(isVisible( - /** @type {!HTMLElement} */ (scanningApp.$$('#infoIcon')))); + /** @type {!HTMLElement} */ (scanningApp.$$('#toastInfoIcon')))); assertTrue(isVisible( /** @type {!HTMLElement} */ (scanningApp.$$('#getHelpLink')))); assertEquals( @@ -674,14 +721,12 @@ scanningApp.$$('#toastText').textContent.trim()); assertFalse(scanButton.disabled); - assertTrue(isVisible(scanButton)); + assertTrue(isVisible(/** @type {!CrButtonElement} */ (scanButton))); }); }); test('PanelContainerContent', () => { - const scanners = []; - const capabilities = new Map(); - return initializeScanningApp(scanners, capabilities).then(() => { + return initializeScanningApp(expectedScanners, capabilities).then(() => { const panelContainer = scanningApp.$$('.panel-container'); assertTrue(!!panelContainer); @@ -694,10 +739,7 @@ }); test('MoreSettingsToggle', () => { - const scanners = [createScanner(firstScannerId, firstScannerName)]; - const capabilities = new Map(); - capabilities.set(firstScannerId, firstCapabilities); - return initializeScanningApp(scanners, capabilities) + return initializeScanningApp(expectedScanners, capabilities) .then(() => { return fakeScanService_.whenCalled('getScannerCapabilities'); })
diff --git a/chrome/test/data/webui/cr_components/certificate_manager_provisioning_test.js b/chrome/test/data/webui/cr_components/certificate_manager_provisioning_test.js index 8efab3f..0827d85 100644 --- a/chrome/test/data/webui/cr_components/certificate_manager_provisioning_test.js +++ b/chrome/test/data/webui/cr_components/certificate_manager_provisioning_test.js
@@ -49,6 +49,7 @@ function createSampleCertificateProvisioningProcess() { return { certProfileId: 'dummyProfileId', + certProfileName: 'Dummy Profile Name', isDeviceWide: true, publicKey: 'dummyPublicKey', stateId: 8,
diff --git a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js index 351610e..3911965f 100644 --- a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js +++ b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js
@@ -6,11 +6,11 @@ cr.define('cellular_setup', function() { /** @implements {chromeos.cellularSetup.mojom.ESimProfile} */ class FakeProfile { - constructor(id) { + constructor(id, fakeEuicc) { this.properties_ = { activationCode: 'activation-code-' + id, eid: '1', - iccid: id, + iccid: id + '', name: { data: this.stringToCharCodeArray_('profile' + id), }, @@ -22,6 +22,8 @@ }, state: chromeos.cellularSetup.mojom.ProfileState.kPending, }; + + this.fakeEuicc_ = fakeEuicc; } /** @@ -67,6 +69,37 @@ } return res; } + + /** + * @override + * @param {?mojoBase.mojom.String16} nickname + * @return {!Promise<{result: + * chromeos.cellularSetup.mojom.ESimOperationResult},}>} + */ + setProfileNickname(nickname) { + this.properties_.nickname = nickname; + return new Promise((res) => { + res({ + result: chromeos.cellularSetup.mojom.ESimOperationResult.kSuccess + }); + }); + } + + /** @override */ + uninstallProfile() { + return this.fakeEuicc_.removeProfileForTest(this.properties_.iccid) + .then(saved => { + if (saved) { + return { + result: + chromeos.cellularSetup.mojom.ESimOperationResult.kSuccess + }; + } + return { + result: chromeos.cellularSetup.mojom.ESimOperationResult.kFailure + }; + }); + } } /** @implements {chromeos.cellularSetup.mojom.Euicc} */ @@ -124,7 +157,27 @@ /** @private */ addProfileForTest_() { const id = this.profiles_.length + 1; - this.profiles_.push(new FakeProfile(id)); + this.profiles_.push(new FakeProfile(id, this)); + } + + /** + * @param {string} iccid + * @private + */ + async removeProfileForTest(iccid) { + const result = []; + let resp = false; + for (let profile of this.profiles_) { + const property = await profile.getProperties(); + if (property.properties.iccid === iccid) { + resp = true; + continue; + } + result.push(profile); + } + this.profiles_ = result; + + return resp; } }
diff --git a/chrome/test/data/webui/settings/chromeos/BUILD.gn b/chrome/test/data/webui/settings/chromeos/BUILD.gn index 92296db..7dd15a7 100644 --- a/chrome/test/data/webui/settings/chromeos/BUILD.gn +++ b/chrome/test/data/webui/settings/chromeos/BUILD.gn
@@ -40,6 +40,8 @@ "cups_printer_page_tests.js", "cups_printer_test_utils.js", "date_time_page_tests.js", + "esim_remove_profile_dialog_test.js", + "esim_rename_dialog_test.js", "fake_bluetooth.js", "fake_bluetooth_private.js", "fake_quick_unlock_private.js", @@ -50,6 +52,7 @@ "input_method_options_page_test.js", "input_page_test.js", "internet_config_test.js", + "internet_detail_menu_test.js", "internet_detail_page_tests.js", "internet_known_networks_page_tests.js", "internet_page_tests.js",
diff --git a/chrome/test/data/webui/settings/chromeos/esim_remove_profile_dialog_test.js b/chrome/test/data/webui/settings/chromeos/esim_remove_profile_dialog_test.js new file mode 100644 index 0000000..84d66f8 --- /dev/null +++ b/chrome/test/data/webui/settings/chromeos/esim_remove_profile_dialog_test.js
@@ -0,0 +1,69 @@ +// 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. + +// clang-format off +// #import 'chrome://os-settings/chromeos/os_settings.js'; + +// #import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js'; +// #import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +// #import {setESimManagerRemoteForTesting} from 'chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.m.js'; +// #import {FakeESimManagerRemote} from 'chrome://test/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {assertEquals, assertTrue} from '../../chai_assert.js'; +// clang-format on + +suite('EsimRemoveProfileDialog', function() { + let esimRemoveProfileDialog; + let eSimManagerRemote; + let mojoApi_; + + + setup(function() { + eSimManagerRemote = new cellular_setup.FakeESimManagerRemote(); + cellular_setup.setESimManagerRemoteForTesting(eSimManagerRemote); + + mojoApi_ = new FakeNetworkConfig(); + network_config.MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_; + mojoApi_.resetForTest(); + }); + + async function init(iccid) { + esimRemoveProfileDialog = + document.createElement('esim-remove-profile-dialog'); + esimRemoveProfileDialog.iccid = iccid; + document.body.appendChild(esimRemoveProfileDialog); + assertTrue(!!esimRemoveProfileDialog); + await flushAsync(); + } + + function flushAsync() { + Polymer.dom.flush(); + // Use setTimeout to wait for the next macrotask. + return new Promise(resolve => setTimeout(resolve)); + } + + test('Remove esim profile', async function() { + eSimManagerRemote.addEuiccForTest(2); + init('1'); + + await flushAsync(); + + const removeBtn = esimRemoveProfileDialog.$$('#remove'); + assertTrue(!!removeBtn); + removeBtn.click(); + await flushAsync(); + + const euicc = (await eSimManagerRemote.getAvailableEuiccs()).euiccs[0]; + const profiles = (await euicc.getProfileList()).profiles; + + const foundProfile = null; + for (const profile of profiles) { + const properties = await profile.getProperties(); + if (properties.properties && properties.properties.iccid === '1') { + foundProfile = profile; + } + } + assertFalse(!!foundProfile); + }); +}); \ No newline at end of file
diff --git a/chrome/test/data/webui/settings/chromeos/esim_rename_dialog_test.js b/chrome/test/data/webui/settings/chromeos/esim_rename_dialog_test.js new file mode 100644 index 0000000..3706cc9c --- /dev/null +++ b/chrome/test/data/webui/settings/chromeos/esim_rename_dialog_test.js
@@ -0,0 +1,83 @@ +// 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. + +// clang-format off +// #import 'chrome://os-settings/chromeos/os_settings.js'; + +// #import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js'; +// #import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +// #import {setESimManagerRemoteForTesting} from 'chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.m.js'; +// #import {FakeESimManagerRemote} from 'chrome://test/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {assertEquals, assertTrue} from '../../chai_assert.js'; +// clang-format on + +suite('EsimRenameDialog', function() { + let esimRenameDialog; + let eSimManagerRemote; + let mojoApi_; + + setup(function() { + eSimManagerRemote = new cellular_setup.FakeESimManagerRemote(); + cellular_setup.setESimManagerRemoteForTesting(eSimManagerRemote); + + mojoApi_ = new FakeNetworkConfig(); + network_config.MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_; + mojoApi_.resetForTest(); + return flushAsync(); + }); + + async function init(iccid) { + esimRenameDialog = document.createElement('esim-rename-dialog'); + esimRenameDialog.iccid = iccid; + document.body.appendChild(esimRenameDialog); + assertTrue(!!esimRenameDialog); + Polymer.dom.flush(); + } + + /** + * Converts a mojoBase.mojom.String16 to a JavaScript String. + * @param {?mojoBase.mojom.String16} str + * @return {string} + */ + function convertString16ToJSString_(str) { + return str.data.map(ch => String.fromCodePoint(ch)).join(''); + } + + function flushAsync() { + Polymer.dom.flush(); + // Use setTimeout to wait for the next macrotask. + return new Promise(resolve => setTimeout(resolve)); + } + + test('Rename esim profile', async function() { + eSimManagerRemote.addEuiccForTest(1); + await flushAsync(); + init('1'); + + return flushAsync().then(async () => { + const inputBox = esimRenameDialog.$$('#eSimprofileName'); + assertTrue(!!inputBox); + const profileName = inputBox.value; + + assertEquals(profileName, 'profile1'); + + inputBox.value = 'new profile nickname'; + await flushAsync(); + + const doneBtn = esimRenameDialog.$$('#done'); + assertTrue(!!doneBtn); + doneBtn.click(); + await flushAsync(); + + const euicc = (await eSimManagerRemote.getAvailableEuiccs()).euiccs[0]; + const profile = (await euicc.getProfileList()).profiles[0]; + const profileProperties = (await profile.getProperties()).properties; + + assertEquals( + convertString16ToJSString_(profileProperties.nickname), + 'new profile nickname'); + }); + }); +}); \ No newline at end of file
diff --git a/chrome/test/data/webui/settings/chromeos/internet_detail_menu_test.js b/chrome/test/data/webui/settings/chromeos/internet_detail_menu_test.js new file mode 100644 index 0000000..9363ce11 --- /dev/null +++ b/chrome/test/data/webui/settings/chromeos/internet_detail_menu_test.js
@@ -0,0 +1,129 @@ +// 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. + +// clang-format off +// #import 'chrome://os-settings/chromeos/os_settings.js'; + +// #import {routes, Router} from 'chrome://os-settings/chromeos/os_settings.js'; +// #import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js'; +// #import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {assertEquals, assertTrue} from '../../chai_assert.js'; +// #import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js'; +// #import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js'; +// clang-format on + +suite('InternetDetailMenu', function() { + let internetDetailMenu; + let mojoApi_; + let mojom; + + setup(function() { + loadTimeData.overrideValues({ + updatedCellularActivationUi: true, + }); + mojoApi_ = new FakeNetworkConfig(); + network_config.MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_; + mojoApi_.resetForTest(); + + mojom = chromeos.networkConfig.mojom; + mojoApi_.resetForTest(); + mojoApi_.setNetworkTypeEnabledState(mojom.NetworkType.kCellular, true); + const cellular = + getManagedProperties(mojom.NetworkType.kCellular, 'cellular'); + cellular.typeProperties.cellular.iccid = '100000000'; + mojoApi_.setManagedPropertiesForTest(cellular); + }); + + function getManagedProperties(type, name) { + const result = + OncMojo.getDefaultManagedProperties(type, name + '_guid', name); + return result; + } + + async function init() { + const params = new URLSearchParams; + params.append('guid', 'cellular_guid'); + settings.Router.getInstance().navigateTo( + settings.routes.NETWORK_DETAIL, params); + + internetDetailMenu = + document.createElement('settings-internet-detail-menu'); + + document.body.appendChild(internetDetailMenu); + assertTrue(!!internetDetailMenu); + await flushAsync(); + } + + function flushAsync() { + Polymer.dom.flush(); + // Use setTimeout to wait for the next macrotask. + return new Promise(resolve => setTimeout(resolve)); + } + + test('Do not show tripple dot when no iccid is present', async function() { + const cellular = + getManagedProperties(mojom.NetworkType.kCellular, 'cellular'); + cellular.typeProperties.cellular.iccid = null; + mojoApi_.setManagedPropertiesForTest(cellular); + + init(); + + await flushAsync(); + let trippleDot = internetDetailMenu.$$('#moreNetworkDetail'); + assertFalse(!!trippleDot); + + + cellular.typeProperties.cellular.iccid = '100000'; + mojoApi_.setManagedPropertiesForTest(cellular); + + const params = new URLSearchParams; + params.append('guid', 'cellular_guid'); + settings.Router.getInstance().navigateTo( + settings.routes.NETWORK_DETAIL, params); + + await flushAsync(); + trippleDot = internetDetailMenu.$$('#moreNetworkDetail'); + assertTrue(!!trippleDot); + }); + + test('Rename menu click', async function() { + init(); + await flushAsync(); + const trippleDot = internetDetailMenu.$$('#moreNetworkDetail'); + assertTrue(!!trippleDot); + + trippleDot.click(); + await flushAsync(); + + const renameBtn = + internetDetailMenu.shadowRoot.querySelector('cr-action-menu') + .querySelector('#renameBtn'); + assertTrue(!!renameBtn); + + const renameProfilePromise = test_util.eventToPromise( + 'show-esim-profile-rename-dialog', internetDetailMenu); + renameBtn.click(); + await Promise.all([renameProfilePromise, test_util.flushTasks()]); + }); + + test('Remove menu button click', async function() { + init(); + await flushAsync(); + const trippleDot = internetDetailMenu.$$('#moreNetworkDetail'); + assertTrue(!!trippleDot); + + trippleDot.click(); + await flushAsync(); + const removeBtn = + internetDetailMenu.shadowRoot.querySelector('cr-action-menu') + .querySelector('#removeBtn'); + assertTrue(!!removeBtn); + + const removeProfilePromise = test_util.eventToPromise( + 'show-esim-remove-profile-dialog', internetDetailMenu); + removeBtn.click(); + await Promise.all([removeProfilePromise, test_util.flushTasks()]); + }); +}); \ No newline at end of file
diff --git a/chrome/test/data/webui/settings/chromeos/internet_page_tests.js b/chrome/test/data/webui/settings/chromeos/internet_page_tests.js index 8048e1c..f51997c 100644 --- a/chrome/test/data/webui/settings/chromeos/internet_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/internet_page_tests.js
@@ -7,6 +7,8 @@ // #import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js'; // #import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +// #import {setESimManagerRemoteForTesting} from 'chrome://resources/cr_components/chromeos/cellular_setup/mojo_interface_provider.m.js'; +// #import {FakeESimManagerRemote} from 'chrome://test/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.m.js'; // #import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js'; // #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -24,6 +26,9 @@ /** @type {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */ let mojoApi_ = null; + /** @type {?chromeos.cellularSetup.mojom.ESimManagerRemote} */ + let eSimManagerRemote; + suiteSetup(function() { loadTimeData.overrideValues({ internetAddConnection: 'internetAddConnection', @@ -40,6 +45,9 @@ mojoApi_ = new FakeNetworkConfig(); network_config.MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_; + eSimManagerRemote = new cellular_setup.FakeESimManagerRemote(); + cellular_setup.setESimManagerRemoteForTesting(eSimManagerRemote); + // Disable animations so sub-pages open within one event loop. testing.Test.disableAnimationsAndTransitions(); }); @@ -269,6 +277,22 @@ deepLinkElement, getDeepActiveElement(), 'Toggle mobile on/off should be focused for settingId=13.'); }); + + test('Show rename profile dialog', async function() { + eSimManagerRemote.addEuiccForTest(1); + await flushAsync(); + + let renameDialog = internetPage.$$('#esimRenameDialog'); + assertFalse(!!renameDialog); + + const event = new CustomEvent( + 'show-esim-profile-rename-dialog', {detail: {iccid: '1'}}); + internetPage.dispatchEvent(event); + + await flushAsync(); + renameDialog = internetPage.$$('#esimRenameDialog'); + assertTrue(!!renameDialog); + }); }); // TODO(stevenjb): Figure out a way to reliably test navigation. Currently
diff --git a/chrome/test/data/webui/settings/chromeos/os_namespace_rewrites.gni b/chrome/test/data/webui/settings/chromeos/os_namespace_rewrites.gni index 50ceb27..6515c0c 100644 --- a/chrome/test/data/webui/settings/chromeos/os_namespace_rewrites.gni +++ b/chrome/test/data/webui/settings/chromeos/os_namespace_rewrites.gni
@@ -28,4 +28,5 @@ "cups_printer_test_util.createCupsPrinterInfo|createCupsPrinterInfo", "cups_printer_test_util.createPrinterListEntry|createPrinterListEntry", "cups_printer_test_util.getPrinterEntries|getPrinterEntries", + "cellular_setup.FakeESimManagerRemote|FakeESimManagerRemote", ]
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js index 0577e85..0cdf8c98c 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -844,6 +844,38 @@ mocha.run(); }); +// Test fixture for settings-internet-detail-menu. +// eslint-disable-next-line no-var +var OSSettingsInternetDetailMenuTest = class extends OSSettingsBrowserTest { + /** @override */ + get browsePreload() { + return super.browsePreload + + 'chromeos/internet_page/internet_detail_menu.html'; + } + + /** @override */ + get featureList() { + return {enabled: ['chromeos::features::kUpdatedCellularActivationUi']}; + } + + /** @override */ + get extraLibraries() { + return super.extraLibraries.concat([ + '//ui/webui/resources/js/promise_resolver.js', + '//ui/webui/resources/js/assert.js', + '//ui/webui/resources/js/util.js', + BROWSER_SETTINGS_PATH + '../test_util.js', + BROWSER_SETTINGS_PATH + '../fake_chrome_event.js', + BROWSER_SETTINGS_PATH + '../chromeos/fake_network_config_mojom.js', + 'internet_detail_menu_test.js', + ]); + } +}; + +TEST_F('OSSettingsInternetDetailMenuTest', 'All', () => { + mocha.run(); +}); + // Test fixture for settings-internet-page. // eslint-disable-next-line no-var var OSSettingsInternetPageTest = class extends OSSettingsBrowserTest { @@ -866,6 +898,8 @@ BROWSER_SETTINGS_PATH + '../test_util.js', BROWSER_SETTINGS_PATH + '../fake_chrome_event.js', BROWSER_SETTINGS_PATH + '../chromeos/fake_network_config_mojom.js', + BROWSER_SETTINGS_PATH + + '../cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js', 'internet_page_tests.js', ]); } @@ -975,6 +1009,60 @@ mocha.run(); }); +// Test fixture for rename esim dialog page. +// eslint-disable-next-line no-var +var OSSettingsEsimRenameDialogTest = class extends OSSettingsBrowserTest { + /** @override */ + get browsePreload() { + return super.browsePreload + + 'chromeos/internet_page/esim_rename_dialog.html'; + } + + /** @override */ + get extraLibraries() { + return super.extraLibraries.concat([ + '//ui/webui/resources/js/assert.js', + BROWSER_SETTINGS_PATH + '../test_util.js', + BROWSER_SETTINGS_PATH + '../chromeos/fake_network_config_mojom.js', + BROWSER_SETTINGS_PATH + + '../cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js', + 'esim_rename_dialog_test.js', + ]); + } +}; + +TEST_F('OSSettingsEsimRenameDialogTest', 'EsimRenameDialog', () => { + mocha.run(); +}); + +// Test fixture for remove esim profile dialog page. +// eslint-disable-next-line no-var +var OSSettingsEsimRemoveProfileDialogTest = + class extends OSSettingsBrowserTest { + /** @override */ + get browsePreload() { + return super.browsePreload + + 'chromeos/internet_page/esim_remove_profile_dialog.html'; + } + + /** @override */ + get extraLibraries() { + return super.extraLibraries.concat([ + '//ui/webui/resources/js/assert.js', + BROWSER_SETTINGS_PATH + '../test_util.js', + BROWSER_SETTINGS_PATH + '../chromeos/fake_network_config_mojom.js', + BROWSER_SETTINGS_PATH + + '../cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js', + 'esim_remove_profile_dialog_test.js', + ]); + } +}; + +TEST_F( + 'OSSettingsEsimRemoveProfileDialogTest', 'EsimRemoveProfileDialog', () => { + mocha.run(); + }); + // Test fixture for settings-internet-known-networks-page. // eslint-disable-next-line no-var var OSSettingsCellularSetupDialogTest =
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js index 1995abb..813c210 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -134,11 +134,14 @@ ['CupsPrinterLandingPage', 'cups_printer_landing_page_tests.m.js'], ['CupsPrinterPage', 'cups_printer_page_tests.m.js'], ['DateTimePage', 'date_time_page_tests.m.js'], + ['EsimRemoveProfileDialog', 'esim_remove_profile_dialog_test.m.js'], + ['EsimRenameDialog', 'esim_rename_dialog_test.m.js'], ['FilesPage', 'os_files_page_test.m.js'], ['GoogleAssistantPage', 'google_assistant_page_test.m.js'], ['InputMethodOptionPage', 'input_method_options_page_test.m.js'], ['InputPage', 'input_page_test.m.js'], ['InternetConfig', 'internet_config_test.m.js'], + ['InternetDetailMenu', 'internet_detail_menu_test.m.js'], ['InternetDetailPage', 'internet_detail_page_tests.m.js'], ['InternetKnownNetworksPage', 'internet_known_networks_page_tests.m.js'], ['InternetSubpage', 'internet_subpage_tests.m.js'],
diff --git a/chrome/utility/safe_browsing/mac/crdmg.cc b/chrome/utility/safe_browsing/mac/crdmg.cc index a904c343..d73333e 100644 --- a/chrome/utility/safe_browsing/mac/crdmg.cc +++ b/chrome/utility/safe_browsing/mac/crdmg.cc
@@ -88,16 +88,11 @@ if (argc == 3 && !PrepareUnpack(argv[2])) return EXIT_FAILURE; - if (__builtin_available(macOS 10.10, *)) { - if (!EnableSandbox()) - return EXIT_FAILURE; - - if (!ParseDMG()) - return EXIT_FAILURE; - } else { - LOG(ERROR) << "Requires 10.10 or higher"; + if (!EnableSandbox()) return EXIT_FAILURE; - } + + if (!ParseDMG()) + return EXIT_FAILURE; return EXIT_SUCCESS; }
diff --git a/chromecast/net/BUILD.gn b/chromecast/net/BUILD.gn index 7cae983..c13106b 100644 --- a/chromecast/net/BUILD.gn +++ b/chromecast/net/BUILD.gn
@@ -32,10 +32,7 @@ "network_change_notifier_factory_fuchsia.h", ] - deps += [ - "//chromecast/base:chromecast_switches", - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.hardware.ethernet", - ] + deps += [ "//chromecast/base:chromecast_switches" ] } } @@ -51,9 +48,7 @@ "time_sync_tracker.cc", "time_sync_tracker.h", ] - deps = [ - "//base", - ] + deps = [ "//base" ] if (is_fuchsia) { sources += [
diff --git a/chromecast/net/network_change_notifier_factory_fuchsia.cc b/chromecast/net/network_change_notifier_factory_fuchsia.cc index 94fbb875a..a7759e3 100644 --- a/chromecast/net/network_change_notifier_factory_fuchsia.cc +++ b/chromecast/net/network_change_notifier_factory_fuchsia.cc
@@ -4,8 +4,6 @@ #include "chromecast/net/network_change_notifier_factory_fuchsia.h" -#include <fuchsia/hardware/ethernet/cpp/fidl.h> - #include "base/command_line.h" #include "chromecast/base/chromecast_switches.h" #include "net/base/network_change_notifier_fuchsia.h" @@ -14,12 +12,10 @@ std::unique_ptr<net::NetworkChangeNotifier> NetworkChangeNotifierFactoryFuchsia::CreateInstance() { - auto required_features = GetSwitchValueBoolean(switches::kRequireWlan, false) - ? fuchsia::hardware::ethernet::Features::WLAN - : fuchsia::hardware::ethernet::Features(); + auto require_wlan = GetSwitchValueBoolean(switches::kRequireWlan, false); // Caller assumes ownership. - return std::make_unique<net::NetworkChangeNotifierFuchsia>(required_features); + return std::make_unique<net::NetworkChangeNotifierFuchsia>(require_wlan); } NetworkChangeNotifierFactoryFuchsia::NetworkChangeNotifierFactoryFuchsia() =
diff --git a/chromeos/assistant/assistant.gni b/chromeos/assistant/assistant.gni index 447b34e..c28a144 100644 --- a/chromeos/assistant/assistant.gni +++ b/chromeos/assistant/assistant.gni
@@ -12,8 +12,6 @@ } declare_args() { - # TODO(b/170170824): This flag is dead and should be removed when it is no - # longer set in the ChromeOS build. # Enable Assistant integration tests using LibAssistant and a fake S3 server. # This requires libassistant.so to support grpc communication with the S3 # server, which increases the library size, which is why we introduced this
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index 5357e4e7..048b619 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -592,6 +592,15 @@ <message name="IDS_SCANNING_APP_FILE_NOT_FOUND_TOAST_TEXT" desc="The message displayed when attempting to open a saved scan file and it is either missing or deleted."> File not found </message> + <message name="IDS_SCANNING_APP_SCAN_FAILED_DIALOG_TITLE_TEXT" desc="The text displayed as the title of the dialog shown when a scan job fails."> + Couldn't complete scanning + </message> + <message name="IDS_SCANNING_APP_SCAN_FAILED_DIALOG_BODY_TEXT" desc="The text displayed as the body of the dialog shown when a scan job fails. The text advises the user to make sure their Chromebook has enough space to save files."> + Check the scanner and try again. Make sure there is enough local space to save scanned files. + </message> + <message name="IDS_SCANNING_APP_OK_BUTTON_LABEL" desc="The label for the button to acknowledge and close the dialog shown when a scan job fails."> + Ok + </message> <!-- Diagnostics App --> <message name="IDS_DIAGNOSTICS_TITLE" desc="The title of the diagnostics app.">
diff --git a/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_OK_BUTTON_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_OK_BUTTON_LABEL.png.sha1 new file mode 100644 index 0000000..2455709 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_OK_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@ +fbbe7afee7b4ec226f5231e8acab4ffd14a4200a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_BODY_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_BODY_TEXT.png.sha1 new file mode 100644 index 0000000..ff3a7ec --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_BODY_TEXT.png.sha1
@@ -0,0 +1 @@ +330b016c2bc440ebdab0390e248f9b954ef358cf \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_TITLE_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_TITLE_TEXT.png.sha1 new file mode 100644 index 0000000..2b41a06 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_SCAN_FAILED_DIALOG_TITLE_TEXT.png.sha1
@@ -0,0 +1 @@ +d549db71efcb6dd3c3c7abd10e06b917338b9b92 \ No newline at end of file
diff --git a/chromeos/components/connectivity_diagnostics/resources/BUILD.gn b/chromeos/components/connectivity_diagnostics/resources/BUILD.gn index c477d888..813957f 100644 --- a/chromeos/components/connectivity_diagnostics/resources/BUILD.gn +++ b/chromeos/components/connectivity_diagnostics/resources/BUILD.gn
@@ -3,7 +3,7 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//tools/polymer/html_to_js.gni") import("//ui/webui/resources/tools/generate_grd.gni") @@ -38,7 +38,7 @@ out_grd = "$target_gen_dir/connectivity_diagnostics_resources.grd" } -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { deps = [ ":web_components" ] in_folder = target_gen_dir out_folder = "$target_gen_dir/$preprocess_folder"
diff --git a/chromeos/components/diagnostics_ui/backend/system_data_provider.cc b/chromeos/components/diagnostics_ui/backend/system_data_provider.cc index 5d2ee31c..8b99654 100644 --- a/chromeos/components/diagnostics_ui/backend/system_data_provider.cc +++ b/chromeos/components/diagnostics_ui/backend/system_data_provider.cc
@@ -142,7 +142,7 @@ battery_info.charge_full_design * kMilliampsInAnAmp; out_battery_health.cycle_count = battery_info.cycle_count; out_battery_health.battery_wear_percentage = - out_battery_health.charge_full_now_milliamp_hours / + 100 * out_battery_health.charge_full_now_milliamp_hours / out_battery_health.charge_full_design_milliamp_hours; }
diff --git a/chromeos/components/diagnostics_ui/backend/system_data_provider_unittest.cc b/chromeos/components/diagnostics_ui/backend/system_data_provider_unittest.cc index 985f6c8..a884f1e4 100644 --- a/chromeos/components/diagnostics_ui/backend/system_data_provider_unittest.cc +++ b/chromeos/components/diagnostics_ui/backend/system_data_provider_unittest.cc
@@ -384,7 +384,7 @@ const int32_t expected_charge_full_design_milliamp_hours = charge_full_design * 1000; const int8_t expected_battery_wear_percentage = - expected_charge_full_now_milliamp_hours / + 100 * expected_charge_full_now_milliamp_hours / expected_charge_full_design_milliamp_hours; EXPECT_EQ(expected_charge_full_now_milliamp_hours,
diff --git a/chromeos/components/diagnostics_ui/backend/system_routine_controller.cc b/chromeos/components/diagnostics_ui/backend/system_routine_controller.cc index 5b648b9..c389ede 100644 --- a/chromeos/components/diagnostics_ui/backend/system_routine_controller.cc +++ b/chromeos/components/diagnostics_ui/backend/system_routine_controller.cc
@@ -247,7 +247,7 @@ switch (routine_type) { case mojom::RoutineType::kBatteryCharge: - diagnostics_service_->RunBatteryDischargeRoutine( + diagnostics_service_->RunBatteryChargeRoutine( kBatteryDurationInSeconds, kBatteryChargeMinimumPercent, base::BindOnce(&SystemRoutineController::OnPowerRoutineStarted, base::Unretained(this), routine_type)); @@ -308,12 +308,13 @@ DCHECK_EQ(healthd::DiagnosticRoutineStatusEnum::kRunning, response_ptr->status); - const int32_t id = response_ptr->id; + DCHECK_EQ(kInvalidRoutineId, inflight_routine_id_); + inflight_routine_id_ = response_ptr->id; // Sleep for the length of the test using a one-shot timer, then start // querying again for status. ScheduleCheckRoutineStatus(GetExpectedRoutineDurationInSeconds(routine_type), - routine_type, id); + routine_type); } void SystemRoutineController::OnPowerRoutineStarted( @@ -328,25 +329,26 @@ return; } - ContinuePowerRoutine(routine_type, response_ptr->id); + DCHECK_EQ(kInvalidRoutineId, inflight_routine_id_); + inflight_routine_id_ = response_ptr->id; + + ContinuePowerRoutine(routine_type); } void SystemRoutineController::ContinuePowerRoutine( - mojom::RoutineType routine_type, - int32_t id) { + mojom::RoutineType routine_type) { DCHECK(IsPowerRoutine(routine_type)); BindCrosHealthdDiagnosticsServiceIfNeccessary(); diagnostics_service_->GetRoutineUpdate( - id, healthd::DiagnosticRoutineCommandEnum::kContinue, + inflight_routine_id_, healthd::DiagnosticRoutineCommandEnum::kContinue, /*should_include_output=*/true, base::BindOnce(&SystemRoutineController::OnPowerRoutineContinued, - base::Unretained(this), routine_type, id)); + base::Unretained(this), routine_type)); } void SystemRoutineController::OnPowerRoutineContinued( mojom::RoutineType routine_type, - int32_t id, healthd::RoutineUpdatePtr update_ptr) { DCHECK(IsPowerRoutine(routine_type)); @@ -363,27 +365,26 @@ } ScheduleCheckRoutineStatus(GetExpectedRoutineDurationInSeconds(routine_type), - routine_type, id); + routine_type); } void SystemRoutineController::CheckRoutineStatus( - mojom::RoutineType routine_type, - int32_t id) { + mojom::RoutineType routine_type) { + DCHECK_NE(kInvalidRoutineId, inflight_routine_id_); BindCrosHealthdDiagnosticsServiceIfNeccessary(); const bool should_include_output = IsPowerRoutine(routine_type); diagnostics_service_->GetRoutineUpdate( - id, healthd::DiagnosticRoutineCommandEnum::kGetStatus, + inflight_routine_id_, healthd::DiagnosticRoutineCommandEnum::kGetStatus, should_include_output, base::BindOnce(&SystemRoutineController::OnRoutineStatusUpdated, - base::Unretained(this), routine_type, id)); + base::Unretained(this), routine_type)); } void SystemRoutineController::OnRoutineStatusUpdated( mojom::RoutineType routine_type, - int32_t id, healthd::RoutineUpdatePtr update_ptr) { if (IsPowerRoutine(routine_type)) { - HandlePowerRoutineStatusUpdate(routine_type, id, std::move(update_ptr)); + HandlePowerRoutineStatusUpdate(routine_type, std::move(update_ptr)); return; } @@ -404,7 +405,7 @@ // If still running, continue to repoll until it is finished. // TODO(baileyberro): Consider adding a timeout mechanism. ScheduleCheckRoutineStatus(kRoutineResultRefreshIntervalInSeconds, - routine_type, id); + routine_type); return; case healthd::DiagnosticRoutineStatusEnum::kPassed: case healthd::DiagnosticRoutineStatusEnum::kFailed: @@ -427,8 +428,7 @@ } void SystemRoutineController::HandlePowerRoutineStatusUpdate( - mojom::RoutineType routine_type, - int32_t id, + mojom ::RoutineType routine_type, cros_healthd::mojom::RoutineUpdatePtr update_ptr) { DCHECK(IsPowerRoutine(routine_type)); @@ -449,7 +449,7 @@ // TODO(baileyberro): Consider adding a timeout mechanism. if (status == healthd::DiagnosticRoutineStatusEnum::kRunning) { ScheduleCheckRoutineStatus(kRoutineResultRefreshIntervalInSeconds, - routine_type, id); + routine_type); return; } @@ -482,12 +482,11 @@ void SystemRoutineController::ScheduleCheckRoutineStatus( uint32_t duration_in_seconds, - mojom::RoutineType routine_type, - int32_t id) { + mojom::RoutineType routine_type) { inflight_routine_timer_->Start( FROM_HERE, base::TimeDelta::FromSeconds(duration_in_seconds), base::BindOnce(&SystemRoutineController::CheckRoutineStatus, - base::Unretained(this), routine_type, id)); + base::Unretained(this), routine_type)); } void SystemRoutineController::ParsePowerRoutineResult( @@ -586,8 +585,7 @@ DCHECK(IsRoutineRunning()); auto result_info = ConstructStandardRoutineResultInfoPtr(routine_type, result); - inflight_routine_runner_->OnRoutineResult(std::move(result_info)); - inflight_routine_runner_.reset(); + SendRoutineResult(std::move(result_info)); } void SystemRoutineController::OnPowerRoutineResult( @@ -598,8 +596,14 @@ DCHECK(IsRoutineRunning()); auto result_info = ConstructPowerRoutineResultInfoPtr( routine_type, result, percent_change, seconds_elapsed); + SendRoutineResult(std::move(result_info)); +} + +void SystemRoutineController::SendRoutineResult( + mojom::RoutineResultInfoPtr result_info) { inflight_routine_runner_->OnRoutineResult(std::move(result_info)); inflight_routine_runner_.reset(); + inflight_routine_id_ = kInvalidRoutineId; } void SystemRoutineController::BindCrosHealthdDiagnosticsServiceIfNeccessary() {
diff --git a/chromeos/components/diagnostics_ui/backend/system_routine_controller.h b/chromeos/components/diagnostics_ui/backend/system_routine_controller.h index 2ee9792d..9c80f33 100644 --- a/chromeos/components/diagnostics_ui/backend/system_routine_controller.h +++ b/chromeos/components/diagnostics_ui/backend/system_routine_controller.h
@@ -29,6 +29,8 @@ namespace chromeos { namespace diagnostics { +constexpr int32_t kInvalidRoutineId = 0; + using RunRoutineCallback = base::OnceCallback<void(cros_healthd::mojom::RunRoutineResponsePtr)>; @@ -64,29 +66,25 @@ mojom::RoutineType routine_type, cros_healthd::mojom::RunRoutineResponsePtr response_ptr); - void ContinuePowerRoutine(mojom::RoutineType routine_type, int32_t id); + void ContinuePowerRoutine(mojom::RoutineType routine_type); void OnPowerRoutineContinued( mojom::RoutineType routine_type, - int32_t id, cros_healthd::mojom::RoutineUpdatePtr update_ptr); - void CheckRoutineStatus(mojom::RoutineType routine_type, int32_t id); + void CheckRoutineStatus(mojom::RoutineType routine_type); void OnRoutineStatusUpdated(mojom::RoutineType routine_type, - int32_t id, cros_healthd::mojom::RoutineUpdatePtr update_ptr); void HandlePowerRoutineStatusUpdate( mojom ::RoutineType routine_type, - int32_t id, cros_healthd::mojom::RoutineUpdatePtr update_ptr); bool IsRoutineRunning() const; void ScheduleCheckRoutineStatus(uint32_t duration_in_seconds, - mojom::RoutineType routine_type, - int32_t id); + mojom::RoutineType routine_type); void ParsePowerRoutineResult(mojom::RoutineType routine_type, mojom::StandardRoutineResult result, @@ -106,12 +104,18 @@ double percent_change, uint32_t seconds_elapsed); + void SendRoutineResult(mojom::RoutineResultInfoPtr result_info); + void BindCrosHealthdDiagnosticsServiceIfNeccessary(); void OnDiagnosticsServiceDisconnected(); void OnInflightRoutineRunnerDisconnected(); + // Keeps track of the id created by CrosHealthd for the currently running + // routine. + int32_t inflight_routine_id_ = kInvalidRoutineId; + mojo::Remote<mojom::RoutineRunner> inflight_routine_runner_; std::unique_ptr<base::OneShotTimer> inflight_routine_timer_;
diff --git a/chromeos/components/diagnostics_ui/resources/battery_status_card.js b/chromeos/components/diagnostics_ui/resources/battery_status_card.js index 70c7950..a20356b1 100644 --- a/chromeos/components/diagnostics_ui/resources/battery_status_card.js +++ b/chromeos/components/diagnostics_ui/resources/battery_status_card.js
@@ -68,12 +68,8 @@ /** @private {!Array<!RoutineType>} */ routines_: { type: Array, - value: () => { - return [ - chromeos.diagnostics.mojom.RoutineType.kBatteryCharge, - chromeos.diagnostics.mojom.RoutineType.kBatteryDischarge, - ]; - } + computed: + 'getCurrentPowerRoutines_(batteryChargeStatus_.powerAdapterStatus)', }, /** @protected {string} */ @@ -155,6 +151,19 @@ }, /** + * Get an array of currently relevant routines based on power adaptor status + * @param {!chromeos.diagnostics.mojom.ExternalPowerSource} powerAdapterStatus + * @return {!Array<!RoutineType>} + * @private + */ + getCurrentPowerRoutines_(powerAdapterStatus) { + return powerAdapterStatus === + chromeos.diagnostics.mojom.ExternalPowerSource.kDisconnected ? + [chromeos.diagnostics.mojom.RoutineType.kBatteryDischarge] : + [chromeos.diagnostics.mojom.RoutineType.kBatteryCharge]; + }, + + /** * Converts utf16 to a readable string. * @param {!mojoBase.mojom.String16} str16 * @return {string}
diff --git a/chromeos/components/diagnostics_ui/resources/fake_data.js b/chromeos/components/diagnostics_ui/resources/fake_data.js index d96ea8c6..493b48de7 100644 --- a/chromeos/components/diagnostics_ui/resources/fake_data.js +++ b/chromeos/components/diagnostics_ui/resources/fake_data.js
@@ -22,7 +22,8 @@ { chargeNowMilliampHours: 4800, currentNowMilliamps: 1123, - powerAdapterStatus: chromeos.diagnostics.mojom.ExternalPowerSource.kAc, + powerAdapterStatus: + chromeos.diagnostics.mojom.ExternalPowerSource.kDisconnected, powerTime: stringToMojoString16('2h 45m'), } ];
diff --git a/chromeos/components/phonehub/proto/phonehub_api.proto b/chromeos/components/phonehub/proto/phonehub_api.proto index bc7c6d7d..e451435 100644 --- a/chromeos/components/phonehub/proto/phonehub_api.proto +++ b/chromeos/components/phonehub/proto/phonehub_api.proto
@@ -85,6 +85,11 @@ HIGH = 5; } +enum ProfileType { + DEFAULT_PROFILE = 0; + WORK_PROFILE = 1; +} + message PhoneProperties { int32 battery_percentage = 1; ChargingState charging_state = 2; @@ -100,6 +105,8 @@ NotificationAccessState notification_access_state = 8; FindMyDeviceRingStatus ring_status = 9; + + ProfileType profile_type = 10; } message App {
diff --git a/chromeos/components/scanning/resources/scanning_app.html b/chromeos/components/scanning/resources/scanning_app.html index 76046a9..68dd3772 100644 --- a/chromeos/components/scanning/resources/scanning_app.html +++ b/chromeos/components/scanning/resources/scanning_app.html
@@ -87,7 +87,7 @@ min-width: 280px; } - #infoIcon { + #toastInfoIcon { fill: var(--google-red-refresh-300); margin-inline-end: 10px; margin-inline-start: -8px; @@ -107,6 +107,21 @@ color: var(--google-blue-refresh-300); text-decoration: none; } + + cr-dialog::part(dialog) { + width: 340px; + } + + cr-dialog [slot=title] { + font-weight: 500; + padding-bottom: 12px; + } + + #dialogInfoIcon { + display: block; + fill: var(--google-red-600); + margin-bottom: 14px; + } </style> <div id="scanningContainer"> <div class="panel-container"> @@ -181,7 +196,7 @@ </div> <cr-toast id="toast" duration="5000"> <div id="toastDiv"> - <iron-icon id="infoIcon" icon="cr:info-outline" + <iron-icon id="toastInfoIcon" icon="cr:info-outline" hidden="[[!showToastInfoIcon_]]"></iron-icon> <span id="toastText">[[i18n(toastMessageKey_)]]</span> <!-- TODO(gavinwill): Add href to the help link when available --> @@ -191,4 +206,23 @@ </div> </div> </cr-toast> + <cr-dialog id="scanFailedDialog"> + <div slot="title"> + <iron-icon id="dialogInfoIcon" icon="cr:info-outline"></iron-icon> + [[i18n('scanFailedDialogTitleText')]] + </div> + <div slot="body"> + [[i18n('scanFailedDialogBodyText')]] + </div> + <div slot="button-container"> + <!-- TODO(gavinwill): Add href to the help link when available --> + <cr-button class="cancel-button"> + [[i18n('getHelpLinkText')]] + </cr-button> + <cr-button id="okButton" class="action-button" + on-click="onDialogOkClick_"> + [[i18n('okButtonLabel')]] + </cr-button> + </div> + </cr-dialog> </div>
diff --git a/chromeos/components/scanning/resources/scanning_app.js b/chromeos/components/scanning/resources/scanning_app.js index f12a3e58..326aba6 100644 --- a/chromeos/components/scanning/resources/scanning_app.js +++ b/chromeos/components/scanning/resources/scanning_app.js
@@ -3,6 +3,7 @@ // found in the LICENSE file. import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; +import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js'; import 'chrome://resources/cr_elements/cr_toast/cr_toast.m.js'; import 'chrome://resources/cr_elements/icons.m.js'; import 'chrome://resources/cr_elements/shared_vars_css.m.js'; @@ -271,14 +272,13 @@ * @param {!mojoBase.mojom.FilePath} lastScannedFilePath */ onScanComplete(success, lastScannedFilePath) { - if (success) { - this.lastScannedFilePath_ = lastScannedFilePath; - this.setAppState_(AppState.DONE); + if (!success) { + this.$.scanFailedDialog.showModal(); return; } - this.statusText_ = 'Scan failed.'; - this.setAppState_(AppState.READY); + this.lastScannedFilePath_ = lastScannedFilePath; + this.setAppState_(AppState.DONE); }, /** @@ -545,4 +545,10 @@ onFileNotFound_() { this.showToast_('fileNotFoundToastText'); }, + + /** @private */ + onDialogOkClick_() { + this.$.scanFailedDialog.close(); + this.setAppState_(AppState.READY); + }, });
diff --git a/chromeos/components/scanning/scanning_ui.cc b/chromeos/components/scanning/scanning_ui.cc index 471e725..9ce39d43 100644 --- a/chromeos/components/scanning/scanning_ui.cc +++ b/chromeos/components/scanning/scanning_ui.cc
@@ -78,6 +78,7 @@ {"noScannersHelpLinkLabel", IDS_SCANNING_APP_NO_SCANNERS_HELP_LINK_LABEL}, {"noScannersHelpText", IDS_SCANNING_APP_NO_SCANNERS_HELP_TEXT}, {"noScannersText", IDS_SCANNING_APP_NO_SCANNERS_TEXT}, + {"okButtonLabel", IDS_SCANNING_APP_OK_BUTTON_LABEL}, {"oneSidedDocFeederOptionText", IDS_SCANNING_APP_ONE_SIDED_DOC_FEEDER_OPTION_TEXT}, {"pdfOptionText", IDS_SCANNING_APP_PDF_OPTION_TEXT}, @@ -87,6 +88,10 @@ {"resolutionOptionText", IDS_SCANNING_APP_RESOLUTION_OPTION_TEXT}, {"scanButtonText", IDS_SCANNING_APP_SCAN_BUTTON_TEXT}, {"scanCanceledToastText", IDS_SCANNING_APP_SCAN_CANCELED_TOAST_TEXT}, + {"scanFailedDialogBodyText", + IDS_SCANNING_APP_SCAN_FAILED_DIALOG_BODY_TEXT}, + {"scanFailedDialogTitleText", + IDS_SCANNING_APP_SCAN_FAILED_DIALOG_TITLE_TEXT}, {"scanPreviewHelperText", IDS_SCANNING_APP_SCAN_PREVIEW_HELPER_TEXT}, {"scanPreviewProgressText", IDS_SCANNING_APP_SCAN_PREVIEW_PROGRESS_TEXT}, {"scanToDropdownLabel", IDS_SCANNING_APP_SCAN_TO_DROPDOWN_LABEL},
diff --git a/chromeos/cryptohome/cryptohome_parameters.cc b/chromeos/cryptohome/cryptohome_parameters.cc index d577a950..75315b30 100644 --- a/chromeos/cryptohome/cryptohome_parameters.cc +++ b/chromeos/cryptohome/cryptohome_parameters.cc
@@ -107,63 +107,6 @@ return LookupUserByCryptohomeId(account_identifier.account_id()); } -KeyDefinition::AuthorizationData::Secret::Secret() : encrypt(false), - sign(false), - wrapped(false) { -} - -KeyDefinition::AuthorizationData::Secret::Secret( - bool encrypt, - bool sign, - const std::string& symmetric_key, - const std::string& public_key, - bool wrapped) - : encrypt(encrypt), - sign(sign), - symmetric_key(symmetric_key), - public_key(public_key), - wrapped(wrapped) { -} - -bool KeyDefinition::AuthorizationData::Secret::operator==( - const Secret& other) const { - return encrypt == other.encrypt && - sign == other.sign && - symmetric_key == other.symmetric_key && - public_key == other.public_key && - wrapped == other.wrapped; -} - -KeyDefinition::AuthorizationData::AuthorizationData() : type(TYPE_HMACSHA256) { -} - -KeyDefinition::AuthorizationData::AuthorizationData( - bool encrypt, - bool sign, - const std::string& symmetric_key) : type(TYPE_HMACSHA256) { - secrets.push_back(Secret(encrypt, - sign, - symmetric_key, - std::string() /* public_key */, - false /* wrapped */)); -} - -KeyDefinition::AuthorizationData::AuthorizationData( - const AuthorizationData& other) = default; - -KeyDefinition::AuthorizationData::~AuthorizationData() = default; - -bool KeyDefinition::AuthorizationData::operator==( - const AuthorizationData& other) const { - if (type != other.type || secrets.size() != other.secrets.size()) - return false; - for (size_t i = 0; i < secrets.size(); ++i) { - if (!(secrets[i] == other.secrets[i])) - return false; - } - return true; -} - KeyDefinition::ProviderData::ProviderData() = default; KeyDefinition::ProviderData::ProviderData(const std::string& name) @@ -252,15 +195,10 @@ privileges != other.privileges || policy != other.policy || revision != other.revision || challenge_response_keys != other.challenge_response_keys || - authorization_data.size() != other.authorization_data.size() || provider_data.size() != other.provider_data.size()) { return false; } - for (size_t i = 0; i < authorization_data.size(); ++i) { - if (!(authorization_data[i] == other.authorization_data[i])) - return false; - } for (size_t i = 0; i < provider_data.size(); ++i) { if (!(provider_data[i] == other.provider_data[i])) return false;
diff --git a/chromeos/cryptohome/cryptohome_parameters.h b/chromeos/cryptohome/cryptohome_parameters.h index 1ef998b..17c5c6d 100644 --- a/chromeos/cryptohome/cryptohome_parameters.h +++ b/chromeos/cryptohome/cryptohome_parameters.h
@@ -23,7 +23,6 @@ PRIV_ADD = 1 << 1, // Can add new keys. PRIV_REMOVE = 1 << 2, // Can remove other keys. PRIV_MIGRATE = 1 << 3, // Destroy all keys and replace with new. - PRIV_AUTHORIZED_UPDATE = 1 << 4, // Key can be updated in place. PRIV_DEFAULT = PRIV_ADD | PRIV_REMOVE | PRIV_MIGRATE }; @@ -85,42 +84,6 @@ TYPE_FINGERPRINT = 2, }; - struct AuthorizationData { - enum Type { - TYPE_HMACSHA256 = 0, - TYPE_AES256CBC_HMACSHA256 - }; - - struct Secret { - Secret(); - Secret(bool encrypt, - bool sign, - const std::string& symmetric_key, - const std::string& public_key, - bool wrapped); - - bool operator==(const Secret& other) const; - - bool encrypt; - bool sign; - std::string symmetric_key; - std::string public_key; - bool wrapped; - }; - - AuthorizationData(); - AuthorizationData(bool encrypt, - bool sign, - const std::string& symmetric_key); - AuthorizationData(const AuthorizationData& other); - ~AuthorizationData(); - - bool operator==(const AuthorizationData& other) const; - - Type type; - std::vector<Secret> secrets; - }; - // This struct holds metadata that will be stored alongside the key. Each // |ProviderData| entry must have a |name| and may hold either a |number| or a // sequence of |bytes|. The metadata is entirely opaque to cryptohome. It is @@ -177,7 +140,6 @@ std::string secret; std::vector<chromeos::ChallengeResponseKey> challenge_response_keys; - std::vector<AuthorizationData> authorization_data; std::vector<ProviderData> provider_data; };
diff --git a/chromeos/cryptohome/cryptohome_util.cc b/chromeos/cryptohome/cryptohome_util.cc index 908bbba..e477c82 100644 --- a/chromeos/cryptohome/cryptohome_util.cc +++ b/chromeos/cryptohome/cryptohome_util.cc
@@ -65,22 +65,6 @@ privileges->set_add(key_def_privileges & PRIV_ADD); privileges->set_remove(key_def_privileges & PRIV_REMOVE); privileges->set_update(key_def_privileges & PRIV_MIGRATE); - privileges->set_authorized_update(key_def_privileges & - PRIV_AUTHORIZED_UPDATE); -} - -// TODO(crbug.com/797848): Add tests that cover this logic. -void KeyDefSecretToKeyAuthorizationSecret( - const KeyDefinition::AuthorizationData::Secret& key_def_secret, - KeyAuthorizationSecret* secret) { - secret->mutable_usage()->set_encrypt(key_def_secret.encrypt); - secret->mutable_usage()->set_sign(key_def_secret.sign); - secret->set_wrapped(key_def_secret.wrapped); - if (!key_def_secret.symmetric_key.empty()) - secret->set_symmetric_key(key_def_secret.symmetric_key); - - if (!key_def_secret.public_key.empty()) - secret->set_public_key(key_def_secret.public_key); } // TODO(crbug.com/797848): Add tests that cover this logic. @@ -95,17 +79,6 @@ entry->set_bytes(*provider_data.bytes); } -// TODO(crbug.com/797848): Add tests that cover this logic. -KeyAuthorizationData::KeyAuthorizationType GetKeyAuthDataType( - KeyDefinition::AuthorizationData::Type key_def_auth_data_type) { - switch (key_def_auth_data_type) { - case KeyDefinition::AuthorizationData::TYPE_HMACSHA256: - return KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256; - case KeyDefinition::AuthorizationData::TYPE_AES256CBC_HMACSHA256: - return KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_AES256CBC_HMACSHA256; - } -} - } // namespace MountError MountExReplyToMountError(const base::Optional<BaseReply>& reply) { @@ -174,24 +147,12 @@ key_definition.privileges |= PRIV_REMOVE; if (privileges.update()) key_definition.privileges |= PRIV_MIGRATE; - if (privileges.authorized_update()) - key_definition.privileges |= PRIV_AUTHORIZED_UPDATE; // Extract |policy|. key_definition.policy.low_entropy_credential = it->policy().low_entropy_credential(); key_definition.policy.auth_locked = it->policy().auth_locked(); - // Extract |authorization_data|. - for (RepeatedPtrField<KeyAuthorizationData>::const_iterator auth_it = - it->authorization_data().begin(); - auth_it != it->authorization_data().end(); ++auth_it) { - key_definition.authorization_data.push_back( - KeyDefinition::AuthorizationData()); - KeyAuthorizationDataToAuthorizationData( - *auth_it, &key_definition.authorization_data.back()); - } - // Extract |provider_data|. for (RepeatedPtrField<KeyProviderData::Entry>::const_iterator provider_data_it = it->provider_data().entry().begin(); @@ -310,15 +271,6 @@ data->mutable_privileges()); } - for (const auto& key_def_auth_data : key_def.authorization_data) { - KeyAuthorizationData* auth_data = data->add_authorization_data(); - auth_data->set_type(GetKeyAuthDataType(key_def_auth_data.type)); - for (const auto& key_def_secret : key_def_auth_data.secrets) { - KeyDefSecretToKeyAuthorizationSecret(key_def_secret, - auth_data->add_secrets()); - } - } - for (const auto& provider_data : key_def.provider_data) { KeyDefProviderDataToKeyProviderDataEntry( provider_data, data->mutable_provider_data()->add_entry()); @@ -400,26 +352,4 @@ } } -void KeyAuthorizationDataToAuthorizationData( - const KeyAuthorizationData& authorization_data_proto, - KeyDefinition::AuthorizationData* authorization_data) { - switch (authorization_data_proto.type()) { - case KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256: - authorization_data->type = - KeyDefinition::AuthorizationData::TYPE_HMACSHA256; - break; - case KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_AES256CBC_HMACSHA256: - authorization_data->type = - KeyDefinition::AuthorizationData::TYPE_AES256CBC_HMACSHA256; - break; - } - - for (const auto& secret : authorization_data_proto.secrets()) { - authorization_data->secrets.push_back( - KeyDefinition::AuthorizationData::Secret( - secret.usage().encrypt(), secret.usage().sign(), - secret.symmetric_key(), secret.public_key(), secret.wrapped())); - } -} - } // namespace cryptohome
diff --git a/chromeos/cryptohome/cryptohome_util.h b/chromeos/cryptohome/cryptohome_util.h index ad805fc7..c9b08173 100644 --- a/chromeos/cryptohome/cryptohome_util.h +++ b/chromeos/cryptohome/cryptohome_util.h
@@ -66,13 +66,6 @@ COMPONENT_EXPORT(CHROMEOS_CRYPTOHOME) MountError CryptohomeErrorToMountError(CryptohomeErrorCode code); -// Converts the given KeyAuthorizationData to AuthorizationData pointed to by -// |authorization_data|. -COMPONENT_EXPORT(CHROMEOS_CRYPTOHOME) -void KeyAuthorizationDataToAuthorizationData( - const KeyAuthorizationData& authorization_data_proto, - KeyDefinition::AuthorizationData* authorization_data); - } // namespace cryptohome #endif // CHROMEOS_CRYPTOHOME_CRYPTOHOME_UTIL_H_
diff --git a/chromeos/cryptohome/cryptohome_util_unittest.cc b/chromeos/cryptohome/cryptohome_util_unittest.cc index 4dff1be..7b3840df 100644 --- a/chromeos/cryptohome/cryptohome_util_unittest.cc +++ b/chromeos/cryptohome/cryptohome_util_unittest.cc
@@ -264,7 +264,6 @@ EXPECT_TRUE(privileges.add()); EXPECT_TRUE(privileges.remove()); EXPECT_TRUE(privileges.update()); - EXPECT_FALSE(privileges.authorized_update()); } TEST(CryptohomeUtilTest, KeyDefinitionToKeyAddPrivileges) { @@ -278,7 +277,6 @@ EXPECT_TRUE(privileges.add()); EXPECT_FALSE(privileges.remove()); EXPECT_FALSE(privileges.update()); - EXPECT_FALSE(privileges.authorized_update()); } TEST(CryptohomeUtilTest, KeyDefinitionToKeyRemovePrivileges) { @@ -292,7 +290,6 @@ EXPECT_FALSE(privileges.add()); EXPECT_TRUE(privileges.remove()); EXPECT_FALSE(privileges.update()); - EXPECT_FALSE(privileges.authorized_update()); } TEST(CryptohomeUtilTest, KeyDefinitionToKeyUpdatePrivileges) { @@ -306,26 +303,11 @@ EXPECT_FALSE(privileges.add()); EXPECT_FALSE(privileges.remove()); EXPECT_TRUE(privileges.update()); - EXPECT_FALSE(privileges.authorized_update()); -} - -TEST(CryptohomeUtilTest, KeyDefinitionToKeyAuthorizedUpdatePrivileges) { - KeyDefinition key_def; - key_def.privileges = PRIV_AUTHORIZED_UPDATE; - Key key; - - KeyDefinitionToKey(key_def, &key); - KeyPrivileges privileges = key.data().privileges(); - - EXPECT_FALSE(privileges.add()); - EXPECT_FALSE(privileges.remove()); - EXPECT_FALSE(privileges.update()); - EXPECT_TRUE(privileges.authorized_update()); } TEST(CryptohomeUtilTest, KeyDefinitionToKeyAllPrivileges) { KeyDefinition key_def; - key_def.privileges = PRIV_DEFAULT | PRIV_AUTHORIZED_UPDATE; + key_def.privileges = PRIV_DEFAULT; Key key; KeyDefinitionToKey(key_def, &key); @@ -334,7 +316,6 @@ EXPECT_TRUE(privileges.add()); EXPECT_TRUE(privileges.remove()); EXPECT_TRUE(privileges.update()); - EXPECT_TRUE(privileges.authorized_update()); } // Test the KeyDefinitionToKey() function against the KeyDefinition struct of @@ -385,53 +366,6 @@ EXPECT_EQ(key.data().challenge_response_key(1).signature_algorithm(1), kKey2Algorithm2Proto); } - -TEST(CryptohomeUtilTest, KeyAuthorizationDataToAuthorizationDataHmacSha256) { - KeyAuthorizationData auth_data_proto; - auth_data_proto.set_type( - KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256); - KeyDefinition::AuthorizationData auth_data; - - KeyAuthorizationDataToAuthorizationData(auth_data_proto, &auth_data); - - EXPECT_EQ(auth_data.type, KeyDefinition::AuthorizationData::TYPE_HMACSHA256); -} - -TEST(CryptohomeUtilTest, KeyAuthorizationDataToAuthorizationDataAes256Cbc) { - KeyAuthorizationData auth_data_proto; - auth_data_proto.set_type( - KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_AES256CBC_HMACSHA256); - KeyDefinition::AuthorizationData auth_data; - - KeyAuthorizationDataToAuthorizationData(auth_data_proto, &auth_data); - - EXPECT_EQ(auth_data.type, - KeyDefinition::AuthorizationData::TYPE_AES256CBC_HMACSHA256); -} - -TEST(CryptohomeUtilTest, KeyAuthorizationDataToAuthorizationDataSecret) { - constexpr bool kEncrypt = true; - constexpr bool kSign = false; - constexpr bool kWrapped = true; - const std::string kSymmetricKey = "symmetric_key"; - const std::string kPublicKey = "public_key"; - KeyAuthorizationData auth_data_proto; - KeyAuthorizationSecret* secret = auth_data_proto.add_secrets(); - KeyAuthorizationSecretUsage* usage = secret->mutable_usage(); - usage->set_encrypt(kEncrypt); - usage->set_sign(kSign); - secret->set_wrapped(kWrapped); - secret->set_symmetric_key(kSymmetricKey); - secret->set_public_key(kPublicKey); - KeyDefinition::AuthorizationData::Secret expected_secret( - kEncrypt, kSign, kSymmetricKey, kPublicKey, kWrapped); - KeyDefinition::AuthorizationData auth_data; - - KeyAuthorizationDataToAuthorizationData(auth_data_proto, &auth_data); - - EXPECT_EQ(auth_data.secrets.back(), expected_secret); -} - TEST(CryptohomeUtilTest, AccountDiskUsageReplyToUsageSizeNullOptional) { const base::Optional<BaseReply> reply = base::nullopt; @@ -530,8 +464,6 @@ key_data->set_label(kKeyLabel); key_data->mutable_privileges()->set_update(false); key_data->set_revision(kKeyRevision); - key_data->add_authorization_data()->set_type( - KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256); KeyProviderData* data = key_data->mutable_provider_data(); KeyProviderData::Entry* entry1 = data->add_entry(); entry1->set_name(kProviderData1Name); @@ -551,9 +483,6 @@ EXPECT_EQ(kKeyLabel, key_definition.label); EXPECT_EQ(PRIV_ADD | PRIV_REMOVE, key_definition.privileges); EXPECT_EQ(kKeyRevision, key_definition.revision); - ASSERT_EQ(1u, key_definition.authorization_data.size()); - EXPECT_EQ(KeyDefinition::AuthorizationData::TYPE_HMACSHA256, - key_definition.authorization_data.front().type); ASSERT_EQ(2u, key_definition.provider_data.size()); const KeyDefinition::ProviderData* provider_data = &key_definition.provider_data[0];
diff --git a/chromeos/services/assistant/chromium_api_delegate.cc b/chromeos/services/assistant/chromium_api_delegate.cc index f8e1c37..5ebc935 100644 --- a/chromeos/services/assistant/chromium_api_delegate.cc +++ b/chromeos/services/assistant/chromium_api_delegate.cc
@@ -6,7 +6,6 @@ #include <utility> -#include "base/notreached.h" #include "base/single_thread_task_runner.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -25,9 +24,5 @@ return &http_connection_factory_; } -void ChromiumApiDelegate::OverrideDoNotDisturb(bool do_not_disturb_enabled) { - NOTIMPLEMENTED(); -} - } // namespace assistant } // namespace chromeos
diff --git a/chromeos/services/assistant/chromium_api_delegate.h b/chromeos/services/assistant/chromium_api_delegate.h index 008bca8..e31a438 100644 --- a/chromeos/services/assistant/chromium_api_delegate.h +++ b/chromeos/services/assistant/chromium_api_delegate.h
@@ -29,7 +29,6 @@ ~ChromiumApiDelegate() override; // assistant_client::FuchsiaApiDelegate overrides: assistant_client::HttpConnectionFactory* GetHttpConnectionFactory() override; - void OverrideDoNotDisturb(bool do_not_disturb_enabled) override; private: ChromiumHttpConnectionFactory http_connection_factory_;
diff --git a/chromeos/services/assistant/chromium_http_connection.cc b/chromeos/services/assistant/chromium_http_connection.cc index bd9dde0..2f002fd5 100644 --- a/chromeos/services/assistant/chromium_http_connection.cc +++ b/chromeos/services/assistant/chromium_http_connection.cc
@@ -152,15 +152,6 @@ case Method::HEAD: resource_request->method = "HEAD"; break; - case Method::PATCH: - resource_request->method = "PATCH"; - break; - case Method::PUT: - resource_request->method = "PUT"; - break; - case Method::DELETE: - resource_request->method = "DELETE"; - break; } resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
diff --git a/chromeos/services/assistant/utils.cc b/chromeos/services/assistant/utils.cc index ffa338b..82bbf877 100644 --- a/chromeos/services/assistant/utils.cc +++ b/chromeos/services/assistant/utils.cc
@@ -40,22 +40,6 @@ base::StringAppendF(user_agent, " ARC/%s", arc_version.c_str()); } -// Returns if we are running a test or release image. -bool IsTestImage() { - // If we're not running on real hardware, we're considered a test build. - // This check is needed because the release track is only set for real - // hardware. - if (!base::SysInfo::IsRunningOnChromeOS()) - return true; - - constexpr char kChromeOSReleaseTrack[] = "CHROMEOS_RELEASE_TRACK"; - constexpr char kTestImageRelease[] = "testimage-channel"; - - std::string track; - bool found = base::SysInfo::GetLsbReleaseValue(kChromeOSReleaseTrack, &track); - return found && (track.find(kTestImageRelease) != std::string::npos); -} - } // namespace // Get the root path for assistant files. @@ -164,11 +148,10 @@ GetBaseAssistantDir().AsUTF8Unsafe()); } - // Inform Libassistant if we're running a test image, because Libassistant has - // a consistency check to ensure |libassistant_debug.so| is not used in - // production. - if (IsTestImage()) + if (features::IsLibAssistantBetaBackendEnabled() || + features::IsAssistantDebuggingEnabled()) { config.SetStringPath("internal.backend_type", "BETA_DOGFOOD"); + } // Use http unless we're using the fake s3 server, which requires grpc. if (s3_server_uri_override)
diff --git a/chromeos/services/cros_healthd/public/cpp/service_connection_unittest.cc b/chromeos/services/cros_healthd/public/cpp/service_connection_unittest.cc index 61700aa2..7f0b4fb 100644 --- a/chromeos/services/cros_healthd/public/cpp/service_connection_unittest.cc +++ b/chromeos/services/cros_healthd/public/cpp/service_connection_unittest.cc
@@ -218,6 +218,11 @@ HttpsLatency, (NetworkDiagnosticsRoutines::HttpsLatencyCallback), (override)); + MOCK_METHOD(void, + VideoConferencing, + (const base::Optional<std::string>&, + NetworkDiagnosticsRoutines::VideoConferencingCallback), + (override)); mojo::PendingRemote<NetworkDiagnosticsRoutines> pending_remote() { if (receiver_.is_bound()) {
diff --git a/chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom b/chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom index 95780e0e..78ebf0c 100644 --- a/chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom +++ b/chromeos/services/nearby/public/mojom/webrtc_signaling_messenger.mojom
@@ -10,6 +10,34 @@ OnMessage(string message); }; +// NOTE: Keep in sync with: +// third_party/nearby/src/proto/connections/offline_wire_formats.proto +enum LocationStandardFormat { + // NOTE: UNKNOWN = 0 is intentionally omitted. + + // E164 country codes: + // https://en.wikipedia.org/wiki/List_of_country_calling_codes + // e.g. +1 for USA + E164_CALLING = 1, + + // ISO 3166-1 alpha-2 country codes: + // https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 + ISO_3166_1_ALPHA_2 = 2, +}; + +// |LocationHint| is used by Tachyon to choose the right geo shard. During +// bandwidth upgrade the requester sends its location hint over the connection +// and this is used to ensure both parties are talking to the same Tachyon +// instance. +// NOTE: Keep in sync with: +// third_party/nearby/src/proto/connections/offline_wire_formats.proto +struct LocationHint { + // The location as an E164_CALLING code or an ISO 3166-1 alpha-2 country code. + string location; + // Defines the format of the location string. + LocationStandardFormat format; +}; + // Runs in browser process and is used by the nearby library to send and // receive messages. // TODO(crbug.com/1106387) : Update Nearby library to use async callbacks @@ -17,12 +45,12 @@ interface WebRtcSignalingMessenger { // Sends a signaling message |message| to |peer_id|. [Sync] - SendMessage(string self_id, string peer_id, string message) - => (bool success); + SendMessage(string self_id, string peer_id, LocationHint location_hint, + string message) => (bool success); // Registers |listener| to start receiving messages from other devices. [Sync] - StartReceivingMessages(string self_id, + StartReceivingMessages(string self_id, LocationHint location_hint, pending_remote<IncomingMessagesListener> listener) => (bool success); // Unregisters listener and stops receiving messages from other devices.
diff --git a/chromeos/services/network_health/public/mojom/network_diagnostics.mojom b/chromeos/services/network_health/public/mojom/network_diagnostics.mojom index 8bb1675..0601a58 100644 --- a/chromeos/services/network_health/public/mojom/network_diagnostics.mojom +++ b/chromeos/services/network_health/public/mojom/network_diagnostics.mojom
@@ -128,6 +128,17 @@ kVeryHighLatency, }; +// Problems related to the VideoConferencing routine. +[Extensible] +enum VideoConferencingProblem { + // Failed requests to a STUN server via UDP. + kUdpFailure, + // Failed requests to a STUN server via TCP. + kTcpFailure, + // Failed to establish a TLS connection to media hostnames. + kMediaFailure, +}; + // This interface is to be used by any clients that need to run specific // network-related diagnostics. Expected clients of this interface are // NetworkHealth, cros_healthd, and a connectivity diagnostics Web UI (to name @@ -180,4 +191,12 @@ // the system. HttpsLatency() => (RoutineVerdict verdict, array<HttpsLatencyProblem> problems); + + // Tests the device's video conferencing capabalities by testing whether the + // device can: + // (1) Contact either a default or specified STUN server via UDP. + // (2) Contact either a default or specified STUN server via TCP. + // (3) Reach common media endpoints. + VideoConferencing(string? stun_server_hostname) => (RoutineVerdict verdict, + array<VideoConferencingProblem> problems, string? support_details); };
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb index 6379c9e9..24888adc 100644 --- a/chromeos/strings/chromeos_strings_af.xtb +++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Kon nie skandering begin nie</translation> <translation id="1071587090247825784">Brandmuur is bespeur</translation> <translation id="1075811647922107217">Bladsygrootte</translation> +<translation id="1124772482545689468">Gebruiker</translation> <translation id="1175697296044146566">Hierdie <ph name="DEVICE_TYPE" /> word bestuur deur <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Onbekende fout.</translation> <translation id="1204296502688602597">DNS-traagheid</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> bestuur hierdie gebruiker en kan oor 'n afstand instellings bestuur en gebruikeraktiwiteit monitor.</translation> <translation id="150962533380566081">Ongeldige PUK.</translation> <translation id="1510238584712386396">Lanseerder</translation> +<translation id="1621067168122174824">Laat loop laaitoets</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> drade)</translation> <translation id="1641857168437328880">Dokumentvoerder (een kant)</translation> <translation id="1644574205037202324">Geskiedenis</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-ontbinder is teenwoordig</translation> <translation id="1743558184855585519">Die battery word as verbruik beskou sodra dit die limiet bereik</translation> +<translation id="1792647875738159689">Kanselleer skandering</translation> <translation id="1905710495812624430">Maksimum toegelate pogings is oorskry.</translation> <translation id="1930797645656624981">Chrome-bedryfstelsel se invoermetodediens</translation> <translation id="1947737735496445907">Gedruk</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> pogings oor</translation> <translation id="2391082728065870591">Stuur terugvoerverslag</translation> <translation id="2461822463642141190">Huidig</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} poging oor}other{<ph name="ERROR_MESSAGE" /> {0} pogings oor}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skandeer</translation> <translation id="2570743873672969996">Laat loop tans <ph name="TEST_NAME" />-toets …</translation> +<translation id="2620436844016719705">Stelsel</translation> <translation id="2805756323405976993">Programme</translation> <translation id="2872961005593481000">Skakel af</translation> <translation id="3008341117444806826">HERLAAI</translation> <translation id="3009958530611748826">Kies 'n vouer om in te stoor</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Toets het misluk</translation> <translation id="3083667275341675831">Konnektiwiteitdiagnostiek</translation> <translation id="3091839911843451378">Misluk – Gestop</translation> +<translation id="3102119246920354026">Kas</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">My lêers</translation> <translation id="3199982728237701504">Dokumentvoerder (twee kante)</translation> <translation id="3246869037381808805">Druktake ouer as 1 dag sal verwyder word</translation> <translation id="3268178239013324452">Misluk – Deur is oop</translation> <translation id="3310640316857623290">DNS-traagheid is aansienlik bo toelaatbare drempel</translation> +<translation id="3328783797891415197">Toets loop tans</translation> <translation id="3369013195428705271">Is jy seker jy wil alle drukgeskiedenis uitvee? Jou aangaande druktake sal nie uitgevee word nie.</translation> <translation id="3456078764689556234">Het bladsy <ph name="PRINTED_PAGES" /> van <ph name="TOTAL_PAGES" /> gedruk.</translation> <translation id="3459509316159669723">Druk tans</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nuwe wagwoord</translation> <translation id="3865414814144988605">Resolusie</translation> <translation id="3941014780699102620">Kon nie gasheer bepaal nie</translation> +<translation id="3942420633017001071">Diagnostiese inligting</translation> <translation id="39823212440917567">Druktake ouer as <ph name="NUMBER_OF_DAYS" /> dae sal verwyder word</translation> <translation id="4003384961948020559">Misluk – Uitvoer is vol</translation> <translation id="4034824040120875894">Drukker</translation> <translation id="4131410914670010031">Swart en wit</translation> <translation id="4145784616224233563">HTTP-brandmuur</translation> +<translation id="4170700058716978431">MISLUK</translation> <translation id="4227825898293920515">Wagwoord verval oor <ph name="TIME" /></translation> <translation id="4238516577297848345">Geen druktake aan die gang nie</translation> <translation id="4297501883039923494">Gestop – onbekende fout</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Gestop</translation> <translation id="4808449224298348341">Gekanselleerde druktaak <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Kies vouer in Lêers-program …</translation> +<translation id="4848429997038228357">LOOP TANS</translation> <translation id="4890353053343094602">Kies onmiddellik 'n nuwe een</translation> <translation id="4917889632206600977">Gestop – papier is op</translation> <translation id="4921665434385737356">Het <ph name="RATE" /> gelaai binne <ph name="NUM_SECONDS" /> sekondes.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Laat loop</translation> +<translation id="500920857929044050">Stop toets</translation> +<translation id="5154917547274118687">Geheue</translation> <translation id="5168185087976003268">Batterygesondheid</translation> <translation id="520299634122159966">Geen skandeerders is beskikbaar nie</translation> <translation id="5212543919916444558">Ek kry niks op jou skerm waarmee ek kan help nie. Probeer die mikrofoon tik om my enigiets te vra.</translation> <translation id="5222676887888702881">Meld af</translation> +<translation id="5264277876637023664">Laat loop CPU-toets</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Laat Roetines weer loop</translation> <translation id="5317780077021120954">Berg</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Bestuur</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Kom meer te wete in die Hulpsentrum</translation> +<translation id="5635169860413004179">Sien verslag</translation> <translation id="5719918614880940190">Dit meet die CPU-gebruik en is 'n samevoeging van alle kerns</translation> +<translation id="5797428682393400134">SUKSES</translation> <translation id="5832805196449965646">Voeg persoon by</translation> <translation id="5895138241574237353">Herbegin</translation> +<translation id="5931523347251946569">Lêer nie gekry nie</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, weergawe <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Maak toe</translation> <translation id="6048107060512778456">Misluk – Papierknoop</translation> <translation id="6050189528197190982">Grysskaal</translation> <translation id="6058625436358447366">Voer jou ou en nuwe wagwoord in om dit te voltooi</translation> <translation id="6061772781719867950">Mislukte HTTP-versoeke</translation> +<translation id="6104112872696127344">Skandering is gekanselleer.</translation> <translation id="6106186594183574873">Voer jou ou wagwoord in om dit te voltooi</translation> <translation id="6108689792487843350">Kan nie deurgang bereik nie</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Voer jou nuwe wagwoord in om dit te voltooi</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Kom meer te wete</translation> <translation id="6191293864534840972">Misvormige naambedieners</translation> +<translation id="6232017090690406397">Battery</translation> <translation id="6325525973963619867">Misluk</translation> <translation id="636850387210749493">Onderneminginskrywing</translation> <translation id="649050271426829538">Gestop – papierknoop</translation> <translation id="6517239166834772319">Verken</translation> <translation id="6527081081771465939">Onbekende wi-fi-sekuriteitprotokol</translation> +<translation id="6532051501443766164">Versteek verslag</translation> <translation id="65587193855025101">Plat oppervlak</translation> <translation id="6564646048574748301">Misluk – Kon nie drukker bereik nie</translation> <translation id="6618744767048954150">Werk tans</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Vee uit</translation> <translation id="6704062477274546131">DNS-ontbinding</translation> <translation id="6747215703636344499">Gestop – uitvoer is vol</translation> +<translation id="6756731097889387912">Kon nie skandering kanselleer nie</translation> <translation id="6766275201586212568">Mislukte DNS-resolusies</translation> <translation id="6768237774506518020">Hoë DNS-resolusiemislukkingkoers</translation> <translation id="6839141349259399400">Kan jy nie aan skandeerders koppel nie?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Hoë HTTPS-traagheid</translation> <translation id="7658239707568436148">Kanselleer</translation> <translation id="7690294790491645610">Bevestig nuwe wagwoord</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" />-toets</translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Geskandeerde lêer is gestoor!</translation> <translation id="7928373994957558460">Wys lêerligging</translation> @@ -191,11 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Verstek</translation> <translation id="8845001906332463065">Kry hulp</translation> +<translation id="8881098542468797602">Toets was suksesvol</translation> <translation id="8910721771319628100">Versteknetwerk is bo traagheiddrempel</translation> <translation id="8919837981463578619">Misluk – Laai ontbreek</translation> <translation id="8928727111548978589">Misluk – Papier is op</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> pogings oor</translation> +<translation id="8970109610781093811">Laat loop weer</translation> <translation id="9088306295921699330">Huidige gebruik</translation> <translation id="910415269708673980">Herlaai kaartjie vir <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skandeer tans bladsy <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Ontsluit</translation> +<translation id="9149391708638971077">Laat loop geheuetoets</translation> +<translation id="982713511914535780">Laat loop ontlaaitoets</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb index 76057b1..2eaf8368 100644 --- a/chromeos/strings/chromeos_strings_am.xtb +++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ቅኝትን መጀመር አልተቻለም</translation> <translation id="1071587090247825784">ኬላ ተገኝቷል</translation> <translation id="1075811647922107217">የገጽ መጠን</translation> +<translation id="1124772482545689468">ተጠቃሚ</translation> <translation id="1175697296044146566">ይህ <ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> የሚተዳደር ነው።</translation> <translation id="1195447618553298278">ያልታወቀ ስህተት።</translation> <translation id="1204296502688602597">የዲኤንስ የሥርዓት ምላሽ ጊዜ</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> እኚህን ተጠቃሚ ያስተዳድራል ኣና በርቀት ቅንብሮችን ሊያስተዳድር እና የተጠቃሚ እንቅስቃሴን ሊቆጣጠር ይችላል።</translation> <translation id="150962533380566081">ልክ ያልኾነ PUK።</translation> <translation id="1510238584712386396">ማስጀመሪያ</translation> +<translation id="1621067168122174824">የባትሪ መሙላት ሙከራን አሂድ</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ምልልሶች)</translation> <translation id="1641857168437328880">ሰነድ መጋቢ (ባለአንድ ጎን)</translation> <translation id="1644574205037202324">ታሪክ</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">ደብዳቤ</translation> <translation id="1706391837335750954">የዲኤንኤስ መፍትሔ ሰጪ አለ</translation> <translation id="1743558184855585519">አንድ ጊዜ ገደቡ ላይ ሲደርስ ባትሪው እንዳለቀ ይቆጠራል</translation> +<translation id="1792647875738159689">መቃኘትን በመሰረዝ ላይ</translation> <translation id="1905710495812624430">የሚፈቀደው ከፍተኛ የሙከራዎች ብዛት ታልፏል።</translation> <translation id="1930797645656624981">የ Chrome OS ግቤት ዘዴ አገልግሎት</translation> <translation id="1947737735496445907">ታትሟል</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ሙከራዎች ቀርተዋል</translation> <translation id="2391082728065870591">የግብረመልስ ሪፖርት ላክ</translation> <translation id="2461822463642141190">የአሁኑ ጊዜ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ሙከራ ቀርቷል}one{<ph name="ERROR_MESSAGE" /> {0} ሙከራዎች ቀርተዋል}other{<ph name="ERROR_MESSAGE" /> {0} ሙከራዎች ቀርተዋል}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ቃኝ</translation> <translation id="2570743873672969996">የ<ph name="TEST_NAME" /> ሙከራን በማሄድ ላይ...</translation> +<translation id="2620436844016719705">ስርዓት</translation> <translation id="2805756323405976993">መተግበሪያዎች</translation> <translation id="2872961005593481000">ዝጋ</translation> <translation id="3008341117444806826">አድስ</translation> <translation id="3009958530611748826">የሚያስቀምጡበትን አቃፊ ይምረጡ</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> ሚአ</translation> +<translation id="3069085583900247081">ሙከራ አልተሳካም</translation> <translation id="3083667275341675831">የግንኙነት ምርመራዎች</translation> <translation id="3091839911843451378">አልተሳካም - ተቋርጧል</translation> +<translation id="3102119246920354026">መሸጎጫ</translation> +<translation id="3122464029669770682">ሲፒዩ</translation> <translation id="3188257591659621405">የእኔ ፋይሎች</translation> <translation id="3199982728237701504">ሰነድ መጋቢ (ባለሁለት ጎን)</translation> <translation id="3246869037381808805">ከ1 ቀን በላይ ዕድሜ ያላቸው የህትመት ሥራዎች ይወገዳሉ</translation> <translation id="3268178239013324452">አልተሳካም - በር ክፍት ነው</translation> <translation id="3310640316857623290">የዲኤንኤስ ስርዓተ ምላሽ ጊዜ ከሚፈቀደው ገደብ በጉልህ ይበልጣል</translation> +<translation id="3328783797891415197">ሙከራ በማሄድ ላይ</translation> <translation id="3369013195428705271">እርግጠኛ ነዎት ሁሉንም የህትመት ታሪክ ማጥፋት ይፈልጋሉ? በመካሄድ ላይ ያሉ የህትመት ስራዎችዎ አይጠፉም።</translation> <translation id="3456078764689556234"><ph name="PRINTED_PAGES" /> የታተመ ገጽ ከ <ph name="TOTAL_PAGES" /> ዉስጥ።</translation> <translation id="3459509316159669723">ማተም</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">አዲስ የይለፍ ቃል</translation> <translation id="3865414814144988605">የምስል ጥራት</translation> <translation id="3941014780699102620">ለአስተናጋጅ መፍትሔ መስጠት አልተሳካም</translation> +<translation id="3942420633017001071">ምርመራ</translation> <translation id="39823212440917567">ከ<ph name="NUMBER_OF_DAYS" /> ቀኖች በላይ ዕድሜ ያላቸው የህትመት ሥራዎች ይወገዳሉ</translation> <translation id="4003384961948020559">አልተሳካም - ውፅዓት ሞልቷል</translation> <translation id="4034824040120875894">አታሚ</translation> <translation id="4131410914670010031">ጥቁር እና ነጭ</translation> <translation id="4145784616224233563">የHTTP ኬላ</translation> +<translation id="4170700058716978431">አልተሳካም</translation> <translation id="4227825898293920515">የይለፍ ቃል በ <ph name="TIME" /> ውስጥ አገልግሎት ጊዜው ያበቃል</translation> <translation id="4238516577297848345">በሂደት ላይ ያሉ ምንም የህትመት ስራዎች የሉም</translation> <translation id="4297501883039923494">ቆሟል - ያልታወቀ ስህተት</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">ቆሟል</translation> <translation id="4808449224298348341">የተሰረዘ የሕትመት ሥራ <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">በፋይሎች መተግበሪያ ውስጥ አቃፊን ይምረጡ...</translation> +<translation id="4848429997038228357">በማሄድ ላይ</translation> <translation id="4890353053343094602">ወዲያውኑ አዲስ ይምረጡ</translation> <translation id="4917889632206600977">ቆሟል - ወረቀት አልቋል</translation> <translation id="4921665434385737356">በ<ph name="NUM_SECONDS" /> ሰከንዶች ውስጥ <ph name="RATE" /> ሞልቷል።</translation> <translation id="4932733599132424254">ቀን</translation> <translation id="4985509611418653372">አሂድ</translation> +<translation id="500920857929044050">ሙከራን አቁም</translation> +<translation id="5154917547274118687">ማህደረ ትውስታ</translation> <translation id="5168185087976003268">የባትሪ ጤንነት</translation> <translation id="520299634122159966">ምንም ቃኚዎች አይገኙም</translation> <translation id="5212543919916444558">እኔ ላግዝ የምችልበት ምንም ነገር በእርስዎ ማያ ገጽ ላይ አላገኘሁም። ማንኛውም ነገር እኔን ለመጠየቅ ማይክሮፎኑን መታ አድርገው ይሞክሩ።</translation> <translation id="5222676887888702881">ዘግተህ ውጣ</translation> +<translation id="5264277876637023664">የሲፒዩ ሙከራን አሂድ</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />፣ <ph name="PRINTER_NAME" />፣ <ph name="CREATION_TIME" />፣ <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">የዕለት ተዕለት ተግባራትን እንደገና ያሂዱ</translation> <translation id="5317780077021120954">አስቀምጥ</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">የተቀናበረ</translation> <translation id="5493614766091057239"><ph name="VERDICT" />፦ <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">በእገዛ ማዕከል ውስጥ የበለጠ ይረዱ</translation> +<translation id="5635169860413004179">ሪፖርትን ይመልከቱ</translation> <translation id="5719918614880940190">ይህ የሲፒዩ አጠቃቀምን ይለካል፣ እና የሁሉም ኮሮች ድምር ነው</translation> +<translation id="5797428682393400134">ተሳክቷል</translation> <translation id="5832805196449965646">ሰው አክል</translation> <translation id="5895138241574237353">እንደገና ጀምር</translation> +<translation id="5931523347251946569">ፋይል አልተገኘም</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />፣ ስሪት <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">ዝጋ</translation> <translation id="6048107060512778456">አልተሳካም - የወረቀት መታጨቅ</translation> <translation id="6050189528197190982">ግራጫማ ምጥጥን</translation> <translation id="6058625436358447366">ለማጠናቀቅ፣ የእርስዎን አሮጌ እና አዲስ የይለፍ ቃላት ያስገቡ</translation> <translation id="6061772781719867950">ያልተሳካ የHTTP ጥያቄ</translation> +<translation id="6104112872696127344">መቃኘት ተሰርዟል</translation> <translation id="6106186594183574873">ለማጠናቀቅ፣ የእርስዎን ይለፍ ቃል ያስገቡ</translation> <translation id="6108689792487843350">አግባቢ ፍኖት አይገኝም</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> ጊኸ / <ph name="MAX" /> ጊኸ</translation> <translation id="6146993107019042706">ለማጠናቀቅ፣ የእርስዎን አዲስ የይለፍ ቃል ያስገቡ</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">የበለጠ ለመረዳት</translation> <translation id="6191293864534840972">የተበላሹ የስም አገልጋዮች</translation> +<translation id="6232017090690406397">ባትሪ</translation> <translation id="6325525973963619867">አልተሳካም</translation> <translation id="636850387210749493">የድርጅት ምዝገባ</translation> <translation id="649050271426829538">ቆሟል - የወረቀት መታጨቅ</translation> <translation id="6517239166834772319">ያስሱ</translation> <translation id="6527081081771465939">ያልታወቀ የWiFi ደህንነት ፕሮቶኮል</translation> +<translation id="6532051501443766164">ሪፖርትን ደብቅ</translation> <translation id="65587193855025101">ጠፍጣፋ ወለል</translation> <translation id="6564646048574748301">አልተሳካም - አታሚ የማይደረስበት ነው</translation> <translation id="6618744767048954150">በማሄድ ላይ</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">አጽዳ</translation> <translation id="6704062477274546131">የዲኤንኤስ መፍትሔ</translation> <translation id="6747215703636344499">ቆሟል - ውፅዓት ሞልቷል</translation> +<translation id="6756731097889387912">መቃኘትን መሰረዝ አልተቻለም</translation> <translation id="6766275201586212568">ያልተሳኩ የዲኤንኤስ ጥራቶች</translation> <translation id="6768237774506518020">ከፍተኛ የዲኤንኤስ ጥራት አለመሳካት ብዛት</translation> <translation id="6839141349259399400">ከመቃኛዎች ጋር መገናኘት አልተቻለም?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">ከፍተኛ የHTTPS የስርዓተ ምላሽ ጊዜ</translation> <translation id="7658239707568436148">ይቅር</translation> <translation id="7690294790491645610">አዲስ የይለፍ ቃል ያረጋግጡ</translation> +<translation id="7732651821766520760">የ<ph name="TEST_NAME" /> ሙከራ</translation> <translation id="7805768142964895445">ሁኔታ</translation> <translation id="7855434858642800953">የተቃኘ ፋይል ተቀምጧል!</translation> <translation id="7928373994957558460">የፋይል ቦታን አሳይ</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">እንደወረደ</translation> <translation id="8845001906332463065">እገዛ ያግኙ</translation> +<translation id="8881098542468797602">ሙከራ ተሳክቷል</translation> <translation id="8910721771319628100">ነባሪ አውታረ መረብ ከስርዓተ ምላሽ ጊዜ ገደብ በላይ ነው</translation> <translation id="8919837981463578619">አልተሳካም - መሳቢያ ይጎድላል</translation> <translation id="8928727111548978589">አልተሳካም - ወረቀት አልቋል</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ቅንብሮች ቀርተዋል</translation> <translation id="8970109610781093811">እንደገና ያሂዱ</translation> <translation id="9088306295921699330">የአሁኑ አጠቃቀም</translation> <translation id="910415269708673980">የ<ph name="PRINCIPAL_NAME" /> ቲኬትን ያድሱ</translation> <translation id="9106415115617144481">ገጽ <ph name="PAGE_NUMBER" />ን በመቃኘት ላይ</translation> <translation id="9111102763498581341">ክፈት</translation> +<translation id="9149391708638971077">የማህደረ ትውስታ ሙከራን አሂድ</translation> +<translation id="982713511914535780">የባትሪ ኃይል የመጨረስ ሙከራን አሂድ</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb index f658102..51a8552a 100644 --- a/chromeos/strings/chromeos_strings_ar.xtb +++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">تعذَّر إجراء عملية المسح الضوئي.</translation> <translation id="1071587090247825784">تم العثور على جدار ناري.</translation> <translation id="1075811647922107217">حجم الصفحة</translation> +<translation id="1124772482545689468">المستخدم</translation> <translation id="1175697296044146566">تتم إدارة جهاز <ph name="DEVICE_TYPE" /> هذا من خلال <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">خطأ غير محدّد.</translation> <translation id="1204296502688602597">وقت استجابة نظام أسماء النطاقات</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">المحاولات المتبقية: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">إرسال تقرير بالتعليقات</translation> <translation id="2461822463642141190">الاستهلاك الحالي لطاقة البطارية</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />. محاولة واحدة ({0}) متبقية}zero{<ph name="ERROR_MESSAGE" />. {0} محاولة متبقية}two{<ph name="ERROR_MESSAGE" />. محاولتان ({0}) متبقيتان}few{<ph name="ERROR_MESSAGE" />. {0} محاولات متبقية}many{<ph name="ERROR_MESSAGE" />. {0} محاولة متبقية}other{<ph name="ERROR_MESSAGE" />. {0} محاولة متبقية}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">فحص</translation> <translation id="2570743873672969996">جارٍ تنفيذ اختبار <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">النظام</translation> <translation id="2805756323405976993">التطبيقات</translation> <translation id="2872961005593481000">إيقاف التشغيل</translation> <translation id="3008341117444806826">إعادة التحميل</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> ميلي أمبير</translation> <translation id="3083667275341675831">بيانات تشخيص الاتصال</translation> <translation id="3091839911843451378">تعذَّرت الطباعة - توقّفت الطابعة</translation> +<translation id="3102119246920354026">ذاكرة التخزين المؤقت</translation> +<translation id="3122464029669770682">وحدة المعالجة المركزية</translation> <translation id="3188257591659621405">ملفاتي</translation> <translation id="3199982728237701504">وحدة تغذية المستندات (وجهان)</translation> <translation id="3246869037381808805">ستتم إزالة طلبات الطباعة التي مرَّ عليها أكثر من يوم.</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">كلمة المرور الجديدة</translation> <translation id="3865414814144988605">درجة الدقة</translation> <translation id="3941014780699102620">تعذّرت مطابقة المضيف.</translation> +<translation id="3942420633017001071">بيانات التشخيص</translation> <translation id="39823212440917567">ستتم إزالة طلبات الطباعة التي مرَّ عليها أكثر من <ph name="NUMBER_OF_DAYS" /> يوم.</translation> <translation id="4003384961948020559">تعذّرت الطباعة - المخرجات ممتلئة</translation> <translation id="4034824040120875894">الطابعة</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">تم شحن <ph name="RATE" /> خلال <ph name="NUM_SECONDS" /> ثانية.</translation> <translation id="4932733599132424254">التاريخ</translation> <translation id="4985509611418653372">تشغيل</translation> +<translation id="5154917547274118687">الذاكرة</translation> <translation id="5168185087976003268">حالة البطارية</translation> <translation id="520299634122159966">لا تتوفّر أجهزة مسح ضوئي.</translation> <translation id="5212543919916444558">يتعذَّر عليَّ العثور على شيء مفيد في هذه الشاشة. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">مزيد من المعلومات</translation> <translation id="6191293864534840972">خوادم الأسماء غير صالحة.</translation> +<translation id="6232017090690406397">البطارية</translation> <translation id="6325525973963619867">إخفاق</translation> <translation id="636850387210749493">التسجيل في المؤسسة</translation> <translation id="649050271426829538">توقّفت الطابعة - الورق مكدّس</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">وقت استجابة الشبكة التلقائية أعلى من الحدّ الأقصى.</translation> <translation id="8919837981463578619">تعذَّرت الطباعة - دُرج الورق غير متوفّر</translation> <translation id="8928727111548978589">تعذَّرت الطباعة - نفد الورق</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> محاولة متبقية</translation> <translation id="8970109610781093811">إعادة التشغيل مرة أخرى</translation> <translation id="9088306295921699330">الاستخدام الحالي</translation> <translation id="910415269708673980">تحديث تذكرة من أجل <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb index 2f6c310..f22dd70 100644 --- a/chromeos/strings/chromeos_strings_as.xtb +++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">স্কেনিং আৰম্ভ কৰিব পৰা নগ’ল</translation> <translation id="1071587090247825784">ফায়াৰৱাল চিনাক্ত কৰা হৈছে</translation> <translation id="1075811647922107217">পৃষ্ঠাৰ আকাৰ</translation> +<translation id="1124772482545689468">ব্যৱহাৰকাৰী</translation> <translation id="1175697296044146566"><ph name="MANAGER" />এ এই <ph name="DEVICE_TYPE" />টো পৰিচালনা কৰে।</translation> <translation id="1195447618553298278">অজ্ঞাত আসোঁৱাহ।</translation> <translation id="1204296502688602597">DNS বিলম্বতা</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> টা প্ৰয়াস বাকী আছে</translation> <translation id="2391082728065870591">মতামত বিষয়ক ৰিপ’ৰ্টটো পঠিয়াওক</translation> <translation id="2461822463642141190">বৰ্তমান</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} টা প্ৰয়াস বাকী আছে}one{<ph name="ERROR_MESSAGE" /> {0} টা প্ৰয়াস বাকী আছে}other{<ph name="ERROR_MESSAGE" /> {0} টা প্ৰয়াস বাকী আছে}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">স্কেন কৰক</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> পৰীক্ষা চলাই থকা হৈছে...</translation> +<translation id="2620436844016719705">ছিষ্টেম</translation> <translation id="2805756323405976993">এপ্</translation> <translation id="2872961005593481000">শ্বাট ডাউন কৰক</translation> <translation id="3008341117444806826">ৰিফ্ৰেশ্ব কৰক</translation> @@ -53,6 +54,7 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />এমএ</translation> <translation id="3083667275341675831">সংযোগ সম্পৰ্কীয় ডায়গন’ষ্টিক্স</translation> <translation id="3091839911843451378">বিফল হৈছে - বন্ধ হৈছে</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">মোৰ ফাইলসমূহ</translation> <translation id="3199982728237701504">নথি ফীডাৰ (দুফাল থকা)</translation> <translation id="3246869037381808805">১ দিনতকৈ পুৰণি প্ৰিণ্ট কাৰ্যসমূহ আঁতৰোৱা হ’ব</translation> @@ -71,6 +73,7 @@ <translation id="3838338534323494292">নতুন পাছৱৰ্ড</translation> <translation id="3865414814144988605">ৰিজ'লিউশ্বন</translation> <translation id="3941014780699102620">হ’ষ্ট সম্পৰ্কীয় সমস্যা সমাধান কৰাত বিফল হ'ল</translation> +<translation id="3942420633017001071">ডায়েগনষ্টিক্স</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> দিনতকৈ পুৰণি প্ৰিণ্টৰ কামসমূহ আঁতৰোৱা হ’ব</translation> <translation id="4003384961948020559">বিফল হৈছে - আউটপুট ভৰ্তি হৈ গৈছে</translation> <translation id="4034824040120875894">প্ৰিণ্টাৰ</translation> @@ -137,6 +140,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">অধিক জানক</translation> <translation id="6191293864534840972">ড’মেইনৰ নাম থকা ছাৰ্ভাৰসমূহ বিকৃত</translation> +<translation id="6232017090690406397">বেটাৰী</translation> <translation id="6325525973963619867">বিফল হৈছে</translation> <translation id="636850387210749493">এন্টাৰপ্ৰাইজৰ পঞ্জীয়ন</translation> <translation id="649050271426829538">বন্ধ হৈছে - কাগজ ঠাহ খাই গৈছে</translation> @@ -194,6 +198,7 @@ <translation id="8910721771319628100">ডিফ’ল্ট নেটৱৰ্ক বিলম্বতাৰ সীমাৰ ওপৰত আছে</translation> <translation id="8919837981463578619">বিফল হৈছে - ট্ৰে’ উপলব্ধ নহয়</translation> <translation id="8928727111548978589">বিফল হৈছে - কাগজ শেষ হৈছে</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> টা প্ৰয়াস বাকী আছে</translation> <translation id="9088306295921699330">এতিয়ালৈকে কৰা ব্যৱহাৰৰ পৰিমাণ</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" />ৰ টিকেট ৰিফ্ৰেশ্ব কৰক</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" /> নম্বৰ পৃষ্ঠাখন স্কেন কৰি থকা হৈছে</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb index 9e779fd..bcc07ea6 100644 --- a/chromeos/strings/chromeos_strings_az.xtb +++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skanlamanı başlatmaq mümkün olmadı</translation> <translation id="1071587090247825784">Qoruyucu divar aşkarlandı</translation> <translation id="1075811647922107217">Səhifə ölçüsü</translation> +<translation id="1124772482545689468">İstifadəçi</translation> <translation id="1175697296044146566">Bu <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> tərəfindən idarə olunur.</translation> <translation id="1195447618553298278">Naməlum xəta.</translation> <translation id="1204296502688602597">DNS Gecikməsi</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> bu istifadəçini idarə edir və ayarları məsafədən idarə edə və istifadəçinin fəaliyyətini izləyə bilər.</translation> <translation id="150962533380566081">Yanlış PUK.</translation> <translation id="1510238584712386396">Başladıcı</translation> +<translation id="1621067168122174824">Şarj testini icra edin</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> mövzu)</translation> <translation id="1641857168437328880">Sənəd Bəsləyici (Bir tərəfli)</translation> <translation id="1644574205037202324">Tarixçə</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS Həlledicisi Mövcuddur</translation> <translation id="1743558184855585519">Batareya limitə çatdıqda tükədilmiş hesab edilir</translation> +<translation id="1792647875738159689">Skanlama ləğv edilir</translation> <translation id="1905710495812624430">Maksimum icazə verilən cəhdlər bitdi</translation> <translation id="1930797645656624981">Chrome OS Daxiletmə Metodu Xidməti</translation> <translation id="1947737735496445907">Çap edilib</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> cəhd qalıb</translation> <translation id="2391082728065870591">Rəy Hesabatını Göndərin</translation> <translation id="2461822463642141190">Cari</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} cəhd qalıb}other{<ph name="ERROR_MESSAGE" /> {0} cəhd qalıb}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skan edin</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> testi icra edilir...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Tətbiq</translation> <translation id="2872961005593481000">Qapadın</translation> <translation id="3008341117444806826">YENİLƏYİN</translation> <translation id="3009958530611748826">Yadda saxlamaq üçün qovluq seçin</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">Test uğursuz oldu</translation> <translation id="3083667275341675831">Bağlantı Diaqnostikası</translation> <translation id="3091839911843451378">Alınmadı - Dayandırılıb</translation> +<translation id="3102119246920354026">Keş</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Fayllarım</translation> <translation id="3199982728237701504">Sənəd Bəsləyici (İki tərəfli)</translation> <translation id="3246869037381808805">1 gündən köhnə çap işləri silinəcək</translation> <translation id="3268178239013324452">Alınmadı - Qapı açıqdır</translation> <translation id="3310640316857623290">DNS gecikməsi icazə verilən həddən xeyli yuxarıdır</translation> +<translation id="3328783797891415197">Test icra edilir</translation> <translation id="3369013195428705271">Bütün çap tarixçəsini silmək istədiyinizə əminsiniz? Davam edən çap işləriniz silinməyəcək.</translation> <translation id="3456078764689556234"><ph name="PRINTED_PAGES" />/<ph name="TOTAL_PAGES" /> səhifə çap edilib.</translation> <translation id="3459509316159669723">Çap edilir</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Yeni parol</translation> <translation id="3865414814144988605">Dəqiqlik</translation> <translation id="3941014780699102620">Hostu həll etmək alınmadı</translation> +<translation id="3942420633017001071">Diaqnostika</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> gündən köhnə çap işləri silinəcək</translation> <translation id="4003384961948020559">Alınmadı - Çap xidməti doludur</translation> <translation id="4034824040120875894">Printer</translation> <translation id="4131410914670010031">Ağ və qara</translation> <translation id="4145784616224233563">HTTP Qoruyucu divarı</translation> +<translation id="4170700058716978431">UĞURSUZ OLDU</translation> <translation id="4227825898293920515">Parolun vaxtı <ph name="TIME" /> ərzində başa çatır</translation> <translation id="4238516577297848345">Hazırda davam edən çap işləri yoxdur</translation> <translation id="4297501883039923494">Dayanıb - Naməlum xəta</translation> @@ -100,15 +109,19 @@ <translation id="4773299976671772492">Durmuş</translation> <translation id="4808449224298348341"><ph name="DOCUMENT_TITLE" /> çap işi ləğv edilib</translation> <translation id="4832079907277790330">Fayllar tətbiqində qovluq seçin...</translation> +<translation id="4848429997038228357">İCRA EDİLİR</translation> <translation id="4890353053343094602">Dərhal yenisini seçin</translation> <translation id="4917889632206600977">Dayanıb - Kağız yoxdur</translation> <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> saniyədə <ph name="RATE" /> şarj edilib.</translation> <translation id="4932733599132424254">Tarix</translation> <translation id="4985509611418653372">İşə salın</translation> +<translation id="500920857929044050">Testi dayandırın</translation> +<translation id="5154917547274118687">Yaddaş</translation> <translation id="5168185087976003268">Enerji statusu</translation> <translation id="520299634122159966">Əlçatan skaner yoxdur</translation> <translation id="5212543919916444558">Ekranınızda kömək edə biləcəyim heç nə tapmadım. Məndən hər hansı bir şey soruşmaq üçün mikrofona klikləyin.</translation> <translation id="5222676887888702881">Hesabdan çıxın</translation> +<translation id="5264277876637023664">CPU testi icra edin</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Rejimləri yenidən işə salın</translation> <translation id="5317780077021120954">Yadda saxlayın</translation> @@ -121,26 +134,33 @@ <translation id="54609108002486618">İdarə edilən</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Yardım mərkəzində ətraflı məlumat əldə edin</translation> +<translation id="5635169860413004179">Hesabata baxın</translation> <translation id="5719918614880940190">Bu, CPU istifadəsini ölçür və bütün nüvələrin birləşməsidir</translation> +<translation id="5797428682393400134">UĞURLU OLDU</translation> <translation id="5832805196449965646">Şəxs əlavə edin</translation> <translation id="5895138241574237353">Yenidən başladın</translation> +<translation id="5931523347251946569">Fayl tapılmadı</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versiya <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Qapat</translation> <translation id="6048107060512778456">Alınmadı - Kağız ilişib</translation> <translation id="6050189528197190982">Boz çalar</translation> <translation id="6058625436358447366">Tamamlamaq üçün yeni və köhnə parolları yazın</translation> <translation id="6061772781719867950">HTTP sorğuları alınmadı</translation> +<translation id="6104112872696127344">Skanlama ləğv edilib</translation> <translation id="6106186594183574873">Tamamlamaq üçün köhnə parolu yazın</translation> <translation id="6108689792487843350">Giriş ilə əlaqə saxlamaq olmur</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">Tamamlamaq üçün yeni parolu daxil edin</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Ətraflı öyrənin</translation> <translation id="6191293864534840972">Yanlış ad serverləri</translation> +<translation id="6232017090690406397">Batareya</translation> <translation id="6325525973963619867">Alınmadı</translation> <translation id="636850387210749493">Sahibkarlıq qeydiyyatı</translation> <translation id="649050271426829538">Dayanıb - Kağız ilişib</translation> <translation id="6517239166834772319">Araşdırın</translation> <translation id="6527081081771465939">Naməlum Wi-Fi güvənlik protokolu</translation> +<translation id="6532051501443766164">Hesabatı gizlədin</translation> <translation id="65587193855025101">Yastı</translation> <translation id="6564646048574748301">Alınmadı - Printer əlçatan deyil</translation> <translation id="6618744767048954150">İcra olunur</translation> @@ -148,6 +168,7 @@ <translation id="6643016212128521049">Silin</translation> <translation id="6704062477274546131">DNS Həlli</translation> <translation id="6747215703636344499">Dayanıb - Çıxış doludur</translation> +<translation id="6756731097889387912">Skanlamanı ləğv etmək mümkün olmadı</translation> <translation id="6766275201586212568">DNS həlləri alınmadı</translation> <translation id="6768237774506518020">DNS həllinin alınmama faizi yüksəkdir</translation> <translation id="6839141349259399400">Skanerlərə qoşula bilmirsiniz?</translation> @@ -163,6 +184,7 @@ <translation id="7648838807254605802">Yüksək HTTPS gecikməsi</translation> <translation id="7658239707568436148">Ləğv edin</translation> <translation id="7690294790491645610">Yeni parolu təsdiq edin</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> Test</translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Skanlanan fayl saxlandı!</translation> <translation id="7928373994957558460">Fayl məkanını göstərin</translation> @@ -190,11 +212,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Defolt</translation> <translation id="8845001906332463065">Yardım alın</translation> +<translation id="8881098542468797602">Test uğurlu oldu</translation> <translation id="8910721771319628100">Defolt şəbəkə gecikmə həddindən yuxarıdır</translation> <translation id="8919837981463578619">Alınmadı - Altlıq yoxdur</translation> <translation id="8928727111548978589">Alınmadı - Kağız yoxdur</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> cəhd qalıb</translation> +<translation id="8970109610781093811">Yenidən icra edin</translation> <translation id="9088306295921699330">Cari istifadə</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> üçün bileti yeniləyin</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" /> saylı səhifə skanlanır</translation> <translation id="9111102763498581341">Kiliddən çıxarın</translation> +<translation id="9149391708638971077">Yaddaş Testi icra edin</translation> +<translation id="982713511914535780">Deşarj testi icra edin</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb index 2748446..2723286 100644 --- a/chromeos/strings/chromeos_strings_be.xtb +++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Не ўдалося запусціць сканіраванне</translation> <translation id="1071587090247825784">Выяўлены брандмаўар</translation> <translation id="1075811647922107217">Памер старонкі</translation> +<translation id="1124772482545689468">Карыстальнік</translation> <translation id="1175697296044146566">Гэтай прыладай <ph name="DEVICE_TYPE" /> кіруе <ph name="MANAGER" /></translation> <translation id="1195447618553298278">Невядомая памылка.</translation> <translation id="1204296502688602597">Затрымка DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Засталося спроб: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Адправіць справаздачу з водгукам</translation> <translation id="2461822463642141190">Цяпер</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Засталася {0} спроба}one{<ph name="ERROR_MESSAGE" /> Засталася {0} спроба}few{<ph name="ERROR_MESSAGE" /> Засталося {0} спробы}many{<ph name="ERROR_MESSAGE" /> Засталося {0} спроб}other{<ph name="ERROR_MESSAGE" /> Засталося {0} спробы}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Пошук</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> праходзіць праверку...</translation> +<translation id="2620436844016719705">Сістэма</translation> <translation id="2805756323405976993">Праграмы</translation> <translation id="2872961005593481000">Завяршыць працу</translation> <translation id="3008341117444806826">АБНАВІЦЬ</translation> @@ -53,6 +54,7 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> мА</translation> <translation id="3083667275341675831">Дыягностыка падключэння</translation> <translation id="3091839911843451378">Збой: работа спынена</translation> +<translation id="3122464029669770682">Працэсар</translation> <translation id="3188257591659621405">Мае файлы</translation> <translation id="3199982728237701504">Прылада для падачы дакументаў (абодвума бакамі)</translation> <translation id="3246869037381808805">Заданні друку, старэйшыя за 1 дзень, будуць выдалены</translation> @@ -71,6 +73,7 @@ <translation id="3838338534323494292">Новы пароль</translation> <translation id="3865414814144988605">Раздзяляльнасць</translation> <translation id="3941014780699102620">Не ўдалося супаставіць хост</translation> +<translation id="3942420633017001071">Дыягностыка</translation> <translation id="39823212440917567">Заданні друку, старэйшыя за <ph name="NUMBER_OF_DAYS" /> сут, будуць выдалены</translation> <translation id="4003384961948020559">Збой: выхадны латок запоўнены</translation> <translation id="4034824040120875894">Прынтар</translation> @@ -137,6 +140,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Даведацца больш</translation> <translation id="6191293864534840972">Серверы даменных імён маюць няправільны фармат</translation> +<translation id="6232017090690406397">Акумулятар</translation> <translation id="6325525973963619867">Збой</translation> <translation id="636850387210749493">Рэгістрацыя для арганізацый</translation> <translation id="649050271426829538">Спынена: захрасла папера</translation> @@ -194,6 +198,7 @@ <translation id="8910721771319628100">Затрымка ў стандартнай сетцы перавышае парогавае значэнне</translation> <translation id="8919837981463578619">Збой: няма латка</translation> <translation id="8928727111548978589">Збой: скончылася папера</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Засталося спроб: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="9088306295921699330">Бягучае выкарыстанне</translation> <translation id="910415269708673980">Абнавіце білет для <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Сканіруецца старонка <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb index e35c46ce..a72c684f 100644 --- a/chromeos/strings/chromeos_strings_bg.xtb +++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Сканирането не бе стартирано</translation> <translation id="1071587090247825784">Установена е защитна стена</translation> <translation id="1075811647922107217">Размер на страницата</translation> +<translation id="1124772482545689468">Потребител</translation> <translation id="1175697296044146566">Това устройство <ph name="DEVICE_TYPE" /> се управлява от <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Неизвестна грешка.</translation> <translation id="1204296502688602597">Забавяне на DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> управлява този потребител и може отдалечено да контролира настройките и да наблюдава потребителската активност.</translation> <translation id="150962533380566081">Невалиден PUK код.</translation> <translation id="1510238584712386396">Стартов панел</translation> +<translation id="1621067168122174824">Стартиране на тест на зареждането</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> нишки)</translation> <translation id="1641857168437328880">Подавач на документи (едностранно)</translation> <translation id="1644574205037202324">История</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Налице е DNS резолвер</translation> <translation id="1743558184855585519">Батерията се смята за изразходвана, когато достигне лимита</translation> +<translation id="1792647875738159689">Сканирането се отменя</translation> <translation id="1905710495812624430">Максималният брой опити е надвишен.</translation> <translation id="1930797645656624981">Услуга за метод на въвеждане в Chrome OS</translation> <translation id="1947737735496445907">Отпечатано</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Остават <ph name="ATTEMPTS_LEFT" /> опита</translation> <translation id="2391082728065870591">Изпращане на сигнал с отзиви</translation> <translation id="2461822463642141190">Ток</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Остава {0} опит}other{<ph name="ERROR_MESSAGE" /> Остават {0} опита}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Сканиране</translation> <translation id="2570743873672969996">Изпълняван тест: <ph name="TEST_NAME" /></translation> +<translation id="2620436844016719705">Система</translation> <translation id="2805756323405976993">Приложения</translation> <translation id="2872961005593481000">Изключване</translation> <translation id="3008341117444806826">ОПРЕСНЯВАНЕ</translation> <translation id="3009958530611748826">Изберете папка, в която да запазите</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Тестването не бе успешно</translation> <translation id="3083667275341675831">Диагностика на свързаността</translation> <translation id="3091839911843451378">Неуспешно – отпечатването спря</translation> +<translation id="3102119246920354026">Кеш</translation> +<translation id="3122464029669770682">Процесор</translation> <translation id="3188257591659621405">Моите файлове</translation> <translation id="3199982728237701504">Подавач на документи (двустранно)</translation> <translation id="3246869037381808805">Заданията за отпечатване, по-стари от 1 ден, ще бъдат премахнати</translation> <translation id="3268178239013324452">Неуспешно – вратичката е отворена</translation> <translation id="3310640316857623290">Забавянето на DNS е значително над допустимия праг</translation> +<translation id="3328783797891415197">Тестът се изпълнява</translation> <translation id="3369013195428705271">Наистина ли искате да изчистите цялата история на отпечатването? Текущите задания за печат няма да бъдат изтрити.</translation> <translation id="3456078764689556234">Отпечатана е страница <ph name="PRINTED_PAGES" /> от <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Отпечатване</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Нова парола</translation> <translation id="3865414814144988605">Разделителна способност</translation> <translation id="3941014780699102620">Името на хоста не бе преобразувано</translation> +<translation id="3942420633017001071">Диагностика</translation> <translation id="39823212440917567">Заданията за отпечатване, по-стари от <ph name="NUMBER_OF_DAYS" /> дни, ще бъдат премахнати</translation> <translation id="4003384961948020559">Неуспешно – изходният контейнер е пълен</translation> <translation id="4034824040120875894">Принтер</translation> <translation id="4131410914670010031">Черно-бяло</translation> <translation id="4145784616224233563">Защитна стена за HTTP</translation> +<translation id="4170700058716978431">НЕУСПЕХ</translation> <translation id="4227825898293920515">Паролата изтича след <ph name="TIME" /></translation> <translation id="4238516577297848345">Няма активни задания за отпечатване</translation> <translation id="4297501883039923494">Спряло – неизвестна грешка</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Спряно</translation> <translation id="4808449224298348341">Заданието за отпечатване на <ph name="DOCUMENT_TITLE" /> е анулирано</translation> <translation id="4832079907277790330">Избиране на папка в приложението Файлове…</translation> +<translation id="4848429997038228357">ИЗПЪЛНЯВА СЕ</translation> <translation id="4890353053343094602">Изберете нова незабавно</translation> <translation id="4917889632206600977">Спряло – няма хартия</translation> <translation id="4921665434385737356">За <ph name="NUM_SECONDS" /> секунди се заредиха <ph name="RATE" />.</translation> <translation id="4932733599132424254">Дата</translation> <translation id="4985509611418653372">Стартиране</translation> +<translation id="500920857929044050">Спиране на теста</translation> +<translation id="5154917547274118687">Памет</translation> <translation id="5168185087976003268">Състояние на батерията</translation> <translation id="520299634122159966">Няма налични скенери</translation> <translation id="5212543919916444558">На екрана ви не намирам нищо, за което да мога да ви помогна. Докоснете иконата на микрофон, за да ме попитате каквото и да е.</translation> <translation id="5222676887888702881">Изход</translation> +<translation id="5264277876637023664">Тестване на процесора</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Повторна диагностика</translation> <translation id="5317780077021120954">Запазване</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Управляван</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Научете повече в Помощния център</translation> +<translation id="5635169860413004179">Преглед на отчета</translation> <translation id="5719918614880940190">Това измерва използването на процесора и е обща стойност за всички ядра</translation> +<translation id="5797428682393400134">УСПЕХ</translation> <translation id="5832805196449965646">Добавяне на човек</translation> <translation id="5895138241574237353">Рестартиране</translation> +<translation id="5931523347251946569">Файлът не бе намерен</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, версия <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Затваряне</translation> <translation id="6048107060512778456">Неуспешно – заседнала хартия</translation> <translation id="6050189528197190982">Сива скала</translation> <translation id="6058625436358447366">За да завършите процеса, въведете старата и новата си парола</translation> <translation id="6061772781719867950">Неуспешни HTTP заявки</translation> +<translation id="6104112872696127344">Сканирането бе отменено</translation> <translation id="6106186594183574873">За да завършите процеса, въведете старата си парола</translation> <translation id="6108689792487843350">Шлюзът е недостъпен</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">За да завършите процеса, въведете новата си парола</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Научете повече</translation> <translation id="6191293864534840972">Неправилно образувани сървъри за имена</translation> +<translation id="6232017090690406397">Батерия</translation> <translation id="6325525973963619867">Неуспешно</translation> <translation id="636850387210749493">Корпоративно записване</translation> <translation id="649050271426829538">Спряло – заседнала хартия</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Неизвестен протокол за сигурност на Wi-Fi</translation> +<translation id="6532051501443766164">Скриване на отчета</translation> <translation id="65587193855025101">Плосък скенер</translation> <translation id="6564646048574748301">Неуспешно – няма връзка с принтера</translation> <translation id="6618744767048954150">В ход</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Изчистване</translation> <translation id="6704062477274546131">Преобразуване от DNS</translation> <translation id="6747215703636344499">Спряло – изходният контейнер е пълен</translation> +<translation id="6756731097889387912">Сканирането не бе отменено</translation> <translation id="6766275201586212568">Неуспешни преобразувания от DNS</translation> <translation id="6768237774506518020">Голям процент неуспехи при преобразуването от DNS</translation> <translation id="6839141349259399400">Не можете да свържете скенерите?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Голямо забавяне на HTTPS</translation> <translation id="7658239707568436148">Отказ</translation> <translation id="7690294790491645610">Потвърдете новата парола</translation> +<translation id="7732651821766520760">Тест: <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Състояние</translation> <translation id="7855434858642800953">Сканираният файл е запазен!</translation> <translation id="7928373994957558460">Показване на местоположението на файла</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">По подразбиране</translation> <translation id="8845001906332463065">Получете помощ</translation> +<translation id="8881098542468797602">Тестът бе успешен</translation> <translation id="8910721771319628100">Забавянето на основната мрежа е над прага</translation> <translation id="8919837981463578619">Неуспешно – липсваща тава</translation> <translation id="8928727111548978589">Неуспешно – няма хартия</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Оставащи опити: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Повторно изпълняване</translation> <translation id="9088306295921699330">Текущо използване</translation> <translation id="910415269708673980">Опресняване на пропуска за <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Сканира се страница <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Отключване</translation> +<translation id="9149391708638971077">Тестване на паметта</translation> +<translation id="982713511914535780">Тестване на разреждането</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb index bc25dd3..44ed08a 100644 --- a/chromeos/strings/chromeos_strings_bn.xtb +++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">স্ক্যান শুরু করা যায়নি</translation> <translation id="1071587090247825784">ফায়ারওয়াল শনাক্ত করা হয়েছে</translation> <translation id="1075811647922107217">পৃষ্ঠার সাইজ</translation> +<translation id="1124772482545689468">ব্যবহারকারী</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> এই <ph name="DEVICE_TYPE" /> ম্যানেজ করে।</translation> <translation id="1195447618553298278">অজানা ত্রুটি৷</translation> <translation id="1204296502688602597">ডিএনএস লেটেন্সি</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">আর <ph name="ATTEMPTS_LEFT" /> বার চেষ্টা করতে পারবেন</translation> <translation id="2391082728065870591">ফিডব্যাক রিপোর্ট পাঠান</translation> <translation id="2461822463642141190">বর্তমান</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> আর {0} বার চেষ্টা করতে পারবেন}one{<ph name="ERROR_MESSAGE" /> আর {0} বার চেষ্টা করতে পারবেন}other{<ph name="ERROR_MESSAGE" /> আর {0} বার চেষ্টা করতে পারবেন}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">স্ক্যান করুন</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> টেস্ট চলছে...</translation> +<translation id="2620436844016719705">সিস্টেম</translation> <translation id="2805756323405976993">অ্যাপ্স</translation> <translation id="2872961005593481000">বন্ধ করুন</translation> <translation id="3008341117444806826">রিফ্রেশ করুন</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">কানেক্টিভিটি ডায়াগনস্টিকস</translation> <translation id="3091839911843451378">প্রিন্ট করা যায়নি - প্রিন্টার বন্ধ হয়ে গেছে</translation> +<translation id="3102119246920354026">ক্যাশে</translation> +<translation id="3122464029669770682">সিপিইউ</translation> <translation id="3188257591659621405">আমার ফাইল</translation> <translation id="3199982728237701504">ডকুমেন্ট ফিডার (দুই পিঠের)</translation> <translation id="3246869037381808805">১ দিনের বেশি পুরনো প্রিন্ট জব সরিয়ে দেওয়া হবে</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">নতুন পাসওয়ার্ড</translation> <translation id="3865414814144988605">রেজোলিউশন</translation> <translation id="3941014780699102620">হোস্ট নেম যাচাই করা যায়নি</translation> +<translation id="3942420633017001071">ডায়গনিস্টিক</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> দিনের বেশি পুরনো প্রিন্ট জব সরিয়ে দেওয়া হবে</translation> <translation id="4003384961948020559">প্রিন্ট করা যায়নি - আউটপুট বিন ভর্তি হয়ে গেছে</translation> <translation id="4034824040120875894">প্রিন্টার</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> সেকেন্ডে <ph name="RATE" /> চার্জ হয়েছে।</translation> <translation id="4932733599132424254">তারিখ</translation> <translation id="4985509611418653372">চালান</translation> +<translation id="5154917547274118687">স্মৃতি</translation> <translation id="5168185087976003268">ব্যাটারির স্বাস্থ্য</translation> <translation id="520299634122159966">স্ক্যানার উপলভ্য নেই</translation> <translation id="5212543919916444558">আপনাকে সাহায্য করতে পারি এমন কিছুই আপনার স্ক্রিনে আমি খুঁজে পাইনি। আমাকে কিছু জিজ্ঞাসা করতে মাইকে ট্যাপ করুন।</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">আরও জানুন</translation> <translation id="6191293864534840972">ডোমেন নেম সার্ভারের ফর্ম্যাট ঠিক নেই</translation> +<translation id="6232017090690406397">ব্যাটারি: %</translation> <translation id="6325525973963619867">ব্যর্থ</translation> <translation id="636850387210749493">এন্টারপ্রাইজ নথিভুক্তিকরণ</translation> <translation id="649050271426829538">বন্ধ হয়ে গেছে - প্রিন্টারে কাগজ আটকে গেছে</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">নেটওয়ার্ক লেটেন্সির যে ঊর্ধসীমা রয়েছে, তার চেয়ে ডিফল্ট নেটওয়ার্ক গেটওয়ের লেটেন্সি বেশি</translation> <translation id="8919837981463578619">প্রিন্ট করা যায়নি - ট্রে পাওয়া যাচ্ছে না</translation> <translation id="8928727111548978589">প্রিন্ট করা যায়নি - কাগজ শেষ হয়ে গেছে</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> আর <ph name="ATTEMPTS_LEFT" /> বার চেষ্টা করতে পারবেন</translation> <translation id="8970109610781093811">আবার চালান</translation> <translation id="9088306295921699330">বর্তমান ব্যবহার</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" />-এর টিকিট রিফ্রেশ করুন</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb index f88e1eb..5adc2023f 100644 --- a/chromeos/strings/chromeos_strings_bs.xtb +++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Pokretanje skeniranja nije uspjelo</translation> <translation id="1071587090247825784">Otkriven je zaštitni zid</translation> <translation id="1075811647922107217">Veličina stranice</translation> +<translation id="1124772482545689468">Korisnik</translation> <translation id="1175697296044146566">Ovim uređajem <ph name="DEVICE_TYPE" /> upravlja <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Nepoznata greška.</translation> <translation id="1204296502688602597">Latentnost DNS-a</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> upravlja ovim korisnikom i može udaljeno upravljati postavkama i pratiti aktivnost korisnika.</translation> <translation id="150962533380566081">Nevažeći PUK.</translation> <translation id="1510238584712386396">Pokretač</translation> +<translation id="1621067168122174824">Pokreni test napunjenosti</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (broj nizova: <ph name="THREAD_COUNT" />)</translation> <translation id="1641857168437328880">Ulagač za dokumente (jednostrano skeniranje)</translation> <translation id="1644574205037202324">Historija</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS razrješivač je prisutan</translation> <translation id="1743558184855585519">Smatra se da je baterija potrošena kada se dostigne ograničenje</translation> +<translation id="1792647875738159689">Otkazivanje skeniranja</translation> <translation id="1905710495812624430">Prekoračen je maksimalan broj dozvoljenih pokušaja.</translation> <translation id="1930797645656624981">Usluga načina unosa Chrome OS-a</translation> <translation id="1947737735496445907">Odštampano</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Broj preostalih pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Pošalji izvještaj o povratnim informacijama</translation> <translation id="2461822463642141190">Trenutno</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostao je još {0} pokušaj}one{<ph name="ERROR_MESSAGE" /> Preostao je još {0} pokušaj}few{<ph name="ERROR_MESSAGE" /> Preostala su još {0} pokušaja}other{<ph name="ERROR_MESSAGE" /> Preostalo je još {0} pokušaja}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skeniraj</translation> <translation id="2570743873672969996">Pokretanje testa <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2872961005593481000">Isključi</translation> <translation id="3008341117444806826">OSVJEŽI</translation> <translation id="3009958530611748826">Odaberite folder za pohranjivanje</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Test nije uspio</translation> <translation id="3083667275341675831">Dijagnostika povezivosti</translation> <translation id="3091839911843451378">Nije uspjelo – zaustavljeno</translation> +<translation id="3102119246920354026">Predmemorija</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Moji fajlovi</translation> <translation id="3199982728237701504">Ulagač za dokumente (dvostrano skeniranje)</translation> <translation id="3246869037381808805">Zadaci za štampanje stariji od 1 dana će se ukloniti</translation> <translation id="3268178239013324452">Nije uspjelo – poklopac je otvoren</translation> <translation id="3310640316857623290">Latentnost DNS-a je znatno iznad dozvoljenog praga</translation> +<translation id="3328783797891415197">Test se izvodi</translation> <translation id="3369013195428705271">Jeste li sigurni da želite obrisati svu historiju štampanja? Vaši trenutni zadaci štampanja se neće izbrisati.</translation> <translation id="3456078764689556234">Odštampanih stanica: <ph name="PRINTED_PAGES" /> od <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Štampanje</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nova lozinka</translation> <translation id="3865414814144988605">Rezolucija</translation> <translation id="3941014780699102620">Rješavanje hosta nije uspjelo</translation> +<translation id="3942420633017001071">Dijagnostika</translation> <translation id="39823212440917567">Zadaci za štampanje stariji od <ph name="NUMBER_OF_DAYS" /> dana će se ukloniti</translation> <translation id="4003384961948020559">Nije uspjelo – izlaz je pun</translation> <translation id="4034824040120875894">Štampač</translation> <translation id="4131410914670010031">Crno-bijelo</translation> <translation id="4145784616224233563">HTTP zaštitni zid</translation> +<translation id="4170700058716978431">NIJE USPJELO</translation> <translation id="4227825898293920515">Lozinka će isteći za <ph name="TIME" /></translation> <translation id="4238516577297848345">Nema aktivnih zadataka za štampanje</translation> <translation id="4297501883039923494">Zaustavljeno – nepoznata greška</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Zaustavljeno</translation> <translation id="4808449224298348341">Zadatak za štampanje dokumenta <ph name="DOCUMENT_TITLE" /> je otkazan</translation> <translation id="4832079907277790330">Odaberite folder u aplikaciji Fajlovi...</translation> +<translation id="4848429997038228357">IZVODI SE</translation> <translation id="4890353053343094602">Odmah odaberite novu lozinku</translation> <translation id="4917889632206600977">Zaustavljeno – nestalo je papira</translation> <translation id="4921665434385737356">Napunjeno <ph name="RATE" /> za <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Pokreni</translation> +<translation id="500920857929044050">Zaustavi test</translation> +<translation id="5154917547274118687">Memorija</translation> <translation id="5168185087976003268">Stanje baterije</translation> <translation id="520299634122159966">Nije dostupan nijedan skener</translation> <translation id="5212543919916444558">Ne mogu pronaći ništa na ekranu u vezi s čim mogu pomoći. Pokušajte dodirnuti mikrofon da me nešto pitate.</translation> <translation id="5222676887888702881">Odjava</translation> +<translation id="5264277876637023664">Pokreni test procesora</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Ponovo pokreni rutine</translation> <translation id="5317780077021120954">Sačuvaj</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Upravljani</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Saznajte više u Centru za pomoć</translation> +<translation id="5635169860413004179">Pogledaj izvješće</translation> <translation id="5719918614880940190">Ovim se mjeri korištenje CPU-a i predstavlja zbir svih jezgri</translation> +<translation id="5797428682393400134">USPJEH</translation> <translation id="5832805196449965646">Dodaj osobu</translation> <translation id="5895138241574237353">Ponovo pokreni</translation> +<translation id="5931523347251946569">Datoteka nije pronađena</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6048107060512778456">Nije uspjelo – papir je zaglavljen</translation> <translation id="6050189528197190982">Nijanse sive</translation> <translation id="6058625436358447366">Unesite staru i novu lozinku da završite</translation> <translation id="6061772781719867950">HTTP zahtjevi nisu uspjeli</translation> +<translation id="6104112872696127344">Skeniranje je otkazano</translation> <translation id="6106186594183574873">Unesite staru lozinku da završite</translation> <translation id="6108689792487843350">Pristupnik je van dometa</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Unesite novu lozinku da završite</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Saznajte više</translation> <translation id="6191293864534840972">Neispravno formirani serveri naziva</translation> +<translation id="6232017090690406397">Baterija</translation> <translation id="6325525973963619867">Nije uspjelo</translation> <translation id="636850387210749493">Prijava preduzeća</translation> <translation id="649050271426829538">Zaustavljeno – papir je zaglavljen</translation> <translation id="6517239166834772319">Istražite</translation> <translation id="6527081081771465939">Nepoznati sigurnosni protokol za WiFi</translation> +<translation id="6532051501443766164">Sakrij izvješće</translation> <translation id="65587193855025101">Položeno</translation> <translation id="6564646048574748301">Nije uspjelo – štampač je nedostupan</translation> <translation id="6618744767048954150">Pokrenuto</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="6704062477274546131">Razrješavanje DNS-a</translation> <translation id="6747215703636344499">Zaustavljeno – izlaz je pun</translation> +<translation id="6756731097889387912">Otkazivanje skeniranja nije uspjelo</translation> <translation id="6766275201586212568">DNS rezolucije nisu uspjele</translation> <translation id="6768237774506518020">Visoka stopa neuspjeha DNS rezolucije</translation> <translation id="6839141349259399400">Nije se moguće povezati na skenere?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Visoka HTTPs latentnost</translation> <translation id="7658239707568436148">Otkaži</translation> <translation id="7690294790491645610">Potvrdite novu lozinku</translation> +<translation id="7732651821766520760">Test <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Skenirani fajl je sačuvan!</translation> <translation id="7928373994957558460">Prikaži lokaciju fajla</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Zadano</translation> <translation id="8845001906332463065">Potražite pomoć</translation> +<translation id="8881098542468797602">Test je uspio</translation> <translation id="8910721771319628100">Zadana mreža je iznad praga latentnosti</translation> <translation id="8919837981463578619">Nije uspjelo – nedostaje ladica</translation> <translation id="8928727111548978589">Nije uspjelo – nema papira</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Broj preostalih pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Pokreni ponovo</translation> <translation id="9088306295921699330">Trenutno korištenje</translation> <translation id="910415269708673980">Osvježite tiket za <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skenira se stranica broj <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Otključaj</translation> +<translation id="9149391708638971077">Pokreni test memorije</translation> +<translation id="982713511914535780">Pokreni test pražnjenja</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb index c3105450..0689d0b 100644 --- a/chromeos/strings/chromeos_strings_ca.xtb +++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">No s'ha pogut iniciar l'escaneig</translation> <translation id="1071587090247825784">S'ha detectat un tallafoc</translation> <translation id="1075811647922107217">Mida de la pàgina</translation> +<translation id="1124772482545689468">Usuari</translation> <translation id="1175697296044146566">Aquest dispositiu <ph name="DEVICE_TYPE" /> està gestionat per <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Error desconegut.</translation> <translation id="1204296502688602597">Latència de DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> gestiona aquest usuari i és possible que gestioni les opcions de configuració i monitori l'activitat de l'usuari de manera remota.</translation> <translation id="150962533380566081">El PUK no és vàlid.</translation> <translation id="1510238584712386396">Menú d'aplicacions</translation> +<translation id="1621067168122174824">Executa la prova de càrrega</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> fils)</translation> <translation id="1641857168437328880">Alimentador de documents (a una cara)</translation> <translation id="1644574205037202324">Historial</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Solucionador de DNS present</translation> <translation id="1743558184855585519">La bateria es considera acabada quan arriba al límit</translation> +<translation id="1792647875738159689">S'està cancel·lant l'escaneig</translation> <translation id="1905710495812624430">S'ha superat el nombre màxim d'intents permesos.</translation> <translation id="1930797645656624981">Servei del mètode d'introducció de text a Chrome OS</translation> <translation id="1947737735496445907">Imprès</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Intents restants: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Envia un informe de suggeriments</translation> <translation id="2461822463642141190">Actual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Queda {0} intent.}other{<ph name="ERROR_MESSAGE" /> Queden {0} intents.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> (<ph name="SOURCE_LANGUAGE_NAME" />)</translation> <translation id="2517472476991765520">Escaneja</translation> <translation id="2570743873672969996">S'està executant la prova <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Aplicacions</translation> <translation id="2872961005593481000">Apaga</translation> <translation id="3008341117444806826">ACTUALITZA</translation> <translation id="3009958530611748826">Selecciona en quina carpeta vols que es desi</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">La prova no s'ha superat</translation> <translation id="3083667275341675831">Diagnòstic de connectivitat</translation> <translation id="3091839911843451378">Error: s'ha aturat</translation> +<translation id="3102119246920354026">Memòria cau</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Els meus fitxers</translation> <translation id="3199982728237701504">Alimentador de documents (a dues cares)</translation> <translation id="3246869037381808805">Se suprimiran les tasques d'impressió amb una antiguitat superior a 1 dia</translation> <translation id="3268178239013324452">Error: porta oberta</translation> <translation id="3310640316857623290">La latència DNS supera significativament el llindar permès</translation> +<translation id="3328783797891415197">La prova s'està executant</translation> <translation id="3369013195428705271">Confirmes que vols esborrar tot l'historial d'impressions? Les tasques d'impressió en curs no s'esborraran.</translation> <translation id="3456078764689556234">S'ha imprès la pàgina <ph name="PRINTED_PAGES" /> de <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Imprimeix</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Contrasenya nova</translation> <translation id="3865414814144988605">Resolució</translation> <translation id="3941014780699102620">No s'ha pogut resoldre l'amfitrió</translation> +<translation id="3942420633017001071">Diagnòstic</translation> <translation id="39823212440917567">Se suprimiran les tasques d'impressió amb una antiguitat superior a <ph name="NUMBER_OF_DAYS" /> dies</translation> <translation id="4003384961948020559">Error: safata de sortida plena</translation> <translation id="4034824040120875894">Impressora</translation> <translation id="4131410914670010031">Blanc i negre</translation> <translation id="4145784616224233563">Tallafoc HTTP</translation> +<translation id="4170700058716978431">NO SUPERADA</translation> <translation id="4227825898293920515">La contrasenya caduca d'aquí a <ph name="TIME" /></translation> <translation id="4238516577297848345">No hi ha tasques d'impressió en curs</translation> <translation id="4297501883039923494">S'ha aturat: error desconegut</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">En pausa</translation> <translation id="4808449224298348341">S'ha cancel·lat la tasca d'impressió del document <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Selecciona una carpeta a l'aplicació Fitxers...</translation> +<translation id="4848429997038228357">EN EXECUCIÓ</translation> <translation id="4890353053343094602">Tria'n una de nova immediatament</translation> <translation id="4917889632206600977">S'ha aturat: no hi ha paper</translation> <translation id="4921665434385737356">S'ha carregat un <ph name="RATE" /> en <ph name="NUM_SECONDS" /> segons.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Executa</translation> +<translation id="500920857929044050">Atura la prova</translation> +<translation id="5154917547274118687">Memòria</translation> <translation id="5168185087976003268">Estat de la bateria</translation> <translation id="520299634122159966">No hi ha cap escàner disponible</translation> <translation id="5212543919916444558">No he trobat res a la pantalla amb què et pugui ajudar. Toca el micròfon per demanar-me qualsevol cosa.</translation> <translation id="5222676887888702881">Tanca la sessió</translation> +<translation id="5264277876637023664">Executa la prova de CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Torna a executar les rutines</translation> <translation id="5317780077021120954">Desa</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Gestionat</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Més informació al Centre d'ajuda</translation> +<translation id="5635169860413004179">Mostra l'informe</translation> <translation id="5719918614880940190">Mesura l'ús de la CPU i és una suma de tots els nuclis</translation> +<translation id="5797428682393400134">SUPERADA</translation> <translation id="5832805196449965646">Afegeix una persona</translation> <translation id="5895138241574237353">Reinicia</translation> +<translation id="5931523347251946569">No s'ha trobat el fitxer</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versió <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Tanca</translation> <translation id="6048107060512778456">Error: embús de paper</translation> <translation id="6050189528197190982">Escala de grisos</translation> <translation id="6058625436358447366">Per acabar, introdueix la contrasenya antiga i la nova</translation> <translation id="6061772781719867950">Algunes sol·licituds HTTPS han fallat</translation> +<translation id="6104112872696127344">L'escaneig s'ha cancel·lat</translation> <translation id="6106186594183574873">Per acabar, introdueix la contrasenya antiga</translation> <translation id="6108689792487843350">No es pot accedir a la passarel·la</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz (de <ph name="MAX" /> GHz)</translation> <translation id="6146993107019042706">Per acabar, introdueix la contrasenya nova</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Més informació</translation> <translation id="6191293864534840972">Els servidors de noms tenen un format incorrecte</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Error</translation> <translation id="636850387210749493">Inscripció empresarial</translation> <translation id="649050271426829538">S'ha aturat: embús de paper</translation> <translation id="6517239166834772319">Explora</translation> <translation id="6527081081771465939">Protocol de seguretat Wi-Fi desconegut</translation> +<translation id="6532051501443766164">Amaga l'informe</translation> <translation id="65587193855025101">Finestra plana</translation> <translation id="6564646048574748301">Error: no es pot accedir a la impressora</translation> <translation id="6618744767048954150">Comprovació en curs</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Esborra</translation> <translation id="6704062477274546131">Resolució de DNS</translation> <translation id="6747215703636344499">S'ha aturat: safata de sortida plena</translation> +<translation id="6756731097889387912">No s'ha pogut cancel·lar l'escaneig</translation> <translation id="6766275201586212568">Algunes resolucions de DNS han fallat</translation> <translation id="6768237774506518020">El percentatge d'error de la resolució de DNS és alt</translation> <translation id="6839141349259399400">No et pots connectar als escàners?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">La latència d'HTTPS és alta</translation> <translation id="7658239707568436148">Cancel·la</translation> <translation id="7690294790491645610">Confirma la contrasenya nova</translation> +<translation id="7732651821766520760">Prova <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Estat</translation> <translation id="7855434858642800953">El fitxer escanejat s'ha desat.</translation> <translation id="7928373994957558460">Mostra la ubicació del fitxer</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Predeterminat</translation> <translation id="8845001906332463065">Obteniu ajuda</translation> +<translation id="8881098542468797602">La prova s'ha superat</translation> <translation id="8910721771319628100">La xarxa predeterminada supera el llindar de latència</translation> <translation id="8919837981463578619">Error: no es troba la safata</translation> <translation id="8928727111548978589">Error: no hi ha paper</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Intents restants: <ph name="ATTEMPTS_LEFT" />.</translation> <translation id="8970109610781093811">Torna a executar</translation> <translation id="9088306295921699330">Ús actual</translation> <translation id="910415269708673980">Actualitza el tiquet de: <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">S'està cercant la pàgina <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Desbloqueja</translation> +<translation id="9149391708638971077">Executa la prova de memòria</translation> +<translation id="982713511914535780">Executa la prova de descàrrega</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb index 69179582..d32aa4e 100644 --- a/chromeos/strings/chromeos_strings_cs.xtb +++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skenování se nepodařilo zahájit</translation> <translation id="1071587090247825784">Byl zjištěn Firewall</translation> <translation id="1075811647922107217">Velikost stránky</translation> +<translation id="1124772482545689468">Uživatel</translation> <translation id="1175697296044146566">Toto zařízení <ph name="DEVICE_TYPE" /> spravuje doména <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Neznámá chyba.</translation> <translation id="1204296502688602597">Latence DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Zbývající pokusy: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Odeslat zpětnou vazbu</translation> <translation id="2461822463642141190">Aktuální</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Zbývá {0} pokus}few{<ph name="ERROR_MESSAGE" /> Zbývají {0} pokusy}many{<ph name="ERROR_MESSAGE" /> Zbývá {0} pokusu}other{<ph name="ERROR_MESSAGE" /> Zbývá {0} pokusů}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Vyhledat</translation> <translation id="2570743873672969996">Běží test <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Systém</translation> <translation id="2805756323405976993">Aplikace</translation> <translation id="2872961005593481000">Vypnout</translation> <translation id="3008341117444806826">OBNOVIT</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostika připojení</translation> <translation id="3091839911843451378">Tisk selhal – zastaveno</translation> +<translation id="3102119246920354026">Mezipaměť</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Moje soubory</translation> <translation id="3199982728237701504">Podavač dokumentů (oboustranných)</translation> <translation id="3246869037381808805">Tiskové úlohy starší než 1 den budou odstraněny</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nové heslo</translation> <translation id="3865414814144988605">Rozlišení</translation> <translation id="3941014780699102620">Hostitele se nepodařilo vyřešit</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Tiskové úlohy starší než <ph name="NUMBER_OF_DAYS" /> dní budou odstraněny</translation> <translation id="4003384961948020559">Tisk selhal – výstupní zásobník je plný</translation> <translation id="4034824040120875894">Tiskárna</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Nabito na <ph name="RATE" /> za <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Spustit</translation> +<translation id="5154917547274118687">Paměť</translation> <translation id="5168185087976003268">Opotřebení baterie</translation> <translation id="520299634122159966">Nejsou k dispozici žádné skenery</translation> <translation id="5212543919916444558">Na obrazovce nevidím nic, s čím vám můžu pomoct. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Další informace</translation> <translation id="6191293864534840972">Názvové servery nemají správný formát</translation> +<translation id="6232017090690406397">Baterie</translation> <translation id="6325525973963619867">Došlo k selhání</translation> <translation id="636850387210749493">Registrace podniku</translation> <translation id="649050271426829538">Zastaveno – zasekl se papír</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Výchozí síť má latenci nad prahovou hodnotou</translation> <translation id="8919837981463578619">Tisk selhal – chybí zásobník</translation> <translation id="8928727111548978589">Tisk selhal – došel papír</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Zbývající pokusy: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Spustit znovu</translation> <translation id="9088306295921699330">Současné využití</translation> <translation id="910415269708673980">Obnovte lístek pro <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 9fcb8a3b..81d2bcc 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Kunne ikke begynde at scanne</translation> <translation id="1071587090247825784">En firewall blev registreret</translation> <translation id="1075811647922107217">Sidestørrelse</translation> +<translation id="1124772482545689468">Bruger</translation> <translation id="1175697296044146566">Denne <ph name="DEVICE_TYPE" /> administreres af <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Ukendt fejl.</translation> <translation id="1204296502688602597">DNS-forsinkelse</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> administrerer denne bruger, og vedkommende kan administrere indstillinger og overvåge brugeraktivitet via fjernadgang.</translation> <translation id="150962533380566081">Ugyldig PUK-kode.</translation> <translation id="1510238584712386396">Appliste</translation> +<translation id="1621067168122174824">Kør opladningstest</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> tråde)</translation> <translation id="1641857168437328880">Dokumentindføring (én side)</translation> <translation id="1644574205037202324">Historik</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-resolver er til stede</translation> <translation id="1743558184855585519">Batteriet anses som opbrugt, når det har nået grænsen</translation> +<translation id="1792647875738159689">Annullerer scanning</translation> <translation id="1905710495812624430">Det maksimale antal forsøg er overskredet.</translation> <translation id="1930797645656624981">Indtastningsmetodetjeneste for Chrome OS</translation> <translation id="1947737735496445907">Udskrevet</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> forsøg tilbage</translation> <translation id="2391082728065870591">Send feedbackrapport</translation> <translation id="2461822463642141190">Aktuel</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}one{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}other{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Scan</translation> <translation id="2570743873672969996">Kører testen <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Sluk</translation> <translation id="3008341117444806826">OPDATER</translation> <translation id="3009958530611748826">Vælg en mappe, du vil gemme i</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Testen mislykkedes</translation> <translation id="3083667275341675831">Diagnosticering af forbindelse</translation> <translation id="3091839911843451378">Handlingen mislykkedes – Stoppede</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Mine filer</translation> <translation id="3199982728237701504">Dokumentindføring (to sider)</translation> <translation id="3246869037381808805">Udskriftjobs, der er ældre end 1 dag, fjernes</translation> <translation id="3268178239013324452">Handlingen mislykkedes – Åben låge</translation> <translation id="3310640316857623290">DNS-forsinkelsen er markant højere end den tilladte grænse</translation> +<translation id="3328783797891415197">Testen kører</translation> <translation id="3369013195428705271">Er du sikker på, at du vil rydde hele udskriftshistorikken? Dine igangværende udskriftsjobs ryddes ikke.</translation> <translation id="3456078764689556234"><ph name="PRINTED_PAGES" /> ud af <ph name="TOTAL_PAGES" /> er blevet udskrevet.</translation> <translation id="3459509316159669723">Udskrivning</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Ny adgangskode</translation> <translation id="3865414814144988605">Opløsning</translation> <translation id="3941014780699102620">Der kunne ikke identificeres en host</translation> +<translation id="3942420633017001071">Diagnostik</translation> <translation id="39823212440917567">Udskriftsjobs, der er ældre end <ph name="NUMBER_OF_DAYS" /> dage, fjernes</translation> <translation id="4003384961948020559">Handlingen mislykkedes – Fuld udskriftsbakke</translation> <translation id="4034824040120875894">Printer</translation> <translation id="4131410914670010031">Sort/hvid</translation> <translation id="4145784616224233563">HTTP-firewall</translation> +<translation id="4170700058716978431">MISLYKKET</translation> <translation id="4227825898293920515">Adgangskoden udløber om <ph name="TIME" /></translation> <translation id="4238516577297848345">Ingen udskriftsjobs er i gang</translation> <translation id="4297501883039923494">Stoppet – Ukendt fejl</translation> @@ -100,15 +109,19 @@ <translation id="4773299976671772492">Stoppet</translation> <translation id="4808449224298348341">Udskriftsjobbet <ph name="DOCUMENT_TITLE" /> blev annulleret</translation> <translation id="4832079907277790330">Vælg mappe i appen Filer...</translation> +<translation id="4848429997038228357">KØRER</translation> <translation id="4890353053343094602">Vælg omgående en ny adgangskode</translation> <translation id="4917889632206600977">Stoppet – Papirbakken er tom</translation> <translation id="4921665434385737356">Opladet <ph name="RATE" /> på <ph name="NUM_SECONDS" /> sekunder.</translation> <translation id="4932733599132424254">Dato</translation> <translation id="4985509611418653372">Kør</translation> +<translation id="500920857929044050">Stop test</translation> +<translation id="5154917547274118687">Hukommelse</translation> <translation id="5168185087976003268">Batteriets tilstand</translation> <translation id="520299634122159966">Der er ingen tilgængelige scannere</translation> <translation id="5212543919916444558">Jeg kan ikke finde noget på skærmen, jeg kan hjælpe med. Prøv at trykke på mikrofonen for at spørge mig om noget.</translation> <translation id="5222676887888702881">Log ud</translation> +<translation id="5264277876637023664">Kør CPU-test</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Kør rutiner igen</translation> <translation id="5317780077021120954">Gem</translation> @@ -121,26 +134,33 @@ <translation id="54609108002486618">Administreret</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Få flere oplysninger i Hjælp</translation> +<translation id="5635169860413004179">Se rapport</translation> <translation id="5719918614880940190">Dette måler CPU-forbruget og er en sammenlægning af alle kerner</translation> +<translation id="5797428682393400134">GENNEMFØRT</translation> <translation id="5832805196449965646">Tilføj person</translation> <translation id="5895138241574237353">Genstart</translation> +<translation id="5931523347251946569">Filen blev ikke fundet</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, version <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Luk</translation> <translation id="6048107060512778456">Handlingen mislykkedes – Papirstop</translation> <translation id="6050189528197190982">Gråtone</translation> <translation id="6058625436358447366">Angiv din gamle og nye adgangskode for at afslutte</translation> <translation id="6061772781719867950">Mislykkede HTTP-anmodninger</translation> +<translation id="6104112872696127344">Scanningen blev annulleret</translation> <translation id="6106186594183574873">Angiv din gamle adgangskode for at afslutte</translation> <translation id="6108689792487843350">Denne gateway kan ikke nås</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Angiv din nye adgangskode for at afslutte</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Flere oplysninger</translation> <translation id="6191293864534840972">Ugyldige navneservere</translation> +<translation id="6232017090690406397">Batteri</translation> <translation id="6325525973963619867">Mislykket</translation> <translation id="636850387210749493">Tilmelding af virksomhed</translation> <translation id="649050271426829538">Stoppet – Papirstop</translation> <translation id="6517239166834772319">Udforsk</translation> <translation id="6527081081771465939">Ukendt Wi-Fi-sikkerhedsprotokol</translation> +<translation id="6532051501443766164">Skjul rapport</translation> <translation id="65587193855025101">Flatbed</translation> <translation id="6564646048574748301">Handlingen mislykkedes – Ingen forbindelse til printer</translation> <translation id="6618744767048954150">Kører</translation> @@ -148,6 +168,7 @@ <translation id="6643016212128521049">Ryd</translation> <translation id="6704062477274546131">DNS-udførelse</translation> <translation id="6747215703636344499">Stoppet – Fuld udskriftsbakke</translation> +<translation id="6756731097889387912">Scanningen kunne ikke annulleres</translation> <translation id="6766275201586212568">Mislykkede DNS-opslag</translation> <translation id="6768237774506518020">Høj fejlrate for DNS-opslag</translation> <translation id="6839141349259399400">Kan du ikke oprette forbindelse til scannere?</translation> @@ -163,6 +184,7 @@ <translation id="7648838807254605802">Høj HTTPS-forsinkelse</translation> <translation id="7658239707568436148">Annuller</translation> <translation id="7690294790491645610">Bekræft den nye adgangskode</translation> +<translation id="7732651821766520760">Testen <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Den scannede fil er gemt.</translation> <translation id="7928373994957558460">Se filplacering</translation> @@ -190,12 +212,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8845001906332463065">Få hjælp</translation> +<translation id="8881098542468797602">Testen blev gennemført</translation> <translation id="8910721771319628100">Standardnetværket overstiger grænsen for forsinkelse</translation> <translation id="8919837981463578619">Handlingen mislykkedes – Bakke mangler</translation> <translation id="8928727111548978589">Handlingen mislykkedes – Papirbakken er tom</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> forsøg tilbage</translation> <translation id="8970109610781093811">Kør igen</translation> <translation id="9088306295921699330">Aktuelt forbrug</translation> <translation id="910415269708673980">Gendan billetten for <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Scanner side <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Lås op</translation> +<translation id="9149391708638971077">Kør hukommelsestest</translation> +<translation id="982713511914535780">Kør afladningstest</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb index 3060006b..fd42c50e 100644 --- a/chromeos/strings/chromeos_strings_de.xtb +++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Scan konnte nicht gestartet werden</translation> <translation id="1071587090247825784">Firewall erkannt</translation> <translation id="1075811647922107217">Seitengröße</translation> +<translation id="1124772482545689468">Nutzer</translation> <translation id="1175697296044146566">Dieses Gerät (<ph name="DEVICE_TYPE" />) wird von <ph name="MANAGER" /> verwaltet.</translation> <translation id="1195447618553298278">Unbekannter Fehler.</translation> <translation id="1204296502688602597">DNS-Latenz</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Noch <ph name="ATTEMPTS_LEFT" /> Versuche</translation> <translation id="2391082728065870591">Feedbackbericht senden</translation> <translation id="2461822463642141190">Aktuell</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Noch {0} Versuch}other{<ph name="ERROR_MESSAGE" /> Noch {0} Versuche}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Suchen</translation> <translation id="2570743873672969996">Test für <ph name="TEST_NAME" /> wird ausgeführt…</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Herunterfahren</translation> <translation id="3008341117444806826">AKTUALISIEREN</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Connectivity Diagnostics</translation> <translation id="3091839911843451378">Fehlgeschlagen – Angehalten</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Meine Dateien</translation> <translation id="3199982728237701504">Dokumenteneinzug (beidseitig)</translation> <translation id="3246869037381808805">Druckaufträge, die älter als 1 Tag sind, werden entfernt</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Neues Passwort</translation> <translation id="3865414814144988605">Auflösung</translation> <translation id="3941014780699102620">Host konnte nicht aufgelöst werden</translation> +<translation id="3942420633017001071">Diagnose</translation> <translation id="39823212440917567">Druckaufträge, die älter als <ph name="NUMBER_OF_DAYS" /> Tage sind, werden entfernt</translation> <translation id="4003384961948020559">Fehlgeschlagen – Ausgabefach ist voll</translation> <translation id="4034824040120875894">Drucker</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="RATE" /> in <ph name="NUM_SECONDS" /> Sekunden aufgeladen.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Ausführen</translation> +<translation id="5154917547274118687">Speicher</translation> <translation id="5168185087976003268">Akkuzustand</translation> <translation id="520299634122159966">Keine Scanner verfügbar</translation> <translation id="5212543919916444558">Ich finde nichts auf deinem Display, wobei ich dir helfen könnte. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Weitere Informationen</translation> <translation id="6191293864534840972">Nameserver hat fehlerhaftes Format</translation> +<translation id="6232017090690406397">Akku</translation> <translation id="6325525973963619867">Fehlgeschlagen</translation> <translation id="636850387210749493">Enterprise-Registrierung</translation> <translation id="649050271426829538">Angehalten – Papierstau</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Das Standardnetzwerk hat den Latenzgrenzwert überschritten</translation> <translation id="8919837981463578619">Fehlgeschlagen – Fach fehlt</translation> <translation id="8928727111548978589">Fehlgeschlagen – Kein Papier</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> verbleibende Versuche</translation> <translation id="8970109610781093811">Erneut ausführen</translation> <translation id="9088306295921699330">Aktuelle Nutzung</translation> <translation id="910415269708673980">Aktualisieren Sie das Ticket für <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb index 50d76ba..a2755f39 100644 --- a/chromeos/strings/chromeos_strings_el.xtb +++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Δεν ήταν δυνατή η έναρξη της σάρωσης</translation> <translation id="1071587090247825784">Εντοπίστηκε τείχος προστασίας</translation> <translation id="1075811647922107217">Μέγεθος σελίδας</translation> +<translation id="1124772482545689468">Χρήστης</translation> <translation id="1175697296044146566">Η διαχείριση της συσκευής <ph name="DEVICE_TYPE" /> γίνεται από <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Άγνωστο σφάλμα.</translation> <translation id="1204296502688602597">Λανθάνων χρόνος DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">Ο τομέας <ph name="MANAGER" /> διαχειρίζεται αυτόν τον χρήστη και ενδέχεται να διαχειρίζεται απομακρυσμένα τις ρυθμίσεις και να παρακολουθεί τη δραστηριότητα του χρήστη.</translation> <translation id="150962533380566081">Μη έγκυρος κωδικός PUK.</translation> <translation id="1510238584712386396">Λειτουργία εκκίνησης</translation> +<translation id="1621067168122174824">Εκτέλεση δοκιμής φόρτισης</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> νήματα)</translation> <translation id="1641857168437328880">Τροφοδότης εγγράφων (Μίας όψης)</translation> <translation id="1644574205037202324">Ιστορικό</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Παρουσία επίλυσης DNS</translation> <translation id="1743558184855585519">Θεωρείται ότι η μπαταρία καταναλώθηκε μόλις φτάσει το όριο.</translation> +<translation id="1792647875738159689">Ακύρωση σάρωσης</translation> <translation id="1905710495812624430">Έγινε υπέρβαση του μέγιστου αριθμού επιτρεπόμενων προσπαθειών.</translation> <translation id="1930797645656624981">Υπηρεσία μεθόδου εισαγωγής Chrome OS</translation> <translation id="1947737735496445907">Εκτυπώθηκε</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Απομένουν <ph name="ATTEMPTS_LEFT" /> προσπάθειες</translation> <translation id="2391082728065870591">Αποστολή αναφοράς σχολίων</translation> <translation id="2461822463642141190">Τρέχουσα</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} προσπάθεια απομένει}other{<ph name="ERROR_MESSAGE" /> {0} προσπάθειες απομένουν}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Σάρωση</translation> <translation id="2570743873672969996">Εκτέλεση δοκιμής <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Σύστημα</translation> <translation id="2805756323405976993">Εφαρμογές </translation> <translation id="2872961005593481000">Τερματισμός λειτουργίας</translation> <translation id="3008341117444806826">ΑΝΑΝΕΩΣΗ</translation> <translation id="3009958530611748826">Επιλέξτε έναν φάκελο στον οποίο θέλετε να γίνεται αποθήκευση.</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Αποτυχία δοκιμής</translation> <translation id="3083667275341675831">Διαγνωστικά συνδεσιμότητας</translation> <translation id="3091839911843451378">Σφάλμα - Σταμάτησε</translation> +<translation id="3102119246920354026">Κρυφή μνήμη</translation> +<translation id="3122464029669770682">Κεντρική μονάδα επεξεργασίας</translation> <translation id="3188257591659621405">Τα αρχεία μου</translation> <translation id="3199982728237701504">Τροφοδότης εγγράφων (Διπλής όψης)</translation> <translation id="3246869037381808805">Οι εργασίες εκτύπωσης που είναι παλαιότερες της 1 ημέρας θα καταργηθούν.</translation> <translation id="3268178239013324452">Σφάλμα - Η θύρα είναι ανοικτή</translation> <translation id="3310640316857623290">Ο λανθάνων χρόνος DNS έχει υπερβεί σημαντικά το επιτρεπόμενο ελάχιστο όριο.</translation> +<translation id="3328783797891415197">Η δοκιμή εκτελείται</translation> <translation id="3369013195428705271">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλο το ιστορικό εκτύπωσης; Οι τρέχουσες εργασίες εκτύπωσης δεν θα διαγραφούν.</translation> <translation id="3456078764689556234">Εκτυπώθηκε η σελίδα <ph name="PRINTED_PAGES" /> από <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Εκτύπωση</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Νέος κωδικός πρόσβασης</translation> <translation id="3865414814144988605">Ανάλυση</translation> <translation id="3941014780699102620">Αποτυχία επίλυσης κεντρικού υπολογιστή</translation> +<translation id="3942420633017001071">Διαγνωστικά</translation> <translation id="39823212440917567">Οι εργασίες εκτύπωσης που είναι παλαιότερες των <ph name="NUMBER_OF_DAYS" /> ημερών θα καταργηθούν.</translation> <translation id="4003384961948020559">Σφάλμα - Το σημείο εξόδου είναι γεμάτο</translation> <translation id="4034824040120875894">Εκτυπωτής</translation> <translation id="4131410914670010031">Ασπρόμαυρο</translation> <translation id="4145784616224233563">Τείχος προστασίας HTTP</translation> +<translation id="4170700058716978431">ΑΠΕΤΥΧΕ</translation> <translation id="4227825898293920515">Ο κωδικός πρόσβασης λήγει σε <ph name="TIME" /></translation> <translation id="4238516577297848345">Δεν υπάρχουν εργασίες εκτύπωσης σε εξέλιξη</translation> <translation id="4297501883039923494">Διακοπή - Άγνωστο σφάλμα</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Διακόπηκε</translation> <translation id="4808449224298348341">Ακυρώθηκε η εργασία εκτύπωσης <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Επιλογή φακέλου στην εφαρμογή Αρχεία…</translation> +<translation id="4848429997038228357">ΕΚΤΕΛΕΙΤΑΙ</translation> <translation id="4890353053343094602">Επιλέξτε άμεσα έναν νέο</translation> <translation id="4917889632206600977">Διακοπή - Τελείωσε το χαρτί</translation> <translation id="4921665434385737356">Φόρτιση κατά <ph name="RATE" /> σε <ph name="NUM_SECONDS" /> δευτερόλεπτα.</translation> <translation id="4932733599132424254">Ημερομηνία</translation> <translation id="4985509611418653372">Εκτέλεση</translation> +<translation id="500920857929044050">Διακοπή δοκιμής</translation> +<translation id="5154917547274118687">Μνήμη</translation> <translation id="5168185087976003268">Κατάσταση μπαταρίας</translation> <translation id="520299634122159966">Δεν υπάρχουν διαθέσιμοι σαρωτές.</translation> <translation id="5212543919916444558">Δεν βρέθηκε κάτι με το οποίο να μπορώ να σας βοηθήσω στην οθόνη σας. Πατήστε στο μικρόφωνο για να ρωτήσετε οτιδήποτε θέλετε.</translation> <translation id="5222676887888702881">Έξοδος</translation> +<translation id="5264277876637023664">Εκτέλεση δοκιμής CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Επανεκτέλεση ρουτινών</translation> <translation id="5317780077021120954">Αποθήκευση</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Διαχειριζόμενη</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Μάθετε περισσότερα στο Κέντρο βοήθειας</translation> +<translation id="5635169860413004179">Προβολή αναφοράς</translation> <translation id="5719918614880940190">Αυτή η επιλογή μετρά τη χρήση CPU και είναι αθροιστική για όλους τους πυρήνες.</translation> +<translation id="5797428682393400134">ΕΠΙΤΥΧΙΑ</translation> <translation id="5832805196449965646">Προσθήκη ατόμου</translation> <translation id="5895138241574237353">Επανεκκίνηση</translation> +<translation id="5931523347251946569">Το αρχείο δεν βρέθηκε</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, έκδοση <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Κλείσιμο</translation> <translation id="6048107060512778456">Σφάλμα - Εμπλοκή χαρτιού</translation> <translation id="6050189528197190982">Κλίμακα του γκρι</translation> <translation id="6058625436358447366">Για να τελειώσετε, εισαγάγετε τον παλιό και τον νέο κωδικό πρόσβασης</translation> <translation id="6061772781719867950">Αποτυχημένα αιτήματα HTTP</translation> +<translation id="6104112872696127344">Η σάρωση ακυρώθηκε</translation> <translation id="6106186594183574873">Για να τελειώσετε, εισαγάγετε τον παλιό κωδικό πρόσβασης</translation> <translation id="6108689792487843350">Μη προσβάσιμη πύλη</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">Για να ολοκληρώσετε, εισαγάγετε τον νέο κωδικό πρόσβασης</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Μάθετε περισσότερα</translation> <translation id="6191293864534840972">Τα ονόματα διακομιστών έχουν λανθασμένη μορφή.</translation> +<translation id="6232017090690406397">Μπαταρία</translation> <translation id="6325525973963619867">Απέτυχε</translation> <translation id="636850387210749493">Εγγραφή επιχείρησης</translation> <translation id="649050271426829538">Διακοπή - Εμπλοκή χαρτιού</translation> <translation id="6517239166834772319">Εξερεύνηση</translation> <translation id="6527081081771465939">Άγνωστο πρωτόκολλο ασφαλείας Wi-Fi</translation> +<translation id="6532051501443766164">Απόκρυψη αναφοράς</translation> <translation id="65587193855025101">Επίπεδος</translation> <translation id="6564646048574748301">Σφάλμα - Δεν είναι δυνατή η πρόσβαση στον εκτυπωτή</translation> <translation id="6618744767048954150">Σε εξέλιξη</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Διαγραφή</translation> <translation id="6704062477274546131">Επίλυση DNS</translation> <translation id="6747215703636344499">Διακοπή - Ο δίσκος εξόδου είναι γεμάτος</translation> +<translation id="6756731097889387912">Δεν ήταν δυνατή η ακύρωση της σάρωσης.</translation> <translation id="6766275201586212568">Αποτυχημένες αναλύσεις DNS</translation> <translation id="6768237774506518020">Υψηλό ποσοστό αποτυχίας ανάλυσης DNS</translation> <translation id="6839141349259399400">Δεν είναι δυνατή η σύνδεση σε σαρωτές;</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Μεγάλος λανθάνων χρόνος HTTPS</translation> <translation id="7658239707568436148">Ακύρωση</translation> <translation id="7690294790491645610">Επιβεβαίωση νέου κωδικού πρόσβασης</translation> +<translation id="7732651821766520760">Δοκιμή <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Κατάσταση</translation> <translation id="7855434858642800953">Το σαρωμένο αρχείο αποθηκεύτηκε!</translation> <translation id="7928373994957558460">Εμφάνιση τοποθεσίας αρχείου</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Προεπιλογή</translation> <translation id="8845001906332463065">Λήψη βοήθειας</translation> +<translation id="8881098542468797602">Επιτυχία δοκιμής</translation> <translation id="8910721771319628100">Ο λανθάνων χρόνος του προεπιλεγμένου δικτύου έχει υπερβεί το ελάχιστο όριο.</translation> <translation id="8919837981463578619">Σφάλμα - Λείπει δίσκος</translation> <translation id="8928727111548978589">Σφάλμα - Τελείωσε το χαρτί</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> προσπάθειες απομένουν.</translation> <translation id="8970109610781093811">Επανεκτέλεση</translation> <translation id="9088306295921699330">Τρέχουσα χρήση</translation> <translation id="910415269708673980">Ανανέωση εισιτηρίου για το <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Σάρωση σελίδας <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Ξεκλείδωμα</translation> +<translation id="9149391708638971077">Εκτέλεση δοκιμής μνήμης</translation> +<translation id="982713511914535780">Εκτέλεση δοκιμής αποφόρτισης</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index 7bebbbf..4db77f8 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Couldn't start scanning</translation> <translation id="1071587090247825784">Firewall detected</translation> <translation id="1075811647922107217">Page size</translation> +<translation id="1124772482545689468">User</translation> <translation id="1175697296044146566">This <ph name="DEVICE_TYPE" /> is managed by <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Unknown error.</translation> <translation id="1204296502688602597">DNS latency</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> manages this user and may remotely manage settings and monitor user activity.</translation> <translation id="150962533380566081">Invalid PUK.</translation> <translation id="1510238584712386396">Launcher</translation> +<translation id="1621067168122174824">Run charge test</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads)</translation> <translation id="1641857168437328880">Document feeder (one-sided)</translation> <translation id="1644574205037202324">History</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS resolver present</translation> <translation id="1743558184855585519">The battery is considered consumed once it reaches the limit</translation> +<translation id="1792647875738159689">Cancelling scanning</translation> <translation id="1905710495812624430">Maximum allowed attempts exceeded.</translation> <translation id="1930797645656624981">Chrome OS Input Method Service</translation> <translation id="1947737735496445907">Printed</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> attempts left</translation> <translation id="2391082728065870591">Send feedback report</translation> <translation id="2461822463642141190">Current</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} attempt left}other{<ph name="ERROR_MESSAGE" /> {0} attempts left}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Scan</translation> <translation id="2570743873672969996">Running <ph name="TEST_NAME" /> test…</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Shut down</translation> <translation id="3008341117444806826">REFRESH</translation> <translation id="3009958530611748826">Select a folder to save to</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">Test failed</translation> <translation id="3083667275341675831">Connectivity diagnostics</translation> <translation id="3091839911843451378">Failed – Stopped</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">My files</translation> <translation id="3199982728237701504">Document feeder (two-sided)</translation> <translation id="3246869037381808805">Print jobs older than 1 day will be removed</translation> <translation id="3268178239013324452">Failed – Door open</translation> <translation id="3310640316857623290">DNS latency significantly above allowable threshold</translation> +<translation id="3328783797891415197">Test running</translation> <translation id="3369013195428705271">Are you sure you want to clear all print history? Your ongoing print jobs will not be cleared.</translation> <translation id="3456078764689556234">Printed page <ph name="PRINTED_PAGES" /> out of <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Printing</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">New password</translation> <translation id="3865414814144988605">Resolution</translation> <translation id="3941014780699102620">Failed to resolve host</translation> +<translation id="3942420633017001071">Diagnostics</translation> <translation id="39823212440917567">Print jobs older than <ph name="NUMBER_OF_DAYS" /> days will be removed</translation> <translation id="4003384961948020559">Failed – Output full</translation> <translation id="4034824040120875894">Printer</translation> <translation id="4131410914670010031">Black and white</translation> <translation id="4145784616224233563">HTTP firewall</translation> +<translation id="4170700058716978431">FAILED</translation> <translation id="4227825898293920515">Password expires in <ph name="TIME" /></translation> <translation id="4238516577297848345">No print jobs in progress</translation> <translation id="4297501883039923494">Stopped – unknown error</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Stopped</translation> <translation id="4808449224298348341">Cancelled print job <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Select folder in the Files app…</translation> +<translation id="4848429997038228357">RUNNING</translation> <translation id="4890353053343094602">Choose a new one immediately</translation> <translation id="4917889632206600977">Stopped – out of paper</translation> <translation id="4921665434385737356">Charged <ph name="RATE" /> in <ph name="NUM_SECONDS" /> seconds.</translation> <translation id="4932733599132424254">Date</translation> <translation id="4985509611418653372">Run</translation> +<translation id="500920857929044050">Stop test</translation> +<translation id="5154917547274118687">Memory</translation> <translation id="5168185087976003268">Battery health</translation> <translation id="520299634122159966">No available scanners</translation> <translation id="5212543919916444558">I can't find anything on your screen that I can help with. Try tapping the mic to ask me anything.</translation> <translation id="5222676887888702881">Sign out</translation> +<translation id="5264277876637023664">Run CPU test</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Rerun routines</translation> <translation id="5317780077021120954">Save</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Managed</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Find out more in the Help Centre</translation> +<translation id="5635169860413004179">See report</translation> <translation id="5719918614880940190">This measures the CPU usage, and is an aggregation of all cores</translation> +<translation id="5797428682393400134">SUCCESS</translation> <translation id="5832805196449965646">Add Person</translation> <translation id="5895138241574237353">Restart</translation> +<translation id="5931523347251946569">File not found</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, version <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Close</translation> <translation id="6048107060512778456">Failed – Paper jam</translation> <translation id="6050189528197190982">Greyscale</translation> <translation id="6058625436358447366">To finish, enter your old and new passwords</translation> <translation id="6061772781719867950">Failed HTTP requests</translation> +<translation id="6104112872696127344">Scanning has been cancelled</translation> <translation id="6106186594183574873">To finish, enter your old password</translation> <translation id="6108689792487843350">Gateway is unreachable</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">To finish, enter your new password</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Learn more</translation> <translation id="6191293864534840972">Malformed name servers</translation> +<translation id="6232017090690406397">Battery</translation> <translation id="6325525973963619867">Failed</translation> <translation id="636850387210749493">Enterprise enrolment</translation> <translation id="649050271426829538">Stopped – paper jam</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Unknown Wi-Fi security protocol</translation> +<translation id="6532051501443766164">Hide report</translation> <translation id="65587193855025101">Flatbed</translation> <translation id="6564646048574748301">Failed – Printer unreachable</translation> <translation id="6618744767048954150">Running</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Clear</translation> <translation id="6704062477274546131">DNS resolution</translation> <translation id="6747215703636344499">Stopped – output full</translation> +<translation id="6756731097889387912">Couldn't cancel scanning</translation> <translation id="6766275201586212568">Failed DNS resolutions</translation> <translation id="6768237774506518020">High DNS resolution failure rate</translation> <translation id="6839141349259399400">Can't connect to scanners?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">High HTTPS latency</translation> <translation id="7658239707568436148">Cancel</translation> <translation id="7690294790491645610">Confirm new password</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> test</translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Scanned file saved!</translation> <translation id="7928373994957558460">Show file location</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Default</translation> <translation id="8845001906332463065">Get help</translation> +<translation id="8881098542468797602">Test succeeded</translation> <translation id="8910721771319628100">Default network above latency threshold</translation> <translation id="8919837981463578619">Failed – Tray missing</translation> <translation id="8928727111548978589">Failed – Out of paper</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> attempts left</translation> <translation id="8970109610781093811">Run again</translation> <translation id="9088306295921699330">Current usage</translation> <translation id="910415269708673980">Refresh ticket for <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Scanning page <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Unlock</translation> +<translation id="9149391708638971077">Run memory test</translation> +<translation id="982713511914535780">Run discharge test</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb index 33e40c4..a1a3be3 100644 --- a/chromeos/strings/chromeos_strings_es-419.xtb +++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">No se pudo comenzar el escaneo</translation> <translation id="1071587090247825784">Se detectó un firewall</translation> <translation id="1075811647922107217">Tamaño de la página</translation> +<translation id="1124772482545689468">Usuario</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> administra el dispositivo <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Error desconocido.</translation> <translation id="1204296502688602597">Latencia de DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Intentos restantes: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Enviar informe de comentarios</translation> <translation id="2461822463642141190">Actual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Queda {0} intento.}other{<ph name="ERROR_MESSAGE" /> Quedan {0} intentos.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Buscar</translation> <translation id="2570743873672969996">Ejecutando la prueba <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Aplicaciones</translation> <translation id="2872961005593481000">Apagar</translation> <translation id="3008341117444806826">ACTUALIZAR</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnóstico de conectividad</translation> <translation id="3091839911843451378">Error: La impresora se detuvo</translation> +<translation id="3102119246920354026">Caché</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Mis archivos</translation> <translation id="3199982728237701504">Alimentador de documentos (dos caras)</translation> <translation id="3246869037381808805">Se quitarán los trabajos de impresión que tengan más de 1 día</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nueva contraseña</translation> <translation id="3865414814144988605">Resolución</translation> <translation id="3941014780699102620">no se pudo resolver el host</translation> +<translation id="3942420633017001071">Diagnóstico</translation> <translation id="39823212440917567">Se quitarán los trabajos de impresión que tengan más de <ph name="NUMBER_OF_DAYS" /> días</translation> <translation id="4003384961948020559">Error: La bandeja de salida está llena</translation> <translation id="4034824040120875894">Impresora</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Se cargó <ph name="RATE" /> en <ph name="NUM_SECONDS" /> segundos.</translation> <translation id="4932733599132424254">Fecha</translation> <translation id="4985509611418653372">Ejecutar</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Estado de la batería</translation> <translation id="520299634122159966">No hay escáneres disponibles</translation> <translation id="5212543919916444558">No hay nada en la pantalla con lo que pueda ayudarte. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Más información</translation> <translation id="6191293864534840972">el formato de los servidores de nombres es incorrecto</translation> +<translation id="6232017090690406397">Batería</translation> <translation id="6325525973963619867">Se ha producido un error.</translation> <translation id="636850387210749493">Registro de empresa</translation> <translation id="649050271426829538">Se detuvo: se atascó el papel</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">la red predeterminada supera el umbral de latencia</translation> <translation id="8919837981463578619">Error: Falta la bandeja</translation> <translation id="8928727111548978589">Error: No hay papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Intentos restantes: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Volver a ejecutar</translation> <translation id="9088306295921699330">Uso actual</translation> <translation id="910415269708673980">Actualizar ticket para <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index 098f7c2e..0f3b7ee 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">No se ha podido empezar a escanear</translation> <translation id="1071587090247825784">cortafuegos detectado</translation> <translation id="1075811647922107217">Tamaño de página</translation> +<translation id="1124772482545689468">Usuario</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> gestiona el dispositivo <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Error desconocido.</translation> <translation id="1204296502688602597">Latencia de DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Intentos restantes: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Enviar informe de opinión</translation> <translation id="2461822463642141190">Actual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Queda {0} intento.}other{<ph name="ERROR_MESSAGE" /> Quedan {0} intentos.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Buscar</translation> <translation id="2570743873672969996">Ejecutando prueba <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Aplicaciones</translation> <translation id="2872961005593481000">Apagar</translation> <translation id="3008341117444806826">ACTUALIZAR</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnóstico de conectividad</translation> <translation id="3091839911843451378">No se ha podido imprimir - Se ha detenido</translation> +<translation id="3102119246920354026">Caché</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Mis archivos</translation> <translation id="3199982728237701504">Alimentador de documentos (dos caras)</translation> <translation id="3246869037381808805">Los trabajos de impresión con más de 1 día de antigüedad se eliminarán</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Contraseña nueva</translation> <translation id="3865414814144988605">Resolución</translation> <translation id="3941014780699102620">No se ha podido resolver el host</translation> +<translation id="3942420633017001071">Diagnósticos</translation> <translation id="39823212440917567">Los trabajos de impresión con más de <ph name="NUMBER_OF_DAYS" /> días de antigüedad se eliminarán</translation> <translation id="4003384961948020559">No se ha podido imprimir - Salida llena</translation> <translation id="4034824040120875894">Impresora</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Se ha cargado un <ph name="RATE" /> en <ph name="NUM_SECONDS" /> segundos.</translation> <translation id="4932733599132424254">Fecha</translation> <translation id="4985509611418653372">Ejecutar</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Estado de la batería</translation> <translation id="520299634122159966">No hay escáneres disponibles</translation> <translation id="5212543919916444558">No encuentro nada en la pantalla con lo que pueda ayudarte. Toca el micrófono para pedirme algo.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Más información</translation> <translation id="6191293864534840972">Los servidores de nombres presentan errores de formato</translation> +<translation id="6232017090690406397">Batería</translation> <translation id="6325525973963619867">Se ha producido un error.</translation> <translation id="636850387210749493">Registro de empresa</translation> <translation id="649050271426829538">Detenido: atasco de papel</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">La red predeterminada supera el umbral de latencia</translation> <translation id="8919837981463578619">No se ha podido imprimir - Falta una bandeja</translation> <translation id="8928727111548978589">No se ha podido imprimir - Sin papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Intentos restantes: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Volver a ejecutar</translation> <translation id="9088306295921699330">Uso actual</translation> <translation id="910415269708673980">Actualiza el ticket de <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb index 68d2180..f326088 100644 --- a/chromeos/strings/chromeos_strings_et.xtb +++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skannimist ei saanud alustada</translation> <translation id="1071587090247825784">Tuvastati tulemüür</translation> <translation id="1075811647922107217">Lehe suurus</translation> +<translation id="1124772482545689468">Kasutaja</translation> <translation id="1175697296044146566">Seadet <ph name="DEVICE_TYPE" /> haldab <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Tundmatu viga.</translation> <translation id="1204296502688602597">DNS-i latentsusaeg</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">Seda kasutajat haldab domeen <ph name="MANAGER" />, mis võib eemalt hallata seadeid ja jälgida kasutaja tegevusi.</translation> <translation id="150962533380566081">Vale PUK-kood.</translation> <translation id="1510238584712386396">Käivitaja</translation> +<translation id="1621067168122174824">Käita laadimistest</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> lõime)</translation> <translation id="1641857168437328880">Dokumendisöötur (ühepoolne)</translation> <translation id="1644574205037202324">Ajalugu</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-lahendaja on olemas</translation> <translation id="1743558184855585519">Aku loetakse kasutatuks, kui selle laetuse tase jõuab selle limiidini</translation> +<translation id="1792647875738159689">Skannimise tühistamine</translation> <translation id="1905710495812624430">Katsete maksimaalne arv on ületatud.</translation> <translation id="1930797645656624981">Chrome OS sisestusmeetodi teenus</translation> <translation id="1947737735496445907">Prinditud</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Jäänud on <ph name="ATTEMPTS_LEFT" /> katset</translation> <translation id="2391082728065870591">Saada tagasisidearuanne</translation> <translation id="2461822463642141190">Praegune</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} katse jäänud}other{<ph name="ERROR_MESSAGE" />, {0} katset jäänud}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Kontrolli</translation> <translation id="2570743873672969996">Testi <ph name="TEST_NAME" /> käitamine …</translation> +<translation id="2620436844016719705">Süsteem</translation> <translation id="2805756323405976993">Rakendused</translation> <translation id="2872961005593481000">Lülita välja</translation> <translation id="3008341117444806826">VÄRSKENDA</translation> <translation id="3009958530611748826">Valige kaust, kuhu salvestada</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Test ebaõnnestus</translation> <translation id="3083667275341675831">Ühenduvuse diagnostika</translation> <translation id="3091839911843451378">Ebaõnnestus – peatatud</translation> +<translation id="3102119246920354026">Vahemälu</translation> +<translation id="3122464029669770682">Protsessor</translation> <translation id="3188257591659621405">Minu failid</translation> <translation id="3199982728237701504">Dokumendisöötur (kahepoolne)</translation> <translation id="3246869037381808805">Prinditööd, mis on vanemad kui 1 päev, eemaldatakse</translation> <translation id="3268178239013324452">Ebaõnnestus – luuk on avatud</translation> <translation id="3310640316857623290">DNS-i latentsusaeg ületab märkimisväärselt lubatud piiri</translation> +<translation id="3328783797891415197">Test on pooleli</translation> <translation id="3369013195428705271">Kas soovite kindlasti kogu printimise ajaloo kustutada? Teie pooleliolevaid prinditöid ei kustutata.</translation> <translation id="3456078764689556234">Prinditi <ph name="PRINTED_PAGES" />. leht <ph name="TOTAL_PAGES" />-st.</translation> <translation id="3459509316159669723">Printimine</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Uus parool</translation> <translation id="3865414814144988605">Eraldusvõime</translation> <translation id="3941014780699102620">Hosti lahendamine ebaõnnestus</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Prinditööd, mis on vanemad kui <ph name="NUMBER_OF_DAYS" /> päeva, eemaldatakse</translation> <translation id="4003384961948020559">Ebaõnnestus – väljastusala on täis</translation> <translation id="4034824040120875894">Printer</translation> <translation id="4131410914670010031">Mustvalge</translation> <translation id="4145784616224233563">HTTP tulemüür</translation> +<translation id="4170700058716978431">EBAÕNNESTUS</translation> <translation id="4227825898293920515">Parooli aegumiseni on jäänud <ph name="TIME" /></translation> <translation id="4238516577297848345">Ühtegi prinditööd pole pooleli</translation> <translation id="4297501883039923494">Peatatud – tundmatu viga</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Peatatud</translation> <translation id="4808449224298348341">Prinditöö <ph name="DOCUMENT_TITLE" /> tühistati</translation> <translation id="4832079907277790330">Valige rakenduses Failid kaust …</translation> +<translation id="4848429997038228357">POOLELI</translation> <translation id="4890353053343094602">Valige kohe uus</translation> <translation id="4917889632206600977">Peatatud – paber on otsas</translation> <translation id="4921665434385737356">Laeti <ph name="RATE" /> <ph name="NUM_SECONDS" /> sekundi jooksul.</translation> <translation id="4932733599132424254">Kuupäev</translation> <translation id="4985509611418653372">Käitati</translation> +<translation id="500920857929044050">Lõpeta test</translation> +<translation id="5154917547274118687">Mälu</translation> <translation id="5168185087976003268">Aku seisukord</translation> <translation id="520299634122159966">Ühtegi skannerit pole saadaval</translation> <translation id="5212543919916444558">Ma ei leia teie ekraanilt midagi, mille puhul saaksin aidata. Kui soovite mulle küsimuse esitada, puudutage mikrofoni.</translation> <translation id="5222676887888702881">Logi välja</translation> +<translation id="5264277876637023664">Käita protsessori test</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Taaskäita rutiinid</translation> <translation id="5317780077021120954">Salvesta</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Hallatud</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Vaadake lisateavet Abikeskusest</translation> +<translation id="5635169860413004179">Kuva aruanne</translation> <translation id="5719918614880940190">See mõõdab protsessori kasutust ja on koondnäitaja kõikide tuumade kohta.</translation> +<translation id="5797428682393400134">ÕNNESTUS</translation> <translation id="5832805196449965646">Lisa inimene</translation> <translation id="5895138241574237353">Taaskäivitamine</translation> +<translation id="5931523347251946569">Faili ei leitud</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versioon <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Sulge</translation> <translation id="6048107060512778456">Ebaõnnestus – paberiummistus</translation> <translation id="6050189528197190982">Hallskaala</translation> <translation id="6058625436358447366">Toimingu lõpuleviimiseks sisestage oma vana ja uus parool</translation> <translation id="6061772781719867950">Ebaõnnestunud HTTP-päringud</translation> +<translation id="6104112872696127344">Skannimine tühistati</translation> <translation id="6106186594183574873">Toimingu lõpuleviimiseks sisestage oma vana parool</translation> <translation id="6108689792487843350">Lüüs on kättesaamatu</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Toimingu lõpuleviimiseks sisestage oma uus parool</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Lisateave</translation> <translation id="6191293864534840972">Vigased nimeserverid</translation> +<translation id="6232017090690406397">Aku</translation> <translation id="6325525973963619867">Ebaõnnestus</translation> <translation id="636850387210749493">Ettevõtte registreerimine</translation> <translation id="649050271426829538">Peatatud – paberiummistus</translation> <translation id="6517239166834772319">Avastamine</translation> <translation id="6527081081771465939">Tundmatu WiFi-turvaprotokoll</translation> +<translation id="6532051501443766164">Peida aruanne</translation> <translation id="65587193855025101">Tasaskanner</translation> <translation id="6564646048574748301">Ebaõnnestus – printeriga ei saa ühendust</translation> <translation id="6618744767048954150">Pooleli</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Tühjenda</translation> <translation id="6704062477274546131">DNS-lahendus</translation> <translation id="6747215703636344499">Peatatud – väljastussalv on täis</translation> +<translation id="6756731097889387912">Skannimist ei õnnestunud tühistada</translation> <translation id="6766275201586212568">Ebaõnnestunud DNS-lahendused</translation> <translation id="6768237774506518020">DNS-lahenduste ebaõnnestumiste kõrge määr</translation> <translation id="6839141349259399400">Kas skanneritega ei õnnestu ühendust luua?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Pikk HTTPS-i latentsusaeg</translation> <translation id="7658239707568436148">Tühista</translation> <translation id="7690294790491645610">Kinnitage uus parool</translation> +<translation id="7732651821766520760">Test <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Olek</translation> <translation id="7855434858642800953">Skannitud fail on salvestatud.</translation> <translation id="7928373994957558460">Kuva faili asukoht</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Vaikimisi</translation> <translation id="8845001906332463065">Otsige abi</translation> +<translation id="8881098542468797602">Test õnnestus</translation> <translation id="8910721771319628100">Vaikevõrk ületab latentsusaja piiri</translation> <translation id="8919837981463578619">Ebaõnnestus – salv puudub</translation> <translation id="8928727111548978589">Ebaõnnestus – paber on otsas</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />, <ph name="ATTEMPTS_LEFT" /> katset jäänud</translation> <translation id="8970109610781093811">Käita uuesti</translation> <translation id="9088306295921699330">Praegune kasutus</translation> <translation id="910415269708673980">Kasutaja <ph name="PRINCIPAL_NAME" /> pileti värskendamine</translation> <translation id="9106415115617144481">Lehe <ph name="PAGE_NUMBER" /> skannimine</translation> <translation id="9111102763498581341">Ava lukk</translation> +<translation id="9149391708638971077">Käita mälutest</translation> +<translation id="982713511914535780">Käita tühjenemise test</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb index ed7cd00..319dc1e 100644 --- a/chromeos/strings/chromeos_strings_eu.xtb +++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Ezin izan da hasi eskaneatzen</translation> <translation id="1071587090247825784">suebakia hauteman da</translation> <translation id="1075811647922107217">Orriaren tamaina</translation> +<translation id="1124772482545689468">Erabiltzailea</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> domeinuak kudeatzen du <ph name="DEVICE_TYPE" /> gailua.</translation> <translation id="1195447618553298278">Errore ezezaguna.</translation> <translation id="1204296502688602597">DNSaren itxarote-denbora</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> saiakera gelditzen dira</translation> <translation id="2391082728065870591">Bidali zerbitzuari buruzko iritzien txostena</translation> <translation id="2461822463642141190">Uneko kontsumoa</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} saiaketa gelditzen da}other{<ph name="ERROR_MESSAGE" /> {0} saiakera gelditzen dira}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Bilatu</translation> <translation id="2570743873672969996">Abian da <ph name="TEST_NAME" /> proba…</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Aplikazioak</translation> <translation id="2872961005593481000">Itzali</translation> <translation id="3008341117444806826">FRESKATU</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Konexio-diagnostikoak</translation> <translation id="3091839911843451378">Hutsegitea - Gelditu egin da</translation> +<translation id="3102119246920354026">Cachea</translation> +<translation id="3122464029669770682">PUZ</translation> <translation id="3188257591659621405">Nire fitxategiak</translation> <translation id="3199982728237701504">Dokumentu-elikatzailea (bi aldekoa)</translation> <translation id="3246869037381808805">Egun bat baino gehiagoko inprimatze-lanak kendu egingo dira</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Pasahitz berria</translation> <translation id="3865414814144988605">Bereizmena</translation> <translation id="3941014780699102620">Ezin izan da ebatzi ostalaria</translation> +<translation id="3942420633017001071">Diagnostikoak</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> egun baino gehiagoko inprimatze-lanak kendu egingo dira</translation> <translation id="4003384961948020559">Hutsegitea - Irteera-erretilua beteta dago</translation> <translation id="4034824040120875894">Inprimagailua</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> segundo behar izan dira <ph name="RATE" /> kargatzeko.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Exekutatu</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Bateriaren egoera</translation> <translation id="520299634122159966">Ez dago eskanerrik erabilgarri</translation> <translation id="5212543919916444558">Ezin dizut lagundu pantailako ezerekin. @@ -125,7 +130,7 @@ <translation id="5719918614880940190">PUZaren erabilera neurtzen du honek, eta nukleo guztien multzokatze bat da</translation> <translation id="5832805196449965646">Gehitu pertsona bat</translation> <translation id="5895138241574237353">Berrabiarazi</translation> -<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, <ph name="MILESTONE_VERSION" />. bertsioa)</translation> +<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, <ph name="MILESTONE_VERSION" /> bertsioa)</translation> <translation id="6040143037577758943">Itxi</translation> <translation id="6048107060512778456">Hutsegitea - Papera trabatuta dago</translation> <translation id="6050189528197190982">Gris-eskala</translation> @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Lortu informazio gehiago</translation> <translation id="6191293864534840972">Gaizki eratuta daude izenen zerbitzariak</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Huts egin du</translation> <translation id="636850387210749493">Erregistratu erakundean</translation> <translation id="649050271426829538">Geldituta: papera trabatuta dago</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Sare lehenetsia itxarote-denboraren atalasetik gora dago</translation> <translation id="8919837981463578619">Hutsegitea - Erretilua falta da</translation> <translation id="8928727111548978589">Hutsegitea - Ez dago paperik</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> saiakera gelditzen dira</translation> <translation id="9088306295921699330">Uneko erabilera</translation> <translation id="910415269708673980">Freskatu <ph name="PRINCIPAL_NAME" /> erabiltzailearen zerbitzu-eskaera</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />. orria eskaneatzen</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index 6c66d2b5..e1f53eeb 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">اسکن شروع نشد</translation> <translation id="1071587090247825784">دیوار آتش شناسایی شد</translation> <translation id="1075811647922107217">اندازه صفحه</translation> +<translation id="1124772482545689468">کاربر</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> این <ph name="DEVICE_TYPE" /> را مدیریت میکند.</translation> <translation id="1195447618553298278">خطای ناشناس.</translation> <translation id="1204296502688602597">تأخیر ساناد</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> فرصت باقی مانده است</translation> <translation id="2391082728065870591">ارسال گزارش بازخورد</translation> <translation id="2461822463642141190">فعلی</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} فرصت باقی مانده است}one{<ph name="ERROR_MESSAGE" /> {0} فرصت باقی مانده است}other{<ph name="ERROR_MESSAGE" /> {0} فرصت باقی مانده است}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">اسکن</translation> <translation id="2570743873672969996">درحال اجرای آزمایش <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">سیستم</translation> <translation id="2805756323405976993">برنامهها</translation> <translation id="2872961005593481000">خاموش کردن</translation> <translation id="3008341117444806826">بازخوانی</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> میلیآمپر</translation> <translation id="3083667275341675831">تشخیص خطای اتصال</translation> <translation id="3091839911843451378">انجام نشد - متوقف شده است</translation> +<translation id="3102119246920354026">حافظه پنهان</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">فایلهای من</translation> <translation id="3199982728237701504">تغذیهکننده سند (دورو)</translation> <translation id="3246869037381808805">کارهای چاپ قدیمیتر از ۱ روز برداشته میشوند</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">گذرواژه جدید</translation> <translation id="3865414814144988605">وضوح</translation> <translation id="3941014780699102620">حل کردن میزبان انجام نشد</translation> +<translation id="3942420633017001071">تشخیص خطا</translation> <translation id="39823212440917567">کارهای چاپ قدیمیتر از <ph name="NUMBER_OF_DAYS" /> روز برداشته میشوند</translation> <translation id="4003384961948020559">انجام نشد - خروجی پُر است</translation> <translation id="4034824040120875894">چاپگر</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">در <ph name="NUM_SECONDS" /> ثانیه <ph name="RATE" /> شارژ شد.</translation> <translation id="4932733599132424254">تاریخ</translation> <translation id="4985509611418653372">اجرا</translation> +<translation id="5154917547274118687">حافظه</translation> <translation id="5168185087976003268">سلامت باتری</translation> <translation id="520299634122159966">اسکنری دردسترس نیست</translation> <translation id="5212543919916444558">در صفحهتان چیزی پیدا نمیکنم تا درمورد آن کمکتان کنم. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">بیشتر بدانید</translation> <translation id="6191293864534840972">سرورهای نام دامنه ناقص است</translation> +<translation id="6232017090690406397">باتری</translation> <translation id="6325525973963619867">ناموفق بود</translation> <translation id="636850387210749493">ثبتنام شرکت</translation> <translation id="649050271426829538">متوقف شد - کاغذ گیر کرده است</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">آستانه تأخیر در شبکه پیشفرض خیلی زیاد است</translation> <translation id="8919837981463578619">انجام نشد - سینی موجود نیست</translation> <translation id="8928727111548978589">انجام نشد - کاغذ تمام شده است</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> فرصت باقی مانده است</translation> <translation id="8970109610781093811">اجرای دوباره</translation> <translation id="9088306295921699330">مصرف فعلی</translation> <translation id="910415269708673980">بازخوانی بلیت برای <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb index f22dd59c..37f7f7d 100644 --- a/chromeos/strings/chromeos_strings_fi.xtb +++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skannauksen aloittaminen ei onnistunut</translation> <translation id="1071587090247825784">Palomuuri havaittu</translation> <translation id="1075811647922107217">Sivun koko</translation> +<translation id="1124772482545689468">Käyttäjä</translation> <translation id="1175697296044146566">Laitetta (<ph name="DEVICE_TYPE" />) ylläpitää <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Tuntematon virhe.</translation> <translation id="1204296502688602597">DNS-viive</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> ylläpitää tätä käyttäjää ja voi muuttaa asetuksia ja seurata käyttäjän toimia etänä.</translation> <translation id="150962533380566081">Virheellinen PUK-koodi</translation> <translation id="1510238584712386396">Käynnistysohjelma</translation> +<translation id="1621067168122174824">Suorita lataustesti</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> säiettä)</translation> <translation id="1641857168437328880">Syöttölaite (yksipuolinen)</translation> <translation id="1644574205037202324">Historia</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Kirje</translation> <translation id="1706391837335750954">DNS-ratkaisija paikalla</translation> <translation id="1743558184855585519">Akkua pidetään kulutettuna, kun se saavuttaa rajan</translation> +<translation id="1792647875738159689">Perutaan skannausta</translation> <translation id="1905710495812624430">Yritysten enimmäismäärä ylitettiin.</translation> <translation id="1930797645656624981">Chrome-käyttöjärjestelmän syöttöpalvelu</translation> <translation id="1947737735496445907">Tulostettu</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> yritystä jäljellä</translation> <translation id="2391082728065870591">Lähetä palauteraportti</translation> <translation id="2461822463642141190">Nykyinen</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} yritys jäljellä}other{<ph name="ERROR_MESSAGE" /> {0} yritystä jäljellä}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Etsi</translation> <translation id="2570743873672969996">Tehdään testiä <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Järjestelmä</translation> <translation id="2805756323405976993">Sovellukset</translation> <translation id="2872961005593481000">Sammuta</translation> <translation id="3008341117444806826">PÄIVITÄ</translation> <translation id="3009958530611748826">Valitse tallennuskansio</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Testi epäonnistui</translation> <translation id="3083667275341675831">Yhteysdiagnostiikka</translation> <translation id="3091839911843451378">Epäonnistui – Pysäytetty</translation> +<translation id="3102119246920354026">Välimuisti</translation> +<translation id="3122464029669770682">Keskusyksikkö</translation> <translation id="3188257591659621405">Omat tiedostot</translation> <translation id="3199982728237701504">Syöttölaite (kaksipuolinen)</translation> <translation id="3246869037381808805">Yli päivän vanhat tulostustyöt poistetaan</translation> <translation id="3268178239013324452">Epäonnistui – Luukku auki</translation> <translation id="3310640316857623290">DNS-viive merkittävästi yli sallitun rajan</translation> +<translation id="3328783797891415197">Testi käynnissä</translation> <translation id="3369013195428705271">Haluatko varmasti poistaa tulostushistorian? Käynnissä olevia tulostustöitä ei poisteta.</translation> <translation id="3456078764689556234">Tulostettu <ph name="PRINTED_PAGES" />/<ph name="TOTAL_PAGES" /> sivua.</translation> <translation id="3459509316159669723">Tulostaminen</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Uusi salasana</translation> <translation id="3865414814144988605">Resoluutio</translation> <translation id="3941014780699102620">Isännän selvittäminen epäonnistui</translation> +<translation id="3942420633017001071">Diagnostiikka</translation> <translation id="39823212440917567">Yli <ph name="NUMBER_OF_DAYS" /> päivää vanhat tulostustyöt poistetaan</translation> <translation id="4003384961948020559">Epäonnistui – Syöte täynnä</translation> <translation id="4034824040120875894">Tulostin</translation> <translation id="4131410914670010031">Mustavalkoinen</translation> <translation id="4145784616224233563">HTTP-palomuuri</translation> +<translation id="4170700058716978431">EPÄONNISTUI</translation> <translation id="4227825898293920515">Salasana vanhenee: <ph name="TIME" /></translation> <translation id="4238516577297848345">Ei tulostustöitä käynnissä</translation> <translation id="4297501883039923494">Pysähtynyt – Tuntematon virhe</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Keskeytetty</translation> <translation id="4808449224298348341">Peruutettu tulostustyö: <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Valitse kansio Tiedostot-sovelluksesta…</translation> +<translation id="4848429997038228357">KÄYNNISSÄ</translation> <translation id="4890353053343094602">Valitse uusi välittömästi</translation> <translation id="4917889632206600977">Pysähtynyt – Paperi loppu</translation> <translation id="4921665434385737356"><ph name="RATE" /> ladattiin <ph name="NUM_SECONDS" /> sekunnissa.</translation> <translation id="4932733599132424254">Päiväys</translation> <translation id="4985509611418653372">Suorita</translation> +<translation id="500920857929044050">Lopeta testi</translation> +<translation id="5154917547274118687">Muisti</translation> <translation id="5168185087976003268">Akun toiminta</translation> <translation id="520299634122159966">Skannereita ei saatavilla</translation> <translation id="5212543919916444558">En löydä näytöltä mitään, minkä kanssa voisin auttaa sinua. Napauta mikrofonia, niin voit kysyä mitä haluat.</translation> <translation id="5222676887888702881">Kirjaudu ulos</translation> +<translation id="5264277876637023664">Suorita CPU-testi</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Suorita ohjelmat uudelleen</translation> <translation id="5317780077021120954">Tallenna</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Ylläpidetty</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Katso lisätietoja ohjekeskuksesta</translation> +<translation id="5635169860413004179">Katso raportti</translation> <translation id="5719918614880940190">Tämä mittaa prosessorin käyttöä ja tarkoittaa kaikkien ytimien yhteissummaa</translation> +<translation id="5797428682393400134">ONNISTUI</translation> <translation id="5832805196449965646">Lisää henkilö</translation> <translation id="5895138241574237353">Käynnistä uudelleen</translation> +<translation id="5931523347251946569">Tiedostoa ei löydy</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versio <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Sulje</translation> <translation id="6048107060512778456">Epäonnistui – Paperitukos</translation> <translation id="6050189528197190982">Harmaasävy</translation> <translation id="6058625436358447366">Lisää lopuksi vanha ja uusi salasana</translation> <translation id="6061772781719867950">Hylätyt HTTP-pyynnöt</translation> +<translation id="6104112872696127344">Skannaus on peruttu</translation> <translation id="6106186594183574873">Lisää lopuksi vanha salasana</translation> <translation id="6108689792487843350">Yhdyskäytävään ei saa yhteyttä</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Lisää lopuksi uusi salasana</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Lisätietoja</translation> <translation id="6191293864534840972">Nimipalvelimet väärän muotoisia</translation> +<translation id="6232017090690406397">Akku</translation> <translation id="6325525973963619867">Epäonnistui</translation> <translation id="636850387210749493">Yritysversion käyttöönotto</translation> <translation id="649050271426829538">Pysähtynyt – Paperitukos</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Tuntematon Wi-Fi-suojausprotokolla</translation> +<translation id="6532051501443766164">Piilota raportti</translation> <translation id="65587193855025101">Tasoskanneri</translation> <translation id="6564646048574748301">Epäonnistui – Ei yhteyttä tulostimeen</translation> <translation id="6618744767048954150">Käynnissä</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Tyhjennä</translation> <translation id="6704062477274546131">DNS-ratkaisu</translation> <translation id="6747215703636344499">Pysähtynyt – Syöte täynnä</translation> +<translation id="6756731097889387912">Skannausta ei voitu perua</translation> <translation id="6766275201586212568">Hylätyt DNS-selvitykset</translation> <translation id="6768237774506518020">Suuri DNS-selvitysten hylkäysprosentti</translation> <translation id="6839141349259399400">Etkö pysty yhdistämään skannereihin?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Suuri HTTPS-viive</translation> <translation id="7658239707568436148">Peruuta</translation> <translation id="7690294790491645610">Vahvista uusi salasana</translation> +<translation id="7732651821766520760">Testi: <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Tila</translation> <translation id="7855434858642800953">Skannattu tiedosto tallennettu!</translation> <translation id="7928373994957558460">Näytä tiedoston sijainti</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Oletus</translation> <translation id="8845001906332463065">Hae ohjeita</translation> +<translation id="8881098542468797602">Testi onnistui</translation> <translation id="8910721771319628100">Oletusverkko yli viiverajan</translation> <translation id="8919837981463578619">Epäonnistui – Lokero puuttuu</translation> <translation id="8928727111548978589">Epäonnistui – Paperi loppu</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> yritystä jäljellä</translation> <translation id="8970109610781093811">Suorita uudelleen</translation> <translation id="9088306295921699330">Nykyinen käyttö</translation> <translation id="910415269708673980">Päivitä tukipyyntö: <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skannataan sivu <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Poista lukitus</translation> +<translation id="9149391708638971077">Suorita muistitesti</translation> +<translation id="982713511914535780">Suorita purkautumistesti</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb index 514aba62c..4bd01597 100644 --- a/chromeos/strings/chromeos_strings_fil.xtb +++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Hindi masimulan ang pag-scan</translation> <translation id="1071587090247825784">May na-detect na firewall</translation> <translation id="1075811647922107217">Laki ng page</translation> +<translation id="1124772482545689468">User</translation> <translation id="1175697296044146566">Pinapamahalaan ng <ph name="MANAGER" /> ang <ph name="DEVICE_TYPE" /> na ito.</translation> <translation id="1195447618553298278">Hindi kilalang error.</translation> <translation id="1204296502688602597">Latency ng DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">Pinapamahalaan ng <ph name="MANAGER" /> ang user na ito at puwede nitong pamahalaan ang mga setting at subaybayan ang aktibidad ng user sa remote na paraan.</translation> <translation id="150962533380566081">Di-wasto ang PUK.</translation> <translation id="1510238584712386396">Launcher</translation> +<translation id="1621067168122174824">Patakbuhin ang pagsusuri sa Pag-charge</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> (na) thread)</translation> <translation id="1641857168437328880">Document Feeder (Isang bahagi)</translation> <translation id="1644574205037202324">History</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">May DNS Resolver</translation> <translation id="1743558184855585519">Itinuturing na nakonsumo ang baterya kapag naabot na nito ang limitasyon</translation> +<translation id="1792647875738159689">Kinakansela ang pag-scan</translation> <translation id="1905710495812624430">Nalampasan na ang maximum na pinapahintulutang bilang ng pagsubok</translation> <translation id="1930797645656624981">Serbisyo ng Pamamaraan ng Pag-input ng Chrome OS</translation> <translation id="1947737735496445907">Na-print</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> (na) pagsubok ang natitira</translation> <translation id="2391082728065870591">Magpadala ng Ulat ng Feedback</translation> <translation id="2461822463642141190">Kasalukuyan</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} pagsubok na lang ang natitira}one{<ph name="ERROR_MESSAGE" /> {0} pagsubok na lang ang natitira}other{<ph name="ERROR_MESSAGE" /> {0} na pagsubok na lang ang natitira}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">I-scan</translation> <translation id="2570743873672969996">Nagpapatakbo ng test sa <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Mga App</translation> <translation id="2872961005593481000">Shut down</translation> <translation id="3008341117444806826">I-REFRESH</translation> <translation id="3009958530611748826">Pumili ng folder kung saan magse-save</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">Nabigo ang pagsubok</translation> <translation id="3083667275341675831">Mga Diagnostic sa Pagkakonekta</translation> <translation id="3091839911843451378">Hindi na-print - Huminto</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Aking mga file</translation> <translation id="3199982728237701504">Document Feeder (Dalawang bahagi)</translation> <translation id="3246869037381808805">Aalisin ang mga pag-print na lampas 1 araw na</translation> <translation id="3268178239013324452">Hindi na-print - Nakabukas ang takip</translation> <translation id="3310640316857623290">Napakataas kumpara sa pinapayagang limitasyon ang latency ng DNS</translation> +<translation id="3328783797891415197">Tumatakbo ang pagsusuri</translation> <translation id="3369013195428705271">Sigurado ka bang gusto mong i-clear ang lahat ng history ng pag-print? Hindi maki-clear ang iyong mga kasalukuyang pag-print.</translation> <translation id="3456078764689556234">Na-print ang page <ph name="PRINTED_PAGES" /> sa <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Pagpi-print</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Bagong password</translation> <translation id="3865414814144988605">Resolution</translation> <translation id="3941014780699102620">Hindi nalutas ang host</translation> +<translation id="3942420633017001071">Diagnostics</translation> <translation id="39823212440917567">Aalisin ang mga pag-print na lampas <ph name="NUMBER_OF_DAYS" /> (na) araw na</translation> <translation id="4003384961948020559">Hindi na-print - Puno ang output</translation> <translation id="4034824040120875894">Printer</translation> <translation id="4131410914670010031">Itim at puti</translation> <translation id="4145784616224233563">Firewall ng HTTP</translation> +<translation id="4170700058716978431">NABIGO</translation> <translation id="4227825898293920515">Mag-e-expire ang password sa loob ng <ph name="TIME" /></translation> <translation id="4238516577297848345">Walang kasalukuyang pag-print</translation> <translation id="4297501883039923494">Huminto - Hindi kilalang error</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Inihinto</translation> <translation id="4808449224298348341">Kinansela ang pag-print ng <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Pumili ng folder sa Files app...</translation> +<translation id="4848429997038228357">TUMATAKBO</translation> <translation id="4890353053343094602">Pumili agad ng bago</translation> <translation id="4917889632206600977">Huminto - Wala nang papel</translation> <translation id="4921665434385737356">Na-charge nang <ph name="RATE" /> sa loob ng <ph name="NUM_SECONDS" /> (na) segundo.</translation> <translation id="4932733599132424254">Petsa</translation> <translation id="4985509611418653372">Patakbuhin</translation> +<translation id="500920857929044050">Ihinto ang pagsusuri</translation> +<translation id="5154917547274118687">Memorya</translation> <translation id="5168185087976003268">Tagal ng baterya</translation> <translation id="520299634122159966">Walang available na scanner</translation> <translation id="5212543919916444558">Wala akong makitang kahit ano sa iyong screen kung saan ako makakatulong. Subukang i-tap ang mikropono para humiling sa akin ng kahit ano.</translation> <translation id="5222676887888702881">Mag-sign out</translation> +<translation id="5264277876637023664">Patakbuhin ang pagsusuri sa CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Patakbuhin Ulit ang Mga Routine</translation> <translation id="5317780077021120954">I-save</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Pinamamahalaan</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Matuto pa sa Help Center</translation> +<translation id="5635169860413004179">Tingnan ang Ulat</translation> <translation id="5719918614880940190">Sinusukat nito ang paggamit ng CPU, at ito ang pagsasama-sama ng lahat ng core</translation> +<translation id="5797428682393400134">TAGUMPAY</translation> <translation id="5832805196449965646">Magdagdag ng Tao</translation> <translation id="5895138241574237353">I-restart</translation> +<translation id="5931523347251946569">Hindi nahanap ang file</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, bersyon <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Isara</translation> <translation id="6048107060512778456">Hindi na-print - Naipit ang papel</translation> <translation id="6050189528197190982">Grayscale</translation> <translation id="6058625436358447366">Para tapusin, ilagay ang iyong luma at bagong password</translation> <translation id="6061772781719867950">Mga hindi naisagawang kahilingang HTTP</translation> +<translation id="6104112872696127344">Nakansela ang pag-scan</translation> <translation id="6106186594183574873">Para tapusin, ilagay ang iyong lumang password</translation> <translation id="6108689792487843350">Hindi makakonekta sa gateway</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">Para tapusin, ilagay ang bago mong password</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Matuto pa</translation> <translation id="6191293864534840972">Mali ang format ng mga name server</translation> +<translation id="6232017090690406397">Baterya</translation> <translation id="6325525973963619867">Nabigo</translation> <translation id="636850387210749493">Pagpapatala ng negosyo</translation> <translation id="649050271426829538">Huminto - Nagka-paper jam</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Hindi alam na panseguridad na protocol ng WiFi</translation> +<translation id="6532051501443766164">Itago ang Ulat</translation> <translation id="65587193855025101">Flatbed</translation> <translation id="6564646048574748301">Hindi na-print - Hindi makakonekta sa printer</translation> <translation id="6618744767048954150">Tumatakbo</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">I-clear</translation> <translation id="6704062477274546131">Resolution ng DNS</translation> <translation id="6747215703636344499">Huminto - Puno na ang output</translation> +<translation id="6756731097889387912">Hindi makansela ang pag-scan</translation> <translation id="6766275201586212568">May mga hindi naisagawang pagresolba sa DNS</translation> <translation id="6768237774506518020">Mataas na rate ng hindi naisagawang pagresolba sa DNS</translation> <translation id="6839141349259399400">Hindi makakonekta sa mga scanner?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Mataas na latency ng HTTPS</translation> <translation id="7658239707568436148">Kanselahin</translation> <translation id="7690294790491645610">Kumpirmahin ang bagong password</translation> +<translation id="7732651821766520760">Pagsusuri sa <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Katayuan</translation> <translation id="7855434858642800953">Na-save ang na-scan na file!</translation> <translation id="7928373994957558460">Ipakita ang lokasyon ng file</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Default</translation> <translation id="8845001906332463065">Humingi ng tulong</translation> +<translation id="8881098542468797602">Nagtagumpay ang pagsusuri</translation> <translation id="8910721771319628100">Mas mataas sa limitasyon ng latency ang default na network</translation> <translation id="8919837981463578619">Hindi na-print - Walang tray</translation> <translation id="8928727111548978589">Hindi na-print - Wala nang papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> (na) pagsubok ang natitira</translation> <translation id="8970109610781093811">Patakbuhing muli</translation> <translation id="9088306295921699330">Kasalukuyang paggamit</translation> <translation id="910415269708673980">I-refresh ang ticket para sa <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Sina-scan ang pahina <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">I-unlock</translation> +<translation id="9149391708638971077">Patakbuhin ang pagsusuri sa Memory</translation> +<translation id="982713511914535780">Patakbuhin ang pagsusuri sa Discharge</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb index ea212a18..0b6d752 100644 --- a/chromeos/strings/chromeos_strings_fr-CA.xtb +++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Impossible de démarrer la numérisation</translation> <translation id="1071587090247825784">Pare-feu détecté</translation> <translation id="1075811647922107217">Taille de la page</translation> +<translation id="1124772482545689468">Utilisateur</translation> <translation id="1175697296044146566">Ce <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Erreur inconnue.</translation> <translation id="1204296502688602597">Latence DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Il vous reste <ph name="ATTEMPTS_LEFT" /> tentatives</translation> <translation id="2391082728065870591">Envoyer un rapport de commentaires</translation> <translation id="2461822463642141190">Actuelle</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Il reste {0} tentative}one{<ph name="ERROR_MESSAGE" /> Il reste {0} tentative}many{<ph name="ERROR_MESSAGE" /> {0} attempts left}other{<ph name="ERROR_MESSAGE" /> Il reste {0} tentatives}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Rechercher</translation> <translation id="2570743873672969996">Le test <ph name="TEST_NAME" /> est en cours d'exécution…</translation> +<translation id="2620436844016719705">Système</translation> <translation id="2805756323405976993">Applications</translation> <translation id="2872961005593481000">Arrêter</translation> <translation id="3008341117444806826">ACTUALISER</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostics de connectivité</translation> <translation id="3091839911843451378">Échec : imprimante arrêtée</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">Processeur</translation> <translation id="3188257591659621405">Mes fichiers</translation> <translation id="3199982728237701504">Chargeur de document (recto verso)</translation> <translation id="3246869037381808805">Les tâches d'impression de plus d'un jour seront retirées</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nouveau mot de passe</translation> <translation id="3865414814144988605">Résolution</translation> <translation id="3941014780699102620">Impossible de résoudre l'hôte</translation> +<translation id="3942420633017001071">Diagnostics</translation> <translation id="39823212440917567">Les tâches d'impression datant de plus de <ph name="NUMBER_OF_DAYS" /> jours seront supprimées</translation> <translation id="4003384961948020559">Échec : bac de sortie plein</translation> <translation id="4034824040120875894">Imprimante</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">L'appareil s'est rechargé de <ph name="RATE" /> en <ph name="NUM_SECONDS" /> secondes.</translation> <translation id="4932733599132424254">Date</translation> <translation id="4985509611418653372">Exécuter</translation> +<translation id="5154917547274118687">Mémoire</translation> <translation id="5168185087976003268">État de la pile</translation> <translation id="520299634122159966">Aucun numériseur disponible</translation> <translation id="5212543919916444558">Je ne trouve aucun élément sur votre écran pour lequel je peux vous aider. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">En savoir plus</translation> <translation id="6191293864534840972">Le format des serveurs de nom est incorrect</translation> +<translation id="6232017090690406397">Pile</translation> <translation id="6325525973963619867">Échec</translation> <translation id="636850387210749493">Inscription d'entreprise</translation> <translation id="649050271426829538">Tâche arrêtée : bourrage de papier</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Le seuil de latence du réseau par défaut est trop élevé</translation> <translation id="8919837981463578619">Échec : bac manquant</translation> <translation id="8928727111548978589">Échec : à court de papier</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Nombre de tentatives restantes : <ph name="ATTEMPTS_LEFT" /></translation> <translation id="9088306295921699330">Utilisation actuelle</translation> <translation id="910415269708673980">Actualiser le ticket pour <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Numérisation de la page <ph name="PAGE_NUMBER" /> en cours…</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb index b08424b4..deac1d4 100644 --- a/chromeos/strings/chromeos_strings_fr.xtb +++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Impossible de lancer la numérisation</translation> <translation id="1071587090247825784">Pare-feu détecté</translation> <translation id="1075811647922107217">Taille de page</translation> +<translation id="1124772482545689468">Utilisateur</translation> <translation id="1175697296044146566">Votre <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Erreur inconnue</translation> <translation id="1204296502688602597">Latence avec le DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentatives restantes</translation> <translation id="2391082728065870591">Envoyer un rapport de commentaires</translation> <translation id="2461822463642141190">Consommation actuelle</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} tentative restante}one{<ph name="ERROR_MESSAGE" /> {0} tentative restante}many{<ph name="ERROR_MESSAGE" /> {0} attempts left}other{<ph name="ERROR_MESSAGE" /> {0} tentatives restantes}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Rechercher</translation> <translation id="2570743873672969996">Exécution du test <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Système</translation> <translation id="2805756323405976993">Applications</translation> <translation id="2872961005593481000">Éteindre</translation> <translation id="3008341117444806826">ACTUALISER</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostic de connectivité</translation> <translation id="3091839911843451378">Échec – Imprimante à l'arrêt</translation> +<translation id="3102119246920354026">Vider le cache</translation> +<translation id="3122464029669770682">UC</translation> <translation id="3188257591659621405">Mes fichiers</translation> <translation id="3199982728237701504">Chargeur de document (recto verso)</translation> <translation id="3246869037381808805">Les tâches d'impression de plus d'un jour seront supprimées</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nouveau mot de passe</translation> <translation id="3865414814144988605">Résolution</translation> <translation id="3941014780699102620">Impossible de résoudre l'hôte</translation> +<translation id="3942420633017001071">Diagnostics</translation> <translation id="39823212440917567">Les tâches d'impression de plus de <ph name="NUMBER_OF_DAYS" /> jours seront supprimées</translation> <translation id="4003384961948020559">Échec – Bac de sortie plein</translation> <translation id="4034824040120875894">Imprimante</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="RATE" /> chargés en <ph name="NUM_SECONDS" /> secondes.</translation> <translation id="4932733599132424254">Date</translation> <translation id="4985509611418653372">Exécuter</translation> +<translation id="5154917547274118687">Mémoire</translation> <translation id="5168185087976003268">État de la batterie</translation> <translation id="520299634122159966">Aucun scanner disponible</translation> <translation id="5212543919916444558">Je ne parviens pas à détecter d'éléments sur votre écran pour lesquels je peux vous aider. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">En savoir plus</translation> <translation id="6191293864534840972">Serveurs de noms non valides</translation> +<translation id="6232017090690406397">Batterie</translation> <translation id="6325525973963619867">Échec</translation> <translation id="636850387210749493">Inscription d'entreprise</translation> <translation id="649050271426829538">Tâche suspendue - Bourrage papier</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Seuil de latence dépassé pour le réseau par défaut</translation> <translation id="8919837981463578619">Échec – Bac à papier manquant</translation> <translation id="8928727111548978589">Échec – À court de papier</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> tentatives restantes</translation> <translation id="8970109610781093811">Exécuter à nouveau</translation> <translation id="9088306295921699330">Utilisation actuelle</translation> <translation id="910415269708673980">Actualiser le ticket associé à <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb index 56da926c..217dcbb4 100644 --- a/chromeos/strings/chromeos_strings_gl.xtb +++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Non se puido iniciar o escaneo</translation> <translation id="1071587090247825784">Detectouse un firewall</translation> <translation id="1075811647922107217">Tamaño da páxina</translation> +<translation id="1124772482545689468">Usuario</translation> <translation id="1175697296044146566">Este dispositivo (<ph name="DEVICE_TYPE" />) está xestionado por <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Erro descoñecido.</translation> <translation id="1204296502688602597">Latencia de DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Quédanche <ph name="ATTEMPTS_LEFT" /> intentos</translation> <translation id="2391082728065870591">Enviar informe de comentarios</translation> <translation id="2461822463642141190">Actual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Queda {0} intento}other{<ph name="ERROR_MESSAGE" /> Quedan {0} intentos}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Buscar</translation> <translation id="2570743873672969996">Executando proba de <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Aplicacións</translation> <translation id="2872961005593481000">Pechar</translation> <translation id="3008341117444806826">ACTUALIZAR</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnósticos de conectividade</translation> <translation id="3091839911843451378">Produciuse un erro: a impresora está detida</translation> +<translation id="3102119246920354026">Caché</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Os meus ficheiros</translation> <translation id="3199982728237701504">Alimentador de documentos (a dúas caras)</translation> <translation id="3246869037381808805">Quitaranse os traballos de impresión de máis de 1 día</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Novo contrasinal</translation> <translation id="3865414814144988605">Resolución</translation> <translation id="3941014780699102620">Produciuse un erro ao resolver o host</translation> +<translation id="3942420633017001071">Diagnósticos</translation> <translation id="39823212440917567">Quitaranse os traballos de impresión de máis de <ph name="NUMBER_OF_DAYS" /> días</translation> <translation id="4003384961948020559">Produciuse un erro: a saída da impresora está chea</translation> <translation id="4034824040120875894">Impresora</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Cargouse un <ph name="RATE" /> en <ph name="NUM_SECONDS" /> segundos.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Executar</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Estado da batería</translation> <translation id="520299634122159966">Non hai ningún escáner dispoñible</translation> <translation id="5212543919916444558">Non atopo nada na pantalla co que che poida axudar. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Máis información</translation> <translation id="6191293864534840972">Os servidores de nomes teñen un formato incorrecto</translation> +<translation id="6232017090690406397">Batería</translation> <translation id="6325525973963619867">Produciuse un erro</translation> <translation id="636850387210749493">Inscrición corporativa</translation> <translation id="649050271426829538">Detívose (atasco de papel)</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">A rede predeterminada supera o límite de latencia</translation> <translation id="8919837981463578619">Produciuse un erro: falta a bandexa</translation> <translation id="8928727111548978589">Produciuse un erro: a impresora quedou sen papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Intentos restantes: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="9088306295921699330">En uso</translation> <translation id="910415269708673980">Actualiza o tícket de <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Escaneando páxina <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb index 73f89860..a684c7a 100644 --- a/chromeos/strings/chromeos_strings_gu.xtb +++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">સ્કૅન કરવાનું શરૂ કરી શક્યા નથી</translation> <translation id="1071587090247825784">ફાયરવૉલ હોવાની જાણકારી મળી</translation> <translation id="1075811647922107217">પેજનું કદ</translation> +<translation id="1124772482545689468">વપરાશકર્તા</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> દ્વારા <ph name="DEVICE_TYPE" />ને મેનેજ કરવામાં આવે છે.</translation> <translation id="1195447618553298278">અજ્ઞાત ભૂલ.</translation> <translation id="1204296502688602597">DNS વિલંબતા</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> પ્રયત્ન બાકી</translation> <translation id="2391082728065870591">પ્રતિસાદ રિપોર્ટ મોકલો</translation> <translation id="2461822463642141190">વર્તમાન</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} પ્રયત્ન બાકી}one{<ph name="ERROR_MESSAGE" /> {0} પ્રયત્ન બાકી}other{<ph name="ERROR_MESSAGE" /> {0} પ્રયત્ન બાકી}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">સ્કૅન કરો</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> પરીક્ષણ ચલાવી રહ્યાં છીએ…</translation> +<translation id="2620436844016719705">સિસ્ટમ</translation> <translation id="2805756323405976993">એપ્સ</translation> <translation id="2872961005593481000">શટ ડાઉન કરો</translation> <translation id="3008341117444806826">રિફ્રેશ કરો</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">કનેક્ટિવિટીના નિદાનો</translation> <translation id="3091839911843451378">નિષ્ફળ થયું - પ્રિન્ટર બંધ થઈ ગયું છે</translation> +<translation id="3102119246920354026">કેશ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">મારી ફાઇલો</translation> <translation id="3199982728237701504">દસ્તાવેજનું ફીડર (બન્ને બાજુથી)</translation> <translation id="3246869037381808805">1 દિવસ કરતાં જૂના પ્રિન્ટ કાર્યો કાઢી નાખવામાં આવશે</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">નવો પાસવર્ડ</translation> <translation id="3865414814144988605">રિઝોલ્યુશન</translation> <translation id="3941014780699102620">હોસ્ટ રિઝોલ્વ કરવામાં નિષ્ફળ રહ્યાં</translation> +<translation id="3942420633017001071">ડાયગ્નોસ્ટિક્સ</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> દિવસ કરતાં જૂના પ્રિન્ટ કાર્યો કાઢી નાખવામાં આવશે</translation> <translation id="4003384961948020559">નિષ્ફળ થયું - પ્રિન્ટરનું આઉટપુટ ભરાઈ ગયું છે</translation> <translation id="4034824040120875894">પ્રિન્ટર</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> સેકન્ડમાં <ph name="RATE" /> ચાર્જ કરી.</translation> <translation id="4932733599132424254">તારીખ</translation> <translation id="4985509611418653372">ચલાવો</translation> +<translation id="5154917547274118687">મેમરી</translation> <translation id="5168185087976003268">બૅટરીની ક્ષમતા</translation> <translation id="520299634122159966">કોઈ સ્કૅનર ઉપલબ્ધ નથી</translation> <translation id="5212543919916444558">મને તમારી સ્ક્રીન પર એવી કોઈપણ વસ્તુ મળી નથી કે જેમાં હું તમારી સહાય કરી શકું. મને કંઈપણ પૂછવા માટે માઇકને ટૅપ કરી જુઓ.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">વધુ જાણો</translation> <translation id="6191293864534840972">અયોગ્ય ફોર્મેટ ધરાવતા નામ સર્વર</translation> +<translation id="6232017090690406397">બૅટરી</translation> <translation id="6325525973963619867">નિષ્ફળ થયું</translation> <translation id="636850387210749493">સંગઠન નોંધણી</translation> <translation id="649050271426829538">બંધ - કાગળ ફસાયો</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">ડિફૉલ્ટ નેટવર્ક ગેટવેની વિલંબતા જરૂરી થ્રેશોલ્ડ કરતાં વધુ છે</translation> <translation id="8919837981463578619">નિષ્ફળ થયું - ટ્રે ખૂટે છે</translation> <translation id="8928727111548978589">નિષ્ફળ થયું - પ્રિન્ટરમાં કાગળ પૂરા થઈ ગયા છે</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> પ્રયત્ન બાકી</translation> <translation id="8970109610781093811">ફરીથી ચલાવો</translation> <translation id="9088306295921699330">વર્તમાન વપરાશ</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> માટે ટિકિટ રિફ્રેશ કરો</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb index 1f62c7f3..7972660 100644 --- a/chromeos/strings/chromeos_strings_hi.xtb +++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">स्कैन करने की प्रोसेस शुरू नहीं हो सकी</translation> <translation id="1071587090247825784">फ़ायरवॉल पहचाना गया</translation> <translation id="1075811647922107217">पेज का साइज़</translation> +<translation id="1124772482545689468">उपयोगकर्ता</translation> <translation id="1175697296044146566">इस <ph name="DEVICE_TYPE" /> को <ph name="MANAGER" /> प्रबंधित करता है.</translation> <translation id="1195447618553298278">अज्ञात गड़बड़ी.</translation> <translation id="1204296502688602597">डिवाइस और डीएनएस के बीच के इंतज़ार का समय</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">इस उपयोगकर्ता को <ph name="MANAGER" /> प्रबंधित करता है और यह किसी दूसरी जगह पर होते हुए भी सेटिंग को प्रबंधित कर सकता है. साथ ही, यह उपयोगकर्ता की गतिविधि पर नज़र रख सकता है.</translation> <translation id="150962533380566081">गलत पीयूके.</translation> <translation id="1510238584712386396">लॉन्चर</translation> +<translation id="1621067168122174824">चार्ज टेस्ट चलाएं</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> थ्रेड)</translation> <translation id="1641857168437328880">डॉक्यूमेंट फ़ीडर (एक तरफ़ वाला)</translation> <translation id="1644574205037202324">इतिहास</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">लेटर</translation> <translation id="1706391837335750954">डीएनएस रिज़ॉल्वर मौजूद है</translation> <translation id="1743558184855585519">सीमा पूरी होने का मतलब है कि बैटरी खत्म हो गई है</translation> +<translation id="1792647875738159689">स्कैन करने की प्रोसेस रद्द की जा रही है</translation> <translation id="1905710495812624430">अधिकतम स्वीकार्य प्रयासों की सीमा पार हो गई है.</translation> <translation id="1930797645656624981">Chrome OS के इनपुट के तरीके की सेवा</translation> <translation id="1947737735496445907">प्रिंट किया गया</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> बार और कोशिश कर सकते हैं</translation> <translation id="2391082728065870591">सुझाव, शिकायत या राय की रिपोर्ट भेजें</translation> <translation id="2461822463642141190">मौजूदा</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}one{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}other{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">स्कैन करें</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> की जांच की जा रही है...</translation> +<translation id="2620436844016719705">सिस्टम</translation> <translation id="2805756323405976993">ऐप्स</translation> <translation id="2872961005593481000">शट डाउन करें</translation> <translation id="3008341117444806826">रीफ़्रेश करें</translation> <translation id="3009958530611748826">सेव करने के लिए कोई फ़ोल्डर चुनें</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">टेस्ट असफल रहा</translation> <translation id="3083667275341675831">कनेक्टिविटी डाइग्नोस्टिक्स</translation> <translation id="3091839911843451378">प्रिंट नहीं हो पाया - प्रिंटर बंद हो गया</translation> +<translation id="3102119246920354026">संचय</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">मेरी फ़ाइलें</translation> <translation id="3199982728237701504">डॉक्यूमेंट फ़ीडर (दो तरफ़ वाला)</translation> <translation id="3246869037381808805">एक दिन से ज़्यादा पुरानी, प्रिंट की गई फ़ाइलों को हटा दिया जाएगा</translation> <translation id="3268178239013324452">प्रिंट नहीं हो पाया - प्रिंटर का दरवाज़ा खुला है</translation> <translation id="3310640316857623290">डीएनएस, इंतज़ार की समयसीमा से बहुत ऊपर है</translation> +<translation id="3328783797891415197">टेस्ट चल रहा है</translation> <translation id="3369013195428705271">क्या आप वाकई अपना पूरा प्रिंट इतिहास मिटाना चाहते हैं? प्रिंट का जो काम अभी चल रहा है उसकी जानकारी (प्रिंट जॉब) नहीं मिटाई जाएगी.</translation> <translation id="3456078764689556234"><ph name="TOTAL_PAGES" /> में से <ph name="PRINTED_PAGES" /> पेज प्रिंट किए गए.</translation> <translation id="3459509316159669723">प्रिंट करना</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">नया पासवर्ड</translation> <translation id="3865414814144988605">रिज़ॉल्यूशन</translation> <translation id="3941014780699102620">होस्ट से जुड़ी समस्याओं को हल नहीं किया जा सका</translation> +<translation id="3942420633017001071">निदान</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> से ज़्यादा पुरानी, प्रिंट की गई फ़ाइलों को हटा दिया जाएगा</translation> <translation id="4003384961948020559">प्रिंट नहीं हो पाया - प्रिंटर आउटपुट फ़ुल है</translation> <translation id="4034824040120875894">प्रिंटर</translation> <translation id="4131410914670010031">श्याम और श्वेत</translation> <translation id="4145784616224233563">एचटीटीपी फ़ायरवॉल</translation> +<translation id="4170700058716978431">असफल</translation> <translation id="4227825898293920515"><ph name="TIME" /> में पासवर्ड की समयसीमा खत्म हो जाएगी</translation> <translation id="4238516577297848345">फ़िलहाल, कुछ प्रिंट नहीं हो रहा</translation> <translation id="4297501883039923494">बंद हो गया - अज्ञात गड़बड़ी</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">रोक दिया गया</translation> <translation id="4808449224298348341"><ph name="DOCUMENT_TITLE" /> के प्रिंट का काम बंद किया गया</translation> <translation id="4832079907277790330">फ़ाइल ऐप्लिकेशन में कोई फ़ोल्डर चुनें...</translation> +<translation id="4848429997038228357">चल रहा है</translation> <translation id="4890353053343094602">तुरंत कोई नया पासवर्ड चुनें</translation> <translation id="4917889632206600977">बंद हो गया - काग़ज़ खत्म हो गया</translation> <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> सेकंड में <ph name="RATE" /> चार्ज हुई.</translation> <translation id="4932733599132424254">तारीख</translation> <translation id="4985509611418653372">चलाएं</translation> +<translation id="500920857929044050">टेस्ट बंद करें</translation> +<translation id="5154917547274118687">मेमोरी</translation> <translation id="5168185087976003268">बैटरी की स्थिति</translation> <translation id="520299634122159966">कोई भी स्कैनर उपलब्ध नहीं है</translation> <translation id="5212543919916444558">मुझे आपकी स्क्रीन पर ऐसा कुछ नहीं मिला जिसमें मैं आपकी सहायता कर पाऊं. मुझे कुछ पूछने के लिए माइक टैप करके देखें.</translation> <translation id="5222676887888702881">साइन आउट करें</translation> +<translation id="5264277876637023664">सीपीयू टेस्ट चलाएं</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">रूटीन फिर से चलाएं</translation> <translation id="5317780077021120954">सेव करें</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">प्रबंधित</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">ज़्यादा जानने के लिए, सहायता केंद्र देखें</translation> +<translation id="5635169860413004179">रिपोर्ट देखें</translation> <translation id="5719918614880940190">इससे यह मापा जाता है कि सीपीयू का कितना इस्तेमाल किया गया है और यह सभी कोर का एग्रीगेट है</translation> +<translation id="5797428682393400134">सफल</translation> <translation id="5832805196449965646">व्यक्ति जोड़ें</translation> <translation id="5895138241574237353">फिर से प्रारंभ करें</translation> +<translation id="5931523347251946569">फ़ाइल नहीं मिली</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, <ph name="MILESTONE_VERSION" /> वर्शन)</translation> <translation id="6040143037577758943">बंद करें</translation> <translation id="6048107060512778456">प्रिंट नहीं हो पाया - काग़ज़ फ़ंसा है</translation> <translation id="6050189528197190982">ग्रेस्केल</translation> <translation id="6058625436358447366">पूरा करने के लिए, पुराना और नया पासवर्ड डालें</translation> <translation id="6061772781719867950">वे एचटीटीपी अनुरोध जो नहीं किए जा सके</translation> +<translation id="6104112872696127344">स्कैन करने की प्रोसेस रद्द कर दी गई है</translation> <translation id="6106186594183574873">पूरा करने के लिए, पुराना पासवर्ड डालें</translation> <translation id="6108689792487843350">गेटवे से कनेक्ट नहीं किया जा सका</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">खत्म करने के लिए, नया पासवर्ड डालें</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ज़्यादा जानें</translation> <translation id="6191293864534840972">इन नाम सर्वर के फ़ॉर्मैट सही नहीं हैं</translation> +<translation id="6232017090690406397">बैटरी</translation> <translation id="6325525973963619867">विफल</translation> <translation id="636850387210749493">एंटरप्राइज़ नामांकन</translation> <translation id="649050271426829538">बंद हो गया - काग़ज़ फंसा है</translation> <translation id="6517239166834772319">एक्सप्लोर करें</translation> <translation id="6527081081771465939">इस वाई-फ़ाई सुरक्षा प्रोटोकॉल की जानकारी नहीं है</translation> +<translation id="6532051501443766164">रिपोर्ट छिपाएं</translation> <translation id="65587193855025101">फ़्लैटबेड</translation> <translation id="6564646048574748301">प्रिंट नहीं हो पाया - प्रिंटर से कनेक्ट नहीं हो पा रहा है</translation> <translation id="6618744767048954150">जांच चल रही है</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">साफ़ करें</translation> <translation id="6704062477274546131">डीएनएस रिज़ॉल्यूशन</translation> <translation id="6747215703636344499">बंद हो गया - आउटपुट भर गया</translation> +<translation id="6756731097889387912">स्कैन करने की प्रोसेस रद्द नहीं हो सकी</translation> <translation id="6766275201586212568">वे डीएनएस रिज़ॉल्यूशन जो नहीं हो पाए</translation> <translation id="6768237774506518020">डीएनएस रिज़ॉल्यूशन नहीं हो पाने की बढ़ी हुई दर</translation> <translation id="6839141349259399400">क्या आप स्कैनर से कनेक्ट नहीं कर पा रहे हैं?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">एचटीटीपीएस अनुरोधों में इंतज़ार का समय ज़्यादा है</translation> <translation id="7658239707568436148">अभी नहीं</translation> <translation id="7690294790491645610">नए पासवर्ड की पुष्टि करें</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> टेस्ट</translation> <translation id="7805768142964895445">स्थिति</translation> <translation id="7855434858642800953">स्कैन की गई फ़ाइल सेव हो गई!</translation> <translation id="7928373994957558460">फ़ाइल की जगह की जानकारी देखें</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">ए4</translation> <translation id="8798099450830957504">सामान्य</translation> <translation id="8845001906332463065">सहायता पाएं</translation> +<translation id="8881098542468797602">टेस्ट सफल रहा</translation> <translation id="8910721771319628100">डिफ़ॉल्ट नेटवर्क, इंतज़ार की समयसीमा से ऊपर है</translation> <translation id="8919837981463578619">प्रिंट नहीं हो पाया - ट्रे मौजूद नहीं है</translation> <translation id="8928727111548978589">प्रिंट नहीं हो पाया - काग़ज़ खत्म हो गया</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> बार और कोशिश कर सकते हैं</translation> <translation id="8970109610781093811">फिर से चलाएं</translation> <translation id="9088306295921699330">मौजूदा इस्तेमाल</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> के लिए टिकट रीफ़्रेश करें</translation> <translation id="9106415115617144481">पेज <ph name="PAGE_NUMBER" /> को स्कैन किया जा रहा है</translation> <translation id="9111102763498581341">अनलॉक करें</translation> +<translation id="9149391708638971077">मेमोरी टेस्ट चलाएं</translation> +<translation id="982713511914535780">डिस्चार्ज टेस्ट चलाएं</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb index 40c00a0..838d4e7b 100644 --- a/chromeos/strings/chromeos_strings_hr.xtb +++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Pokretanje skeniranja nije uspjelo</translation> <translation id="1071587090247825784">Otkriven je vatrozid</translation> <translation id="1075811647922107217">Veličina stranice</translation> +<translation id="1124772482545689468">Korisnik</translation> <translation id="1195447618553298278">Nepoznata pogreška.</translation> <translation id="1204296502688602597">Latencija DNS-a</translation> <translation id="1238612778414822719">Latencija HTTPS-a</translation> @@ -20,12 +21,14 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> upravlja ovim korisnikom i možda može daljinski upravljati postavkama i nadzirati aktivnost korisnika.</translation> <translation id="150962533380566081">PUK nije važeći.</translation> <translation id="1510238584712386396">Pokretač</translation> +<translation id="1621067168122174824">Pokreni test napunjenosti</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (niti: <ph name="THREAD_COUNT" />)</translation> <translation id="1641857168437328880">Ulagač dokumenata (jednostrano)</translation> <translation id="1644574205037202324">Povijest</translation> <translation id="1662989795263954667">Zaustavljeno – nema tinte</translation> <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Prisutnost DNS prevoditelja</translation> +<translation id="1792647875738159689">Otkazivanje skeniranja</translation> <translation id="1905710495812624430">Premašen je maksimalan dopušteni broj pokušaja.</translation> <translation id="1930797645656624981">Usluga načina unosa OS-a Chrome</translation> <translation id="1947737735496445907">Ispisano</translation> @@ -40,21 +43,25 @@ <translation id="2375079107209812402">Preostalo pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Slanje izvješća s povratnim informacijama</translation> <translation id="2461822463642141190">Trenutačno</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}one{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}few{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}other{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Traži</translation> +<translation id="2620436844016719705">Sustav</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2872961005593481000">Isključi</translation> <translation id="3008341117444806826">OSVJEŽI</translation> <translation id="3009958530611748826">Odaberite mapu za spremanje</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Test nije uspio</translation> <translation id="3083667275341675831">Dijagnostika veze</translation> <translation id="3091839911843451378">Nije uspjelo – zaustavljeno</translation> +<translation id="3102119246920354026">Predmemorija</translation> +<translation id="3122464029669770682">Procesor (CPU)</translation> <translation id="3188257591659621405">Moje datoteke</translation> <translation id="3199982728237701504">Ulagač dokumenata (dvostrano)</translation> <translation id="3246869037381808805">Uklonit će se zadaci ispisa stariji od jednog dana</translation> <translation id="3268178239013324452">Nije uspjelo – vratašca su otvorena</translation> <translation id="3310640316857623290">Latencija DNS-a značajno iznad dopuštenog praga</translation> +<translation id="3328783797891415197">Test se izvodi</translation> <translation id="3369013195428705271">Jeste li sigurni da želite izbrisati svu povijest ispisa? Zadaci ispisa u tijeku neće se izbrisati.</translation> <translation id="3456078764689556234">Ispisane stranice: <ph name="PRINTED_PAGES" /> od <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Ispis</translation> @@ -68,11 +75,13 @@ <translation id="3838338534323494292">Nova zaporka</translation> <translation id="3865414814144988605">Razlučivost</translation> <translation id="3941014780699102620">Razrješavanje hosta nije uspjelo</translation> +<translation id="3942420633017001071">Dijagnostika</translation> <translation id="39823212440917567">Uklonit će se zadaci ispisa stariji od <ph name="NUMBER_OF_DAYS" /> dana</translation> <translation id="4003384961948020559">Nije uspjelo – izlaz je pun</translation> <translation id="4034824040120875894">Pisač</translation> <translation id="4131410914670010031">Crno-bijelo</translation> <translation id="4145784616224233563">Vatrozid za HTTP</translation> +<translation id="4170700058716978431">NIJE USPJELO</translation> <translation id="4227825898293920515">Zaporka istječe za <ph name="TIME" /></translation> <translation id="4238516577297848345">Nema zadataka ispisa u tijeku</translation> <translation id="4297501883039923494">Zaustavljeno – nepoznata pogreška</translation> @@ -97,16 +106,20 @@ <translation id="4773299976671772492">Zaustavljeno</translation> <translation id="4808449224298348341">Otkazan zadatak ispisa dokumenta <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Odaberi mapu u aplikaciji Datoteke...</translation> +<translation id="4848429997038228357">IZVODI SE</translation> <translation id="4890353053343094602">Odmah odaberite novu</translation> <translation id="4917889632206600977">Zaustavljeno – nema papira</translation> <translation id="4921665434385737356">Napunjeno <ph name="RATE" /> za <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Pokreni</translation> +<translation id="500920857929044050">Zaustavi test</translation> +<translation id="5154917547274118687">Memorija</translation> <translation id="5168185087976003268">Zdravlje baterije</translation> <translation id="520299634122159966">Nije dostupan nijedan skener</translation> <translation id="5212543919916444558">Na zaslonu ne mogu pronaći ništa u vezi s čime mogu pružiti pomoć. Dodirnite mikrofon da biste mi dali glasovnu naredbu.</translation> <translation id="5222676887888702881">Odjava</translation> +<translation id="5264277876637023664">Pokreni test procesora</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Ponovo pokreni rutine</translation> <translation id="5317780077021120954">Spremi</translation> @@ -119,25 +132,32 @@ <translation id="54609108002486618">Upravljani</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Saznajte više u centru za pomoć.</translation> +<translation id="5635169860413004179">Pogledaj izvješće</translation> +<translation id="5797428682393400134">USPJEH</translation> <translation id="5832805196449965646">Dodaj osobu</translation> <translation id="5895138241574237353">Ponovno pokreni</translation> +<translation id="5931523347251946569">Datoteka nije pronađena</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6048107060512778456">Nije uspjelo – zaglavljeni papir</translation> <translation id="6050189528197190982">Sivi tonovi</translation> <translation id="6058625436358447366">Za dovršetak unesite staru i novu zaporku</translation> <translation id="6061772781719867950">Neuspješni HTTP zahtjevi</translation> +<translation id="6104112872696127344">Skeniranje je otkazano</translation> <translation id="6106186594183574873">Za dovršetak unesite staru zaporku</translation> <translation id="6108689792487843350">Nije moguće dosegnuti pristupnik</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Za dovršetak unesite novu zaporku</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Saznajte više</translation> <translation id="6191293864534840972">Pogrešni poslužitelji naziva</translation> +<translation id="6232017090690406397">Baterija</translation> <translation id="6325525973963619867">Nije uspjelo</translation> <translation id="636850387210749493">Prijava poduzeća</translation> <translation id="649050271426829538">Zaustavljeno – zaglavljeni papir</translation> <translation id="6517239166834772319">Istražite</translation> <translation id="6527081081771465939">Nepoznat sigurnosni protokol za Wi-Fi</translation> +<translation id="6532051501443766164">Sakrij izvješće</translation> <translation id="65587193855025101">Plošni skener</translation> <translation id="6564646048574748301">Nije uspjelo – pisač nije dostupan</translation> <translation id="6618744767048954150">U tijeku</translation> @@ -145,6 +165,7 @@ <translation id="6643016212128521049">Izbriši</translation> <translation id="6704062477274546131">Razrješavanje DNS-a</translation> <translation id="6747215703636344499">Zaustavljeno – izlaz je pun</translation> +<translation id="6756731097889387912">Otkazivanje skeniranja nije uspjelo</translation> <translation id="6766275201586212568">Neuspješna razrješavanja DNS-a</translation> <translation id="6768237774506518020">Visoka stopa neuspješnih razrješavanja DNS-a</translation> <translation id="6839141349259399400">Ne možete se povezati sa skenerima?</translation> @@ -159,6 +180,7 @@ <translation id="7648838807254605802">Visoka latencija HTTPS-a</translation> <translation id="7658239707568436148">Odustani</translation> <translation id="7690294790491645610">Potvrdite novu zaporku</translation> +<translation id="7732651821766520760">Test <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Skenirana datoteka je spremljena!</translation> <translation id="7928373994957558460">Prikaži lokaciju datoteke</translation> @@ -184,12 +206,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Zadano</translation> <translation id="8845001906332463065">Zatražite pomoć</translation> +<translation id="8881098542468797602">Test je uspio</translation> <translation id="8910721771319628100">Zadana mreža iznad praga latencije</translation> <translation id="8919837981463578619">Nije uspjelo – nema ladice</translation> <translation id="8928727111548978589">Nije uspjelo – nema papira</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Preostalo pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Pokreni ponovo</translation> <translation id="9088306295921699330">Trenutačna upotreba</translation> <translation id="910415269708673980">Osvježite tiket za <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skeniranje stranice <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Otključaj</translation> +<translation id="9149391708638971077">Pokreni test memorije</translation> +<translation id="982713511914535780">Pokreni test pražnjenja</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index 6692088f4..e0fdd5f 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Nem sikerült elindítani a szkennelést</translation> <translation id="1071587090247825784">Tűzfal észlelve</translation> <translation id="1075811647922107217">Oldal mérete</translation> +<translation id="1124772482545689468">Felhasználó</translation> <translation id="1175697296044146566">Ezt a(z) <ph name="DEVICE_TYPE" /> eszközt a(z) <ph name="MANAGER" /> kezeli.</translation> <translation id="1195447618553298278">Ismeretlen hiba.</translation> <translation id="1204296502688602597">DNS várakozási ideje</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">A(z) <ph name="MANAGER" /> kezeli ezt a felhasználót, és távolról kezelheti a beállításokat, illetve figyelheti a felhasználói tevékenységeket.</translation> <translation id="150962533380566081">Érvénytelen PUK-kód.</translation> <translation id="1510238584712386396">Indító</translation> +<translation id="1621067168122174824">Töltési teszt futtatása</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> szál)</translation> <translation id="1641857168437328880">Dokumentumadagoló (egyoldalas)</translation> <translation id="1644574205037202324">Előzmények</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-névfeloldó működik</translation> <translation id="1743558184855585519">Az akkumulátor lemerültnek tekinthető, ha elérte a korlátot</translation> +<translation id="1792647875738159689">Beolvasás megszakítása…</translation> <translation id="1905710495812624430">Elérte az engedélyezett kísérletek maximális számát.</translation> <translation id="1930797645656624981">Chrome OS beviteli módszere szolgáltatás</translation> <translation id="1947737735496445907">Sikeres nyomtatás</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> próbálkozás maradt</translation> <translation id="2391082728065870591">Visszajelzési jelentés küldése</translation> <translation id="2461822463642141190">Jelenlegi</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} kísérlet maradt}other{<ph name="ERROR_MESSAGE" /> {0} kísérlet maradt}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Keresés</translation> <translation id="2570743873672969996">„<ph name="TEST_NAME" />” teszt futtatása…</translation> +<translation id="2620436844016719705">Rendszer</translation> <translation id="2805756323405976993">Alkalmazások</translation> <translation id="2872961005593481000">Leállítás</translation> <translation id="3008341117444806826">FRISSÍTÉS</translation> <translation id="3009958530611748826">Válassza ki a mentés helyét</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Sikertelen teszt</translation> <translation id="3083667275341675831">Connectivity Diagnostics</translation> <translation id="3091839911843451378">Sikertelen – Leállítva</translation> +<translation id="3102119246920354026">Gyorsítótár</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Saját fájlok</translation> <translation id="3199982728237701504">Dokumentumadagoló (kétoldalas)</translation> <translation id="3246869037381808805">Az 1 napnál régebbi nyomtatási feladatokat eltávolítja a rendszer</translation> <translation id="3268178239013324452">Sikertelen – Nyitva van a nyomtató fedele</translation> <translation id="3310640316857623290">A DNS várakozási ideje jelentősen az engedélyezhető határérték felett van</translation> +<translation id="3328783797891415197">A teszt fut</translation> <translation id="3369013195428705271">Biztosan törli a nyomtatási előzményeket? A folyamatban lévő nyomtatási feladatok nem szakadnak meg.</translation> <translation id="3456078764689556234"><ph name="PRINTED_PAGES" /> oldal kinyomtatva (összesen ennyiből: <ph name="TOTAL_PAGES" />).</translation> <translation id="3459509316159669723">Nyomtatás</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Új jelszó</translation> <translation id="3865414814144988605">Felbontás</translation> <translation id="3941014780699102620">Nem sikerült a gazdagép feloldása</translation> +<translation id="3942420633017001071">Diagnosztika</translation> <translation id="39823212440917567">A(z) <ph name="NUMBER_OF_DAYS" /> napnál régebbi nyomtatási feladatokat eltávolítja a rendszer</translation> <translation id="4003384961948020559">Sikertelen – Megtelt a kimenet</translation> <translation id="4034824040120875894">Nyomtató</translation> <translation id="4131410914670010031">Fekete-fehér</translation> <translation id="4145784616224233563">HTTP-tűzfal</translation> +<translation id="4170700058716978431">SIKERTELEN</translation> <translation id="4227825898293920515">A jelszó <ph name="TIME" /> múlva lejár</translation> <translation id="4238516577297848345">Nincsenek folyamatban lévő nyomtatási feladatok</translation> <translation id="4297501883039923494">Leállt – Ismeretlen hiba</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Leállítva</translation> <translation id="4808449224298348341">Nyomtatási feladat (<ph name="DOCUMENT_TITLE" />) megszakítva</translation> <translation id="4832079907277790330">Mappa kiválasztása a Fájlok alkalmazásban…</translation> +<translation id="4848429997038228357">FUT</translation> <translation id="4890353053343094602">Azonnal válasszon új jelszót</translation> <translation id="4917889632206600977">Leállt – Kifogyott a papír</translation> <translation id="4921665434385737356"><ph name="RATE" /> töltöttség <ph name="NUM_SECONDS" /> másodperc alatt.</translation> <translation id="4932733599132424254">Dátum</translation> <translation id="4985509611418653372">Futtatás</translation> +<translation id="500920857929044050">Teszt leállítása</translation> +<translation id="5154917547274118687">Memória</translation> <translation id="5168185087976003268">Akkumulátor egészsége</translation> <translation id="520299634122159966">Nincsenek rendelkezésre álló szkennerek</translation> <translation id="5212543919916444558">Nem találok semmi olyat a képernyőn, amellyel kapcsolatban segíthetnék. Koppintson a mikrofonra, és kérdezzen tőlem.</translation> <translation id="5222676887888702881">Kijelentkezés</translation> +<translation id="5264277876637023664">CPU-teszt futtatása</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Rutinok újrafuttatása</translation> <translation id="5317780077021120954">Mentés</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Kezelt</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">További információ a Súgóban</translation> +<translation id="5635169860413004179">Jelentés megtekintése</translation> <translation id="5719918614880940190">Ez méri a processzorhasználatot, az összes magot egybevéve.</translation> +<translation id="5797428682393400134">SIKERÜLT</translation> <translation id="5832805196449965646">Személy hozzáadása</translation> <translation id="5895138241574237353">Újraindítás</translation> +<translation id="5931523347251946569">A fájl nem található</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzió: <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Bezárás</translation> <translation id="6048107060512778456">Sikertelen – Papírelakadás</translation> <translation id="6050189528197190982">Szürkeárnyalat</translation> <translation id="6058625436358447366">A befejezéshez adja meg régi és új jelszavát</translation> <translation id="6061772781719867950">Sikertelen HTTP-kérések</translation> +<translation id="6104112872696127344">Beolvasás megszakítva</translation> <translation id="6106186594183574873">A befejezéshez adja meg régi jelszavát</translation> <translation id="6108689792487843350">Az átjáró nem érhető el</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz (max. <ph name="MAX" /> GHz)</translation> <translation id="6146993107019042706">A befejezéshez adja meg új jelszavát</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">További információ</translation> <translation id="6191293864534840972">Rosszul formázott névszerverek</translation> +<translation id="6232017090690406397">Akkumulátor</translation> <translation id="6325525973963619867">Nem sikerült</translation> <translation id="636850387210749493">Vállalat rögzítése</translation> <translation id="649050271426829538">Leállt – Papírelakadás</translation> <translation id="6517239166834772319">Felfedezés</translation> <translation id="6527081081771465939">Ismeretlen Wi-Fi biztonsági protokoll</translation> +<translation id="6532051501443766164">Jelentés elrejtése</translation> <translation id="65587193855025101">Síkágy</translation> <translation id="6564646048574748301">Sikertelen – Nem lehet hozzáférni a nyomtatóhoz</translation> <translation id="6618744767048954150">Ellenőrzés folyamatban</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Törlés</translation> <translation id="6704062477274546131">DNS-feloldás</translation> <translation id="6747215703636344499">Leállt – Megtelt a kimenet</translation> +<translation id="6756731097889387912">Nem sikerült a beolvasás megszakítása.</translation> <translation id="6766275201586212568">Sikertelen DNS-feloldások</translation> <translation id="6768237774506518020">Magas hibaarány DNS-feloldásnál</translation> <translation id="6839141349259399400">Nem tud szkennerhez csatlakozni?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Hosszú várakozási idő HTTPS esetén</translation> <translation id="7658239707568436148">Mégse</translation> <translation id="7690294790491645610">Új jelszó megerősítése</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> tesztelése</translation> <translation id="7805768142964895445">Állapot</translation> <translation id="7855434858642800953">Sikerült a beolvasott fájl mentése</translation> <translation id="7928373994957558460">Fájl helyének megjelenítése</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Alapértelmezett</translation> <translation id="8845001906332463065">Súgó</translation> +<translation id="8881098542468797602">Sikeres tesztelés</translation> <translation id="8910721771319628100">Az alapértelmezett hálózat túllépi a várakozási idő határértékét</translation> <translation id="8919837981463578619">Sikertelen – Hiányzó tálca</translation> <translation id="8928727111548978589">Sikertelen – Kifogyott a papír</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> kísérlet maradt</translation> <translation id="8970109610781093811">Futtatás újra</translation> <translation id="9088306295921699330">Jelenleg felhasznált</translation> <translation id="910415269708673980">Frissítse a következőhöz tartozó jegyet: <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />. oldal beolvasása…</translation> <translation id="9111102763498581341">Feloldás</translation> +<translation id="9149391708638971077">Memóriateszt futtatása</translation> +<translation id="982713511914535780">Lemerítési teszt futtatása</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb index 6f623765..9427f62 100644 --- a/chromeos/strings/chromeos_strings_hy.xtb +++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Չհաջողվեց սկսել սկանավորումը</translation> <translation id="1071587090247825784">Հայտնաբերվել է հրապատ</translation> <translation id="1075811647922107217">Էջի չափսը</translation> +<translation id="1124772482545689468">Օգտատեր</translation> <translation id="1175697296044146566">Այս <ph name="DEVICE_TYPE" /> սարքը կառավարվում է <ph name="MANAGER" /> տիրույթի կողմից։</translation> <translation id="1195447618553298278">Անհայտ սխալ:</translation> <translation id="1204296502688602597">DNS-ի հապաղում</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Մնաց <ph name="ATTEMPTS_LEFT" /> փորձ</translation> <translation id="2391082728065870591">Ուղարկել կարծիքների վերաբերյալ հաշվետվություն</translation> <translation id="2461822463642141190">Ընթացիկ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Մնացած փորձերի քանակը՝ {0}}one{<ph name="ERROR_MESSAGE" /> Մնացած փորձերի քանակը՝ {0}}other{<ph name="ERROR_MESSAGE" /> Մնացած փորձերի քանակը՝ {0}}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Որոնել</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" />ը ստուգվում է…</translation> +<translation id="2620436844016719705">Համակարգ</translation> <translation id="2805756323405976993">Հավելվածներ</translation> <translation id="2872961005593481000">Անջատել</translation> <translation id="3008341117444806826">ԹԱՐՄԱՑՆԵԼ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> մԱ</translation> <translation id="3083667275341675831">Կապի դիագնոստիկա</translation> <translation id="3091839911843451378">Չհաջողվեց տպել – Տպիչի աշխատանքը դադարեցվել է</translation> +<translation id="3102119246920354026">Հիշապահեստ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Իմ ֆայլերը</translation> <translation id="3199982728237701504">Փաստաթղթերի մատակարար (երկկողմանի)</translation> <translation id="3246869037381808805">Տպման առաջադրանքները, որոնք 1 օրից հին են, կհեռացվեն</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Նոր գաղտնաբառը</translation> <translation id="3865414814144988605">Լուծաչափ</translation> <translation id="3941014780699102620">Չհաջողվեց ճանաչել խնամորդը</translation> +<translation id="3942420633017001071">Դիագնոստիկա</translation> <translation id="39823212440917567">Տպման առաջադրանքները, որոնք <ph name="NUMBER_OF_DAYS" /> օրից հին են, կհեռացվեն</translation> <translation id="4003384961948020559">Չհաջողվեց տպել – Ելքը լցված է</translation> <translation id="4034824040120875894">Տպիչ</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Լիցքավորվել է <ph name="RATE" />-ով՝ <ph name="NUM_SECONDS" /> վայրկյանում։</translation> <translation id="4932733599132424254">Ամսաթիվ</translation> <translation id="4985509611418653372">Գործարկել</translation> +<translation id="5154917547274118687">Հիշողություն</translation> <translation id="5168185087976003268">Մարտկոցի կարգավիճակը</translation> <translation id="520299634122159966">Հասանելի սկաներներ չկան</translation> <translation id="5212543919916444558">Չհաջողվեց գտնել քարտեր էկրանին: @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Իմանալ ավելին</translation> <translation id="6191293864534840972">Սխալ DNS սերվերներ</translation> +<translation id="6232017090690406397">Մարտկոց</translation> <translation id="6325525973963619867">Սխալ առաջացավ</translation> <translation id="636850387210749493">Ձեռնարկության գրանցում</translation> <translation id="649050271426829538">Դադարեցվել է – Թղթի խցանում</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Կանխադրված ցանցը հապաղման սահմանափակման նկատմամբ առավելություն ունի</translation> <translation id="8919837981463578619">Չհաջողվեց տպել – Դարակը բացակայում է</translation> <translation id="8928727111548978589">Չհաջողվեց տպել – Թուղթը սպառվել է</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Մնացած փորձերի քանակը՝ <ph name="ATTEMPTS_LEFT" />։</translation> <translation id="9088306295921699330">Օգտագործված տարածքը</translation> <translation id="910415269708673980">Թարմացրեք <ph name="PRINCIPAL_NAME" /> հաշվի տոմսը</translation> <translation id="9106415115617144481">Սկանավորվում է էջ <ph name="PAGE_NUMBER" />-ը</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb index 41087272..1893b1e 100644 --- a/chromeos/strings/chromeos_strings_id.xtb +++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Tidak dapat memulai pemindaian</translation> <translation id="1071587090247825784">Firewall terdeteksi</translation> <translation id="1075811647922107217">Ukuran halaman</translation> +<translation id="1124772482545689468">Pengguna</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> ini dikelola oleh <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Kesalahan tak dikenal.</translation> <translation id="1204296502688602597">Latensi DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> upaya tersisa</translation> <translation id="2391082728065870591">Kirim Laporan Masukan</translation> <translation id="2461822463642141190">Arus</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} percobaan lagi}other{<ph name="ERROR_MESSAGE" /> {0} percobaan lagi}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Pindai</translation> <translation id="2570743873672969996">Menjalankan pengujian <ph name="TEST_NAME" /> ...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Apl</translation> <translation id="2872961005593481000">Matikan</translation> <translation id="3008341117444806826">PERBARUI</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostik Konektivitas</translation> <translation id="3091839911843451378">Gagal - Berhenti</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">File saya</translation> <translation id="3199982728237701504">Pengumpan Dokumen (Dua Sisi)</translation> <translation id="3246869037381808805">Tugas pencetakan yang sudah lebih dari 1 hari akan dihapus</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Sandi baru</translation> <translation id="3865414814144988605">Resolusi</translation> <translation id="3941014780699102620">Gagal me-resolve host</translation> +<translation id="3942420633017001071">Diagnosis</translation> <translation id="39823212440917567">Tugas pencetakan yang sudah lebih dari <ph name="NUMBER_OF_DAYS" /> hari akan dihapus</translation> <translation id="4003384961948020559">Gagal - Baki hasil cetak penuh</translation> <translation id="4034824040120875894">Printer</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Terisi <ph name="RATE" /> dalam <ph name="NUM_SECONDS" /> detik.</translation> <translation id="4932733599132424254">Tanggal</translation> <translation id="4985509611418653372">Jalankan</translation> +<translation id="5154917547274118687">Memori</translation> <translation id="5168185087976003268">Kesehatan baterai</translation> <translation id="520299634122159966">Tidak ada pemindai yang tersedia</translation> <translation id="5212543919916444558">Di layar tidak ada apa pun yang membutuhkan bantuan saya. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Pelajari selengkapnya</translation> <translation id="6191293864534840972">Format server nama salah</translation> +<translation id="6232017090690406397">Baterai</translation> <translation id="6325525973963619867">Gagal</translation> <translation id="636850387210749493">Pendaftaran perusahaan</translation> <translation id="649050271426829538">Dihentikan - Kertas macet</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Jaringan default melebihi ambang batas latensi</translation> <translation id="8919837981463578619">Gagal - Tidak ada baki</translation> <translation id="8928727111548978589">Gagal - Kertas habis</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> upaya tersisa</translation> <translation id="8970109610781093811">Jalankan lagi</translation> <translation id="9088306295921699330">Penggunaan saat ini</translation> <translation id="910415269708673980">Perbarui tiket untuk <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb index 18438ce8..a3b20a5f 100644 --- a/chromeos/strings/chromeos_strings_is.xtb +++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Ekki tókst að skanna</translation> <translation id="1071587090247825784">Eldveggur greindist</translation> <translation id="1075811647922107217">Síðustærð</translation> +<translation id="1124772482545689468">Notandi</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> er í umsjón <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Óþekkt villa.</translation> <translation id="1204296502688602597">DNS-biðtími</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tilraunir eftir</translation> <translation id="2391082728065870591">Senda ábendingaskýrslu</translation> <translation id="2461822463642141190">Núna</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} tilraun eftir}one{<ph name="ERROR_MESSAGE" /> {0} tilraun eftir}other{<ph name="ERROR_MESSAGE" /> {0} tilraunir eftir}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Leita</translation> <translation id="2570743873672969996">Keyrir prófið <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Kerfi</translation> <translation id="2805756323405976993">Forrit</translation> <translation id="2872961005593481000">Slökkva</translation> <translation id="3008341117444806826">ENDURNÝJA</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">Greining á tengigetu</translation> <translation id="3091839911843451378">Mistókst – stöðvaðist</translation> +<translation id="3102119246920354026">Skyndiminni</translation> +<translation id="3122464029669770682">Örgjörvi</translation> <translation id="3188257591659621405">Skrárnar mínar</translation> <translation id="3199982728237701504">Skjalamatari (tvíhliða)</translation> <translation id="3246869037381808805">Prentverk sem eru meira en 1 dags gömul verða fjarlægð</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nýtt aðgangsorð</translation> <translation id="3865414814144988605">Upplausn</translation> <translation id="3941014780699102620">Ekki tókst að ákvarða hýsil</translation> +<translation id="3942420633017001071">Greining</translation> <translation id="39823212440917567">Prentverk sem eru eldri en <ph name="NUMBER_OF_DAYS" /> verða fjarlægð</translation> <translation id="4003384961948020559">Mistókst – úttakið er fullt</translation> <translation id="4034824040120875894">Prentari</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Hlóð <ph name="RATE" /> á <ph name="NUM_SECONDS" /> sekúndum.</translation> <translation id="4932733599132424254">Dagsetning</translation> <translation id="4985509611418653372">Keyra</translation> +<translation id="5154917547274118687">Minni</translation> <translation id="5168185087976003268">Ástand rafhlöðu</translation> <translation id="520299634122159966">Engir skannar tiltækir</translation> <translation id="5212543919916444558">Ég finn ekkert á skjánum sem ég get aðstoðað þig með. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Frekari upplýsingar</translation> <translation id="6191293864534840972">Gallaðir nafnaþjónar</translation> +<translation id="6232017090690406397">Rafhlaða</translation> <translation id="6325525973963619867">Mistókst</translation> <translation id="636850387210749493">Fyrirtækjaskráning</translation> <translation id="649050271426829538">Stöðvað – pappírsstífla</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Sjálfgefið net er yfir biðþröskuldi</translation> <translation id="8919837981463578619">Mistókst – bakka vantar</translation> <translation id="8928727111548978589">Mistókst – pappír vantar</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> tilraunir eftir</translation> <translation id="9088306295921699330">Núverandi notkun</translation> <translation id="910415269708673980">Endurnýja miða fyrir <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skannar síðu <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb index 2851a9c8..54cef106 100644 --- a/chromeos/strings/chromeos_strings_it.xtb +++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Impossibile avviare la scansione</translation> <translation id="1071587090247825784">Firewall rilevato</translation> <translation id="1075811647922107217">Dimensioni pagina</translation> +<translation id="1124772482545689468">Utente</translation> <translation id="1175697296044146566">Questo dispositivo <ph name="DEVICE_TYPE" /> è gestito da <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Errore sconosciuto.</translation> <translation id="1204296502688602597">Latenza DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentativi rimanenti</translation> <translation id="2391082728065870591">Invia rapporto di feedback</translation> <translation id="2461822463642141190">Attuale</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} tentativo rimanente}other{<ph name="ERROR_MESSAGE" /> {0} tentativi rimanenti}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Scansiona</translation> <translation id="2570743873672969996">Esecuzione del test <ph name="TEST_NAME" /> in corso…</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">App</translation> <translation id="2872961005593481000">Spegni</translation> <translation id="3008341117444806826">AGGIORNA</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostica della connettività</translation> <translation id="3091839911843451378">Operazione non riuscita - Interruzione</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">I miei file</translation> <translation id="3199982728237701504">Alimentatore di documenti (fronte e retro)</translation> <translation id="3246869037381808805">I processi di stampa risalenti a oltre 1 giorno fa verranno rimossi</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nuova password</translation> <translation id="3865414814144988605">Risoluzione</translation> <translation id="3941014780699102620">impossibile risolvere l'host</translation> +<translation id="3942420633017001071">Diagnostica</translation> <translation id="39823212440917567">I processi di stampa risalenti a oltre <ph name="NUMBER_OF_DAYS" /> giorni fa verranno rimossi</translation> <translation id="4003384961948020559">Operazione non riuscita - Vassoio di uscita pieno</translation> <translation id="4034824040120875894">Stampante</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Ricarica del <ph name="RATE" /> in <ph name="NUM_SECONDS" /> secondi.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Esegui</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Condizioni batteria</translation> <translation id="520299634122159966">Nessuno scanner disponibile</translation> <translation id="5212543919916444558">Non riesco a trovare nulla sullo schermo per cui poterti essere utile. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Ulteriori informazioni</translation> <translation id="6191293864534840972">formato dei server dei nomi non valido</translation> +<translation id="6232017090690406397">Batteria</translation> <translation id="6325525973963619867">Non riuscito</translation> <translation id="636850387210749493">Registrazione aziendale</translation> <translation id="649050271426829538">Operazione interrotta - Fogli bloccati nella stampante</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">la rete predefinita è al di sopra della soglia di latenza</translation> <translation id="8919837981463578619">Operazione non riuscita - Vassoio mancante</translation> <translation id="8928727111548978589">Operazione non riuscita - Carta esaurita</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> tentativi rimanenti</translation> <translation id="8970109610781093811">Esegui di nuovo</translation> <translation id="9088306295921699330">Spazio utilizzato</translation> <translation id="910415269708673980">Aggiorna la richiesta per <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb index 98738d5..145ebc5 100644 --- a/chromeos/strings/chromeos_strings_iw.xtb +++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">לא ניתן היה להתחיל את הסריקה</translation> <translation id="1071587090247825784">זוהתה חומת אש</translation> <translation id="1075811647922107217">גודל הדף</translation> +<translation id="1124772482545689468">משתמש</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> זה מנוהל על-ידי <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">שגיאה לא ידועה.</translation> <translation id="1204296502688602597">זמן אחזור של DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">נותרו <ph name="ATTEMPTS_LEFT" /> ניסיונות</translation> <translation id="2391082728065870591">שליחת דוח המשוב</translation> <translation id="2461822463642141190">כרגע</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />. נותר ניסיון אחד ({0})}two{<ph name="ERROR_MESSAGE" />. נותרו {0} ניסיונות}many{<ph name="ERROR_MESSAGE" />. נותרו {0} ניסיונות}other{<ph name="ERROR_MESSAGE" />. נותרו {0} ניסיונות}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">סריקה</translation> <translation id="2570743873672969996">הבדיקה של <ph name="TEST_NAME" /> בתהליך…</translation> +<translation id="2620436844016719705">מערכת</translation> <translation id="2805756323405976993">אפליקציות</translation> <translation id="2872961005593481000">כיבוי</translation> <translation id="3008341117444806826">רענון</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801">mA<ph name="CURRENT_VALUE" /></translation> <translation id="3083667275341675831">אבחון קישוריות</translation> <translation id="3091839911843451378">נכשלה – משימת ההדפסה הופסקה</translation> +<translation id="3102119246920354026">מטמון</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">הקבצים שלי</translation> <translation id="3199982728237701504">הכנסת מסמכים (שני צדדים)</translation> <translation id="3246869037381808805">משימות הדפסה בנות יותר מיום אחד יוסרו</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">סיסמה חדשה</translation> <translation id="3865414814144988605">רזולוציה</translation> <translation id="3941014780699102620">לא ניתן היה להתאים את נתוני המארח</translation> +<translation id="3942420633017001071">אבחון</translation> <translation id="39823212440917567">משימות הדפסה בנות יותר מ-<ph name="NUMBER_OF_DAYS" /> ימים יוסרו</translation> <translation id="4003384961948020559">נכשלה – מגש הפלט מלא</translation> <translation id="4034824040120875894">מדפסת</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">התבצעה טעינה של <ph name="RATE" /> ב-<ph name="NUM_SECONDS" /> שניות.</translation> <translation id="4932733599132424254">תאריך</translation> <translation id="4985509611418653372">הרצה</translation> +<translation id="5154917547274118687">זיכרון</translation> <translation id="5168185087976003268">תקינות הסוללה</translation> <translation id="520299634122159966">אין סורקים זמינים</translation> <translation id="5212543919916444558">לא מצאתי במסך משהו שאוכל לעזור בו. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">למידע נוסף</translation> <translation id="6191293864534840972">שרתי שמות שגויים</translation> +<translation id="6232017090690406397">סוללה</translation> <translation id="6325525973963619867">נכשל</translation> <translation id="636850387210749493">הרשמה ל-Enterprise</translation> <translation id="649050271426829538">הפסיקה – חסימת נייר</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">רשת ברירת המחדל חורגת מסף זמן האחזור</translation> <translation id="8919837981463578619">נכשלה – המגש לא נמצא</translation> <translation id="8928727111548978589">נכשלה – הנייר נגמר</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> נותרו <ph name="ATTEMPTS_LEFT" /> ניסיונות</translation> <translation id="8970109610781093811">הפעל שוב</translation> <translation id="9088306295921699330">שימוש נוכחי</translation> <translation id="910415269708673980">רענון הכרטיס עבור <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index 5cac86f..6700b1cb 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">スキャンを開始できませんでした</translation> <translation id="1071587090247825784">ファイアウォールが検出されました</translation> <translation id="1075811647922107217">ページサイズ</translation> +<translation id="1124772482545689468">ユーザー</translation> <translation id="1175697296044146566">この <ph name="DEVICE_TYPE" /> は <ph name="MANAGER" /> によって管理されています。</translation> <translation id="1195447618553298278">不明なエラーです。</translation> <translation id="1204296502688602597">DNS レイテンシ</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">あと <ph name="ATTEMPTS_LEFT" /> 回</translation> <translation id="2391082728065870591">フィードバック レポートを送信</translation> <translation id="2461822463642141190">電流</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />あと {0} 回試行できます}other{<ph name="ERROR_MESSAGE" />あと {0} 回試行できます}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">スキャン</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> のテストを実行しています...</translation> +<translation id="2620436844016719705">システム</translation> <translation id="2805756323405976993">アプリ</translation> <translation id="2872961005593481000">終了</translation> <translation id="3008341117444806826">更新</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">接続診断</translation> <translation id="3091839911843451378">失敗 - 停止中です</translation> +<translation id="3102119246920354026">キャッシュ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">マイファイル</translation> <translation id="3199982728237701504">ドキュメント フィーダー(両面)</translation> <translation id="3246869037381808805">昨日より前の印刷ジョブは削除されます</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">新しいパスワード</translation> <translation id="3865414814144988605">解像度</translation> <translation id="3941014780699102620">ホストを解決できませんでした</translation> +<translation id="3942420633017001071">診断</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> 日より前の印刷ジョブは削除されます</translation> <translation id="4003384961948020559">失敗 - 出力がいっぱいです</translation> <translation id="4034824040120875894">プリンタ</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> 秒で <ph name="RATE" /> 充電しました。</translation> <translation id="4932733599132424254">日付</translation> <translation id="4985509611418653372">実行</translation> +<translation id="5154917547274118687">メモリ</translation> <translation id="5168185087976003268">電池の状態</translation> <translation id="520299634122159966">使用できるスキャナはありません</translation> <translation id="5212543919916444558">画面からはサポートできる内容が見つかりませんでした。 @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">詳細</translation> <translation id="6191293864534840972">ネームサーバーの形式が正しくありません</translation> +<translation id="6232017090690406397">バッテリー</translation> <translation id="6325525973963619867">失敗しました</translation> <translation id="636850387210749493">企業の登録</translation> <translation id="649050271426829538">停止 - 紙詰まり</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">デフォルトのネットワークの応答時間がしきい値を超えています</translation> <translation id="8919837981463578619">失敗 - トレイがありません</translation> <translation id="8928727111548978589">失敗 - 用紙がありません</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />: あと <ph name="ATTEMPTS_LEFT" /> 回</translation> <translation id="8970109610781093811">再実行</translation> <translation id="9088306295921699330">現在の使用状況</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> のチケットを更新してください</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb index c64660f..d4478652 100644 --- a/chromeos/strings/chromeos_strings_ka.xtb +++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">სკანირების დაწყება ვერ მოხერხდა</translation> <translation id="1071587090247825784">აღმოჩენილია ქსელის დაცვა</translation> <translation id="1075811647922107217">გვერდის ზომა</translation> +<translation id="1124772482545689468">მომხმარებელი</translation> <translation id="1175697296044146566">ეს <ph name="DEVICE_TYPE" /> იმართება <ph name="MANAGER" />-ის მიერ.</translation> <translation id="1195447618553298278">უცნობი შეცდომა.</translation> <translation id="1204296502688602597">DNS-ის რეაგირების დრო</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">ამ მომხმარებელს მართავს <ph name="MANAGER" />, რომელსაც შეუძლია პარამეტრების დისტანციურად მართვა და მომხმარებლის აქტივობის მონიტორინგი.</translation> <translation id="150962533380566081">PUK კოდი არასწორია.</translation> <translation id="1510238584712386396">გამშვები</translation> +<translation id="1621067168122174824">დატენის ტესტის გაშვება</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ნაკადი)</translation> <translation id="1641857168437328880">დოკუმენტების მიმწოდი (ცალმხრივი)</translation> <translation id="1644574205037202324">ისტორია</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-ის მომგვარებლის არსებობა</translation> <translation id="1743558184855585519">ლიმიტის მიღწევისას ბატარეა გამოყენებულად ჩაითვლება</translation> +<translation id="1792647875738159689">მიმდინარეობს სკანირების გაუქმება</translation> <translation id="1905710495812624430">გადაჭარბებულია მცდელობათა მაქსიმალური რაოდენობა.</translation> <translation id="1930797645656624981">Chrome OS-ის შეყვანის მეთოდის სერვისი</translation> <translation id="1947737735496445907">დაბეჭდილი</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">დარჩენილია <ph name="ATTEMPTS_LEFT" /> მცდელობა</translation> <translation id="2391082728065870591">გამოხმაურების ანგარიშის გაგზავნა</translation> <translation id="2461822463642141190">ამჟამინდელი</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> დარჩენილია {0} მცდელობა}other{<ph name="ERROR_MESSAGE" /> დარჩენილია {0} მცდელობა}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">სკანირება</translation> <translation id="2570743873672969996">გაშვებულია <ph name="TEST_NAME" /> ტესტი...</translation> +<translation id="2620436844016719705">სისტემა</translation> <translation id="2805756323405976993">პროგრამები</translation> <translation id="2872961005593481000">გამორთვა</translation> <translation id="3008341117444806826">განახლება</translation> <translation id="3009958530611748826">აირჩიეთ საქაღალდე, რომელშიც უნდა შეინახოს</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> მა</translation> +<translation id="3069085583900247081">ტესტი წარუმატებლად დასრულდა</translation> <translation id="3083667275341675831">კავშირის დიაგნოსტიკა</translation> <translation id="3091839911843451378">ვერ მოხერხდა — შეწყვიტა მუშაობა</translation> +<translation id="3102119246920354026">ქეში</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ჩემი ფაილები</translation> <translation id="3199982728237701504">დოკუმენტების მიმწოდი (ორმხრივი)</translation> <translation id="3246869037381808805">ბეჭდვის 1 დღეზე ძველი დავალებები ამოიშლება</translation> <translation id="3268178239013324452">ვერ მოხერხდა — პრინტერის კარი ღიაა</translation> <translation id="3310640316857623290">DNS-ის რეაგირების დრო მნიშვნელოვნად აღემატება დასაშვებ ზღვარს</translation> +<translation id="3328783797891415197">ტესტი გაშვებულია</translation> <translation id="3369013195428705271">ნამდვილად გსურთ ბეჭდვის ისტორიის მთლიანად გასუფთავება? ბეჭდვის მიმდინარე დავალებები არ წაიშლება.</translation> <translation id="3456078764689556234">ამობეჭდილი გვერდი <ph name="PRINTED_PAGES" /> / <ph name="TOTAL_PAGES" />-დან.</translation> <translation id="3459509316159669723">ბეჭდვა</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">ახალი პაროლი</translation> <translation id="3865414814144988605">გარჩევადობა</translation> <translation id="3941014780699102620">ჰოსტის გარდაქმნა ვერ მოხერხდა</translation> +<translation id="3942420633017001071">დიაგნოსტიკა</translation> <translation id="39823212440917567">ბეჭდვის <ph name="NUMBER_OF_DAYS" /> დღეზე ძველი დავალებები ამოიშლება</translation> <translation id="4003384961948020559">ვერ მოხერხდა — გამომტანი სავსეა</translation> <translation id="4034824040120875894">პრინტერი</translation> <translation id="4131410914670010031">შავი და თეთრი</translation> <translation id="4145784616224233563">HTTP ქსელის დაცვა</translation> +<translation id="4170700058716978431">ვერ შესრულდა</translation> <translation id="4227825898293920515">პაროლი ძალაშია <ph name="TIME" /></translation> <translation id="4238516577297848345">ბეჭდვის მიმდინარე დავალებები არ არის</translation> <translation id="4297501883039923494">გაჩერდა — უცნობი შეცდომა</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">შეწყვეტილია</translation> <translation id="4808449224298348341">ბეჭდვის დავალება გაუქმდა <ph name="DOCUMENT_TITLE" />-ისთვის</translation> <translation id="4832079907277790330">საქაღალდის არჩევა ფაილების აპიდან...</translation> +<translation id="4848429997038228357">გაშვებულია</translation> <translation id="4890353053343094602">დაუყოვნებლივ აირჩიეთ ახალი</translation> <translation id="4917889632206600977">გაჩერდა — ქაღალდი გათავდა</translation> <translation id="4921665434385737356"><ph name="RATE" /> დაიტენა <ph name="NUM_SECONDS" /> წამში.</translation> <translation id="4932733599132424254">თარიღი</translation> <translation id="4985509611418653372">გაშვება</translation> +<translation id="500920857929044050">ტესტის შეწყვეტა</translation> +<translation id="5154917547274118687">მეხსიერება</translation> <translation id="5168185087976003268">ბატარეის მდგომარეობა</translation> <translation id="520299634122159966">სკანერები მიუწვდომელია</translation> <translation id="5212543919916444558">თქვენს ეკრანზე ვერაფერი მოიძებნა, რითაც თქვენს დახმარებას შევძლებდი. გთხოვთ, შეეხოთ მიკროფონს და მკითხოთ, რაც გსურთ.</translation> <translation id="5222676887888702881">გამოსვლა</translation> +<translation id="5264277876637023664">CPU-ს ტესტის გაშვება</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">რუტინების ხელახლა გაშვება</translation> <translation id="5317780077021120954">შენახვა</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">მართული</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">შეიტყვეთ მეტი დახმარების ცენტრში</translation> +<translation id="5635169860413004179">ანგარიშის ნახვა</translation> <translation id="5719918614880940190">ზომავს CPU-ს გამოყენებას (მონაცემები აგრეგირებულია ყველა ბირთვისთვის)</translation> +<translation id="5797428682393400134">წარმატებით შესრულდა</translation> <translation id="5832805196449965646">მომხმარებლის დამატება</translation> <translation id="5895138241574237353">გადატვირთვა</translation> +<translation id="5931523347251946569">ფაილი ვერ მოიძებნა</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, ვერსია <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">დახურვა</translation> <translation id="6048107060512778456">ვერ მოხერხდა — ქაღალდის გაჭედვა</translation> <translation id="6050189528197190982">ნაცრისფერის ელფერები</translation> <translation id="6058625436358447366">დასასრულებლად შეიყვანეთ თქვენი ძველი და ახალი პაროლები</translation> <translation id="6061772781719867950">HTTP მოთხოვნები ვერ შესრულდა</translation> +<translation id="6104112872696127344">სკანირება გაუქმდა</translation> <translation id="6106186594183574873">დასასრულებლად შეიყვანეთ თქვენი ძველი პაროლი</translation> <translation id="6108689792487843350">გეითვეი მიუწვდომელია</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> გჰც / <ph name="MAX" /> გჰც</translation> <translation id="6146993107019042706">დასასრულებლად შეიყვანეთ თქვენი ახალი პაროლი</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">შეიტყვეთ მეტი</translation> <translation id="6191293864534840972">სახელების სერვერი არასწორად არის ფორმირებული</translation> +<translation id="6232017090690406397">ბატარეა</translation> <translation id="6325525973963619867">ვერ შესრულდა</translation> <translation id="636850387210749493">ორგანიზაციის რეგისტრაცია</translation> <translation id="649050271426829538">გაჩერდა — ქაღალდი გაიჭედა</translation> <translation id="6517239166834772319">გაცნობა</translation> <translation id="6527081081771465939">Wi-Fi-ს უცნობი უსაფრთხოების პროტოკოლი</translation> +<translation id="6532051501443766164">ანგარიშის დამალვა</translation> <translation id="65587193855025101">ბაქანი</translation> <translation id="6564646048574748301">ვერ მოხერხდა — პრინტერთან დაკავშირება ვერ ხერხდება</translation> <translation id="6618744767048954150">მიმდინარეობს</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">გასუფთავება</translation> <translation id="6704062477274546131">DNS-ის დარეგულირება</translation> <translation id="6747215703636344499">გაჩერდა — გამომტანი სავსეა</translation> +<translation id="6756731097889387912">სკანირება ვერ გაუქმდა</translation> <translation id="6766275201586212568">DNS ვერ დარეგულირდა</translation> <translation id="6768237774506518020">DNS-ის წარუმატებელი დარეგულირებების მაჩვენებელი მაღალია</translation> <translation id="6839141349259399400">ვერ უკავშირდებით სკანერებს?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">HTTPS რეაგირების დრო დიდია</translation> <translation id="7658239707568436148">გაუქმება</translation> <translation id="7690294790491645610">დაადასტურეთ ახალი პაროლი</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> — ტესტი</translation> <translation id="7805768142964895445">სტატუსი</translation> <translation id="7855434858642800953">სკანირებული ფაილი შენახულია!</translation> <translation id="7928373994957558460">ფაილის მდებარეობის ჩვენება</translation> @@ -191,11 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">ნაგულისხმევი</translation> <translation id="8845001906332463065">დახმარების მიღება</translation> +<translation id="8881098542468797602">ტესტი წარმატებით შესრულდა</translation> <translation id="8910721771319628100">ნაგულისხმევი ქსელი აღემატება რეაგირების დროის ზღვარს</translation> <translation id="8919837981463578619">ვერ მოხერხდა — პრინტერს კალათა აკლია</translation> <translation id="8928727111548978589">ვერ მოხერხდა — ქაღალდი გაუთავდა</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> დარჩენილია <ph name="ATTEMPTS_LEFT" /> მცდელობა</translation> +<translation id="8970109610781093811">ხელახლა გაშვება</translation> <translation id="9088306295921699330">ამჟამად გამოყენებული</translation> <translation id="910415269708673980">განაახლეთ ბილეთი <ph name="PRINCIPAL_NAME" />-ისთვის</translation> <translation id="9106415115617144481">სკანირდება გვერდი <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">განბლოკვა</translation> +<translation id="9149391708638971077">მეხსიერების ტესტის გაშვება</translation> +<translation id="982713511914535780">განმუხტვის ტესტის გაშვება</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb index 2fe2b32..c89507dd 100644 --- a/chromeos/strings/chromeos_strings_kk.xtb +++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Сканерлеуді қосу мүмкін болмады.</translation> <translation id="1071587090247825784">Брандмаэур анықталды.</translation> <translation id="1075811647922107217">Бет өлшемі</translation> +<translation id="1124772482545689468">Пайдаланушы</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> құрылғысын <ph name="MANAGER" /> басқарады.</translation> <translation id="1195447618553298278">Белгісіз қате.</translation> <translation id="1204296502688602597">DNS кідірісі</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> мүмкіндік қалды</translation> <translation id="2391082728065870591">Пікірлер есебін жіберу</translation> <translation id="2461822463642141190">Қазіргі</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} әрекет қалды.}other{<ph name="ERROR_MESSAGE" /> {0} әрекет қалды.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Іздеу</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> сынағы жүруде…</translation> +<translation id="2620436844016719705">Жүйе</translation> <translation id="2805756323405976993">Қолданбалар</translation> <translation id="2872961005593481000">Өшіру</translation> <translation id="3008341117444806826">ЖАҢАРТУ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Байланыс диагностикасы</translation> <translation id="3091839911843451378">Сәтсіз: тоқтатылды</translation> +<translation id="3102119246920354026">Кэш</translation> +<translation id="3122464029669770682">Орталық процессор</translation> <translation id="3188257591659621405">Файлдарым</translation> <translation id="3199982728237701504">Құжат беруші (екі жақты)</translation> <translation id="3246869037381808805">1 күннен асқан баспа жұмыстары өшіріледі.</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Жаңа құпия сөз</translation> <translation id="3865414814144988605">Ажыратымдылық</translation> <translation id="3941014780699102620">Хост атауы түрлендірілмеді.</translation> +<translation id="3942420633017001071">Диагностика</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> күннен асқан баспа жұмыстары өшіріледі.</translation> <translation id="4003384961948020559">Сәтсіз: шығыс науа толып кеткен</translation> <translation id="4034824040120875894">Принтер</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> секундта <ph name="RATE" /> зарядталды.</translation> <translation id="4932733599132424254">Күні</translation> <translation id="4985509611418653372">Іске қосу</translation> +<translation id="5154917547274118687">Жад</translation> <translation id="5168185087976003268">Батарея күйі</translation> <translation id="520299634122159966">Қолжетімді сканерлер жоқ.</translation> <translation id="5212543919916444558">Экранда мен көмектесе алатын ештеңе жоқ. Микрофон белгішесін түртіп, маған сұрақ қойыңыз.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Толығырақ</translation> <translation id="6191293864534840972">Атау серверлері форматы дұрыс емес.</translation> +<translation id="6232017090690406397">Батарея</translation> <translation id="6325525973963619867">Қате шықты</translation> <translation id="636850387210749493">Кәсіпорынды тіркеу</translation> <translation id="649050271426829538">Тоқтатылды: қағаз кептелісі</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">Әдепкі желі кідірісі шекті мәннен асады.</translation> <translation id="8919837981463578619">Сәтсіз: науа жоқ</translation> <translation id="8928727111548978589">Сәтсіз: қағаз бітіп қалды</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Қалған әрекеттер саны: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="9088306295921699330">Қазір пайдаланылуы</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> үшін билетті жаңарту</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />-бет сканерленуде</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb index b7dd7b41..e560a84 100644 --- a/chromeos/strings/chromeos_strings_km.xtb +++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">មិនអាចចាប់ផ្ដើមស្កេនបានទេ</translation> <translation id="1071587090247825784">បានរកឃើញជញ្ជាំងភ្លើង</translation> <translation id="1075811647922107217">ទំហំទំព័រ</translation> +<translation id="1124772482545689468">អ្នកប្រើ</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> នេះស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="MANAGER" />។</translation> <translation id="1195447618553298278">កំហុសឆ្គងមិនស្គាល់។</translation> <translation id="1204296502688602597">ការពន្យារ DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">អាចព្យាយាមបាន <ph name="ATTEMPTS_LEFT" /> ដងទៀត</translation> <translation id="2391082728065870591">ផ្ញើរបាយការណ៍អំពីមតិកែលម្អ</translation> <translation id="2461822463642141190">បច្ចុប្បន្ន</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> អាចព្យាយាមបាន {0} ដងទៀត}other{<ph name="ERROR_MESSAGE" /> អាចព្យាយាមបាន {0} ដងទៀត}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ស្កេន</translation> <translation id="2570743873672969996">កំពុងដំណើរការតេស្ត <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">ប្រព័ន្ធ</translation> <translation id="2805756323405976993">កម្មវិធី</translation> <translation id="2872961005593481000">បិទ</translation> <translation id="3008341117444806826">ផ្ទុកឡើងវិញ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">ការវិភាគអំពីការតភ្ជាប់</translation> <translation id="3091839911843451378">មិនបានសម្រេច - ម៉ាស៊ីនបោះពុម្ពបានឈប់</translation> +<translation id="3102119246920354026">ឃ្លាំងសម្ងាត់</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ឯកសាររបស់ខ្ញុំ</translation> <translation id="3199982728237701504">ឧបករណ៍បញ្ចូលឯកសារ (សងខាង)</translation> <translation id="3246869037381808805">កិច្ចការបោះពុម្ពដែលចាស់ជាង 1 ថ្ងៃនឹងត្រូវលុបចេញ</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">ពាក្យសម្ងាត់ថ្មី</translation> <translation id="3865414814144988605">គុណភាពបង្ហាញ</translation> <translation id="3941014780699102620">មិនអាចដោះស្រាយម៉ាស៊ីនបានទេ</translation> +<translation id="3942420633017001071">ការវិភាគ</translation> <translation id="39823212440917567">កិច្ចការបោះពុម្ពដែលចាស់ជាង <ph name="NUMBER_OF_DAYS" /> ថ្ងៃនឹងត្រូវបានលុបចេញ</translation> <translation id="4003384961948020559">មិនបានសម្រេច - កន្លែងចេញក្រដាសបោះពុម្ពពេញហើយ</translation> <translation id="4034824040120875894">ម៉ាស៊ីនបោះពុម្ព</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">បានសាកថ្ម <ph name="RATE" /> ក្នុងរយៈពេល <ph name="NUM_SECONDS" /> វិនាទី។</translation> <translation id="4932733599132424254">កាលបរិច្ឆេទ</translation> <translation id="4985509611418653372">ដំណើរការ</translation> +<translation id="5154917547274118687">មេម៉ូរី</translation> <translation id="5168185087976003268">គុណភាពថ្ម</translation> <translation id="520299634122159966">មិនមានឧបករណ៍ស្កេនទេ</translation> <translation id="5212543919916444558">ខ្ញុំរកមិនឃើញអ្វីដែលខ្ញុំអាចជួយបាននៅលើអេក្រង់របស់អ្នកទេ។ សាកល្បងចុចមីក្រូហ្វូន ដើម្បីសួរខ្ញុំអំពីអ្វីម្យ៉ាង។</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ស្វែងយល់បន្ថែម</translation> <translation id="6191293864534840972">DNS មានទម្រង់មិនត្រឹមត្រូវ</translation> +<translation id="6232017090690406397">ថ្ម</translation> <translation id="6325525973963619867">មិនបានសម្រេច</translation> <translation id="636850387210749493">ការចុះឈ្មោះសហគ្រាស</translation> <translation id="649050271426829538">បានឈប់ - ជាប់ក្រដាស</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">កម្រិតពន្យាររបស់បណ្ដាញលំនាំដើមខ្ពស់ពេក</translation> <translation id="8919837981463578619">មិនបានសម្រេច - បាត់ថាសដាក់ក្រដាស</translation> <translation id="8928727111548978589">មិនបានសម្រេច - អស់ក្រដាស</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> អាចព្យាយាមបាន <ph name="ATTEMPTS_LEFT" /> ដងទៀត</translation> <translation id="9088306295921699330">ការប្រើប្រាស់បច្ចុប្បន្ន</translation> <translation id="910415269708673980">ផ្ទុកសំបុត្រឡើងវិញសម្រាប់ <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">កំពុងស្កេនទំព័រ <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb index 219df3f..f3141ff 100644 --- a/chromeos/strings/chromeos_strings_kn.xtb +++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ಸ್ಕ್ಯಾನ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> <translation id="1071587090247825784">ಫೈರ್ವಾಲ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗಿದೆ</translation> <translation id="1075811647922107217">ಪುಟದ ಗಾತ್ರ</translation> +<translation id="1124772482545689468">ಬಳಕೆದಾರ</translation> <translation id="1175697296044146566">ಈ <ph name="DEVICE_TYPE" />, <ph name="MANAGER" /> ಇಂದ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತದೆ.</translation> <translation id="1195447618553298278">ಅಪರಿಚಿತ ದೋಷ.</translation> <translation id="1204296502688602597">DNS ವಿಳಂಬ</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ</translation> <translation id="2391082728065870591">ಪ್ರತಿಕ್ರಿಯೆ ವರದಿ ಕಳುಹಿಸಿ</translation> <translation id="2461822463642141190">ಪ್ರಸ್ತುತ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ}one{<ph name="ERROR_MESSAGE" /> {0} ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ}other{<ph name="ERROR_MESSAGE" /> {0} ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ಸ್ಕ್ಯಾನ್</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> ಪರೀಕ್ಷೆ ರನ್ ಆಗುತ್ತಿದೆ...</translation> +<translation id="2620436844016719705">ಸಿಸ್ಟಂ</translation> <translation id="2805756323405976993">ಆಪ್ಸ್</translation> <translation id="2872961005593481000">ಮುಚ್ಚಿಬಿಡಿ </translation> <translation id="3008341117444806826">ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">ಕನೆಕ್ಟಿವಿಟಿ ಡಯಾಗ್ನಾಸ್ಟಿಕ್ಸ್</translation> <translation id="3091839911843451378">ವಿಫಲವಾಗಿದೆ - ನಿಲ್ಲಿಸಲಾಗಿದೆ</translation> +<translation id="3102119246920354026">ಸಂಗ್ರಹ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ನನ್ನ ಫೈಲ್ಗಳು</translation> <translation id="3199982728237701504">ಡಾಕ್ಯುಮೆಂಟ್ ಫೀಡರ್ (ಎರಡು-ಬದಿಯದ್ದು)</translation> <translation id="3246869037381808805">1 ದಿನಕ್ಕಿಂತ ಹಳೆಯದಾದ ಮುದ್ರಣ ಕಾರ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">ಹೊಸ ಪಾಸ್ವರ್ಡ್</translation> <translation id="3865414814144988605">ರೆಸಲ್ಯೂಶನ್</translation> <translation id="3941014780699102620">ಹೋಸ್ಟ್ ಅನ್ನು ಪರಿಹರಿಸಲು ವಿಫಲವಾಗಿದೆ</translation> +<translation id="3942420633017001071">ತಪಾಸಣೆಗಳು</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> ದಿನಗಳಿಗಿಂತ ಹಳೆಯದಾದ ಮುದ್ರಣ ಕಾರ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation> <translation id="4003384961948020559">ವಿಫಲವಾಗಿದೆ - ಔಟ್ಪುಟ್ ಭರ್ತಿಯಾಗಿದೆ</translation> <translation id="4034824040120875894">ಪ್ರಿಂಟರ್</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> ಸೆಕೆಂಡ್ಗಳಲ್ಲಿ <ph name="RATE" /> ಶುಲ್ಕವನ್ನು ವಿಧಿಸಲಾಗಿದೆ.</translation> <translation id="4932733599132424254">ದಿನಾಂಕ</translation> <translation id="4985509611418653372">ರನ್ ಮಾಡಿ</translation> +<translation id="5154917547274118687">ಸ್ಮರಣೆ</translation> <translation id="5168185087976003268">ಬ್ಯಾಟರಿ ಬಾಳಿಕೆ:</translation> <translation id="520299634122159966">ಯಾವುದೇ ಲಭ್ಯವಿರುವ ಸ್ಕ್ಯಾನರ್ಗಳಿಲ್ಲ</translation> <translation id="5212543919916444558">ನಾನು ನಿಮಗೆ ಸಹಾಯ ಮಾಡಬಹುದಾದ ಯಾವುದೇ ವಿಷಯ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ನನಗೆ ಕಾಣಿಸಿಲ್ಲ. ನನ್ನ ಬಳಿ ಏನಾದರೂ ಕೇಳಬೇಕಿದ್ದರೆ, ಮೈಕ್ ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation> <translation id="6191293864534840972">ದೋಷಪೂರಿತ ಹೆಸರಿನ ಸರ್ವರ್ಗಳು</translation> +<translation id="6232017090690406397">ಬ್ಯಾಟರಿ</translation> <translation id="6325525973963619867">ವಿಫಲವಾಗಿದೆ</translation> <translation id="636850387210749493">ಎಂಟರ್ಪ್ರೈಸ್ ದಾಖಲಾತಿ</translation> <translation id="649050271426829538">ನಿಲ್ಲಿಸಲಾಗಿದೆ - ಪೇಪರ್ ಜಾಮ್ ಆಗಿದೆ</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">ವಿಳಂಬ ಥ್ರೆಶ್ಹೋಲ್ಡ್ ಮೇಲಿನ ಡೀಫಾಲ್ಟ್ ನೆಟ್ವರ್ಕ್</translation> <translation id="8919837981463578619">ವಿಫಲವಾಗಿದೆ - ಟ್ರೇ ಕಾಣೆಯಾಗಿದೆ</translation> <translation id="8928727111548978589">ವಿಫಲವಾಗಿದೆ - ಕಾಗದ ಖಾಲಿಯಾಗಿದೆ</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ</translation> <translation id="8970109610781093811">ಮತ್ತೆ ಚಾಲನೆ ಮಾಡಿ</translation> <translation id="9088306295921699330">ಪ್ರಸ್ತುತ ಬಳಕೆ</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> ಗಾಗಿ ಟಿಕೆಟ್ ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb index 269c4453..24d7773 100644 --- a/chromeos/strings/chromeos_strings_ko.xtb +++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">스캔을 시작할 수 없음</translation> <translation id="1071587090247825784">방화벽 감지됨</translation> <translation id="1075811647922107217">페이지 크기</translation> +<translation id="1124772482545689468">사용자</translation> <translation id="1175697296044146566">이 <ph name="DEVICE_TYPE" /> 기기는 <ph name="MANAGER" />에서 관리합니다.</translation> <translation id="1195447618553298278">알 수 없는 오류</translation> <translation id="1204296502688602597">DNS 지연 시간</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">남은 시도 <ph name="ATTEMPTS_LEFT" />회</translation> <translation id="2391082728065870591">의견 보고서 보내기</translation> <translation id="2461822463642141190">현재</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0}회 더 시도할 수 있습니다.}other{<ph name="ERROR_MESSAGE" /> {0}회 더 시도할 수 있습니다.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" />, <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">검색</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> 테스트 실행 중…</translation> +<translation id="2620436844016719705">시스템</translation> <translation id="2805756323405976993">앱</translation> <translation id="2872961005593481000">종료</translation> <translation id="3008341117444806826">새로고침</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">연결 진단</translation> <translation id="3091839911843451378">실패 - 중지됨</translation> +<translation id="3102119246920354026">캐시</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">내 파일</translation> <translation id="3199982728237701504">서류 급지(양면)</translation> <translation id="3246869037381808805">1일 이상 경과한 인쇄 작업은 삭제됩니다.</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">새 비밀번호</translation> <translation id="3865414814144988605">해상도</translation> <translation id="3941014780699102620">호스트를 확인할 수 없습니다.</translation> +<translation id="3942420633017001071">진단</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" />일 이상 경과한 인쇄 작업은 삭제됩니다.</translation> <translation id="4003384961948020559">실패 - 출력 가득 참</translation> <translation id="4034824040120875894">프린터</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" />초 동안 <ph name="RATE" /> 충전했습니다.</translation> <translation id="4932733599132424254">날짜</translation> <translation id="4985509611418653372">실행</translation> +<translation id="5154917547274118687">메모리</translation> <translation id="5168185087976003268">배터리 상태</translation> <translation id="520299634122159966">사용 가능한 스캐너 없음</translation> <translation id="5212543919916444558">화면에 도움을 드릴 수 있는 항목이 보이지 않습니다. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">자세히 알아보기</translation> <translation id="6191293864534840972">네임서버 형식이 잘못되었습니다.</translation> +<translation id="6232017090690406397">배터리</translation> <translation id="6325525973963619867">실패</translation> <translation id="636850387210749493">엔터프라이즈 등록</translation> <translation id="649050271426829538">중지됨 - 용지 걸림</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">기본 네트워크가 지연 시간 기준을 초과했습니다.</translation> <translation id="8919837981463578619">실패 - 트레이 없음</translation> <translation id="8928727111548978589">실패 - 용지 없음</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> 남은 시도 <ph name="ATTEMPTS_LEFT" />회</translation> <translation id="8970109610781093811">다시 실행</translation> <translation id="9088306295921699330">현재 사용량</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> 티켓을 새로고침하세요.</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb index 0582b6a..e49a244 100644 --- a/chromeos/strings/chromeos_strings_ky.xtb +++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Скандалып башталган жок</translation> <translation id="1071587090247825784">Тармактык коргоо аныкталды</translation> <translation id="1075811647922107217">Барактын өлчөмү</translation> +<translation id="1124772482545689468">Колдонуучу</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> түзмөгүн <ph name="MANAGER" /> башкарат.</translation> <translation id="1195447618553298278">Белгисиз ката.</translation> <translation id="1204296502688602597">DNS күтүү убакыты</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> аракет калды</translation> <translation id="2391082728065870591">Жооп пикир баяндамасын жөнөтүү</translation> <translation id="2461822463642141190">Учурда</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} аракет калды}other{<ph name="ERROR_MESSAGE" /> {0} аракет калды}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Скандоо</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> тести аткарылууда...</translation> +<translation id="2620436844016719705">Тутум</translation> <translation id="2805756323405976993">Колдонмолор</translation> <translation id="2872961005593481000">Жабуу</translation> <translation id="3008341117444806826">ЖАҢЫРТУУ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />мА</translation> <translation id="3083667275341675831">Байланыштагы мүчүлүштүктөрдү аныктоо</translation> <translation id="3091839911843451378">Басылып чыгарылган жок - Принтер токтоп калды</translation> +<translation id="3102119246920354026">Кэш</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Менин файлдарым</translation> <translation id="3199982728237701504">Документтерди берүүчү түзмөк (эки тараптуу)</translation> <translation id="3246869037381808805">1 күндөн мурунку басып чыгаруу тапшырмалары өчүрүлөт</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Жаңы сырсөз</translation> <translation id="3865414814144988605">Чечилиш</translation> <translation id="3941014780699102620">Башкы түйүн чечилген жок</translation> +<translation id="3942420633017001071">Мүчүлүштүктөрдү аныктоо</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> күндөн мурунку басып чыгаруу тапшырмалары өчүрүлөт</translation> <translation id="4003384961948020559">Басылып чыгарылган жок - Барактар тактасы толук</translation> <translation id="4034824040120875894">Принтер</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> секундда <ph name="RATE" /> кубатталды.</translation> <translation id="4932733599132424254">Күнү</translation> <translation id="4985509611418653372">Иштетүү</translation> +<translation id="5154917547274118687">Эстутум</translation> <translation id="5168185087976003268">Батареянын иштөө мөөнөтү</translation> <translation id="520299634122159966">Жеткиликтүү сканерлер жок</translation> <translation id="5212543919916444558">Экраныңызда эч нерсе көрүнгөн жок. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Кошумча маалымат</translation> <translation id="6191293864534840972">Бурмаланган ысым серверлери</translation> +<translation id="6232017090690406397">Батарея</translation> <translation id="6325525973963619867">Аткарылган жок</translation> <translation id="636850387210749493">Корпоративдик каттоо</translation> <translation id="649050271426829538">Токтоду – Кагаз чайналып калды</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Демейки тармак күтүү убакытынын босогосунан жогору</translation> <translation id="8919837981463578619">Басылып чыгарылган жок - Такта ордунда эмес</translation> <translation id="8928727111548978589">Басылып чыгарылган жок - Кагаз түгөнүп калды</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> аракет калды</translation> <translation id="9088306295921699330">Учурдагы колдонулушу</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> үчүн билетти жаңыртыңыз</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />-бет скандалууда</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb index f969d0a..d981366 100644 --- a/chromeos/strings/chromeos_strings_lo.xtb +++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ບໍ່ສາມາດເລີ່ມສະແກນໄດ້</translation> <translation id="1071587090247825784">ກວດເຫັນ Firewall</translation> <translation id="1075811647922107217">ຂະຫນາດຫນ້າ</translation> +<translation id="1124772482545689468">ຜູ້ໃຊ້</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> ນີ້ຈັດການໂດຍ <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">ຄວາມຜິດພາດທີ່ບໍ່ຮູ້ຈັກ.</translation> <translation id="1204296502688602597">ການຕອບສະໜອງຂອງ DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> ຈັດການຜູ້ໃຊ້ນີ້ ແລະ ອາດຈະຈັດການການຕັ້ງຄ່າ ແລະ ຕິດຕາມເບິ່ງການເຄື່ອນໄຫວຂອງຜູ້ໃຊ້ຈາກທາງໄກໄດ້.</translation> <translation id="150962533380566081">PUK ທີ່ຖືກຕ້ອງ.</translation> <translation id="1510238584712386396">ຕົວເປີດໃຊ້</translation> +<translation id="1621067168122174824">ເອີ້ນໃຊ້ການທົດສອບການສາກ</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ຫົວຂໍ້)</translation> <translation id="1641857168437328880">ຕົວປ້ອນເອກະສານ (ດ້ານດຽວ)</translation> <translation id="1644574205037202324">ປະຫວັດ</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">ມີ DNS Resolver</translation> <translation id="1743558184855585519">ລະບົບຈະຖືວ່າມີການໃຊ້ແບັດເຕີຣີເມື່ອເຖິງຂີດຈຳກັດ</translation> +<translation id="1792647875738159689">ກຳລັງຍົກເລີກການສະແກນ</translation> <translation id="1905710495812624430">ເກີນຈຳນວນຄວາມພະຍາຍາມສູງສຸດແລ້ວ.</translation> <translation id="1930797645656624981">ການບໍລິການວິທີການປ້ອນຂໍ້ມູນຂອງ Chrome OS</translation> <translation id="1947737735496445907">ພິມແລ້ວ</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">ຍັງລອງໄດ້ອີກ <ph name="ATTEMPTS_LEFT" /> ຄັ້ງ</translation> <translation id="2391082728065870591">ສົ່ງລາຍງານຄຳຕິຊົມ</translation> <translation id="2461822463642141190">ປັດຈຸບັນ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ <ph name="ERROR_MESSAGE" /> {0} ຄັ້ງ}other{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ <ph name="ERROR_MESSAGE" /> {0} ຄັ້ງ}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ສະແກນ</translation> <translation id="2570743873672969996">ກຳລັງເອີ້ນໃຊ້ການທົດສອບ <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">ລະບົບ</translation> <translation id="2805756323405976993">ແອັບ</translation> <translation id="2872961005593481000">ມອດ</translation> <translation id="3008341117444806826">ໂຫຼດຂໍ້ມູນໃໝ່</translation> <translation id="3009958530611748826">ເລືອກໂຟນເດີທີ່ຈະບັນທຶກໄວ້ໃນ</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">ທົດສອບບໍ່ສຳເລັດ</translation> <translation id="3083667275341675831">ການວິນິໄສການເຊື່ອມຕໍ່</translation> <translation id="3091839911843451378">ບໍ່ສຳເລັດ, ຢຸດແລ້ວ</translation> +<translation id="3102119246920354026">ແຄຊ໌</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ໄຟລ໌ຂອງຂ້ອຍ</translation> <translation id="3199982728237701504">ຕົວປ້ອນເອກະສານ (ສອງດ້ານ)</translation> <translation id="3246869037381808805">ວຽກພິມທີ່ເກົ່າກວ່າ 1 ມື້ຈະຖືກລຶບອອກ</translation> <translation id="3268178239013324452">ບໍ່ສຳເລັດ, ຝາເປີດຢູ່</translation> <translation id="3310640316857623290">ເວລາໃນການຕອບສະໜອງ DNS ສູງກວ່າເກນທີ່ຍອມຮັບໄດ້ຫຼາຍ</translation> +<translation id="3328783797891415197">ກຳລັງດຳເນີນການທົດສອບຢູ່</translation> <translation id="3369013195428705271">ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການລຶບປະຫວັດການພິມທັງໝົດ? ວຽກການພິມທີ່ພວມດຳເນີນຢູ່ຂອງທ່ານຈະບໍ່ຖືກລຶບລ້າງ.</translation> <translation id="3456078764689556234">ພິມໜ້າ <ph name="PRINTED_PAGES" /> ຈາກທັງໝົດ <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">ກໍາລັງພິມ</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">ລະຫັດຜ່ານໃໝ່</translation> <translation id="3865414814144988605">ຄວາມລະອຽດ</translation> <translation id="3941014780699102620">ແກ້ໄຂບັນຫາໂຮສບໍ່ສຳເລັດ</translation> +<translation id="3942420633017001071">ການກວດວິເຄາະບັນຫາ</translation> <translation id="39823212440917567">ວຽກພິມທີ່ເກົ່າກວ່າ <ph name="NUMBER_OF_DAYS" /> ມື້ຈະຖືກລຶບອອກ</translation> <translation id="4003384961948020559">ບໍ່ສຳເລັດ, ເອົ້າພຸດເຕັມ</translation> <translation id="4034824040120875894">ເຄື່ອງພິມ</translation> <translation id="4131410914670010031">ຂາວດໍາ</translation> <translation id="4145784616224233563">HTTP Firewall</translation> +<translation id="4170700058716978431">ບໍ່ສຳເລັດ</translation> <translation id="4227825898293920515">ລະຫັດຜ່ານໝົດອາຍຸໃນ <ph name="TIME" /></translation> <translation id="4238516577297848345">ບໍ່ມີວຽກການພິມທີ່ພວມດຳເນີນຢູ່</translation> <translation id="4297501883039923494">ຢຸດພິມ, ບໍ່ຮູ້ຈັກຂໍ້ຜິດພາດ</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">ຢຸດແລ້ວ</translation> <translation id="4808449224298348341">ຍົກເລີກວຽກພິມ <ph name="DOCUMENT_TITLE" /> ແລ້ວ</translation> <translation id="4832079907277790330">ເລືອກໂຟນເດີໃນແອັບ Files...</translation> +<translation id="4848429997038228357">ກຳລັງດຳເນີນຢູ່</translation> <translation id="4890353053343094602">ເລືອກລະຫັດຜ່ານໃໝ່ໃນທັນທີ</translation> <translation id="4917889632206600977">ຢຸດພິມ, ເຈ້ຍໝົດ</translation> <translation id="4921665434385737356">ສາກ <ph name="RATE" /> ໃນ <ph name="NUM_SECONDS" /> ວິນາທີ.</translation> <translation id="4932733599132424254">ວັນທີ</translation> <translation id="4985509611418653372">ເອີ້ນໃຊ້</translation> +<translation id="500920857929044050">ຢຸດການທົດສອບ</translation> +<translation id="5154917547274118687">ຄວາມຈໍາ</translation> <translation id="5168185087976003268">ສະຖານະແບັດເຕີຣີ</translation> <translation id="520299634122159966">ບໍ່ມີເຄື່ອງສະແກນພ້ອມນຳໃຊ້</translation> <translation id="5212543919916444558">ຂ້ອຍບໍ່ສາມາດຊອກເຫັນອັນໃດຢູ່ໃນໜ້າຈໍຂອງທ່ານທີ່ຂ້ອຍສາມາດຊ່ວຍໄດ້. ລອງແຕະໄມເພື່ອຖາມຂ້ອຍອັນໃດກໍໄດ້.</translation> <translation id="5222676887888702881">ອອກຈາກລະບົບ</translation> +<translation id="5264277876637023664">ດຳເນີນການທົດສອບ CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">ເປີດສິ່ງທີ່ເຮັດປະຈຳຄືນໃໝ່</translation> <translation id="5317780077021120954">ບັນທຶກ</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">ຖືກຈັດການ</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">ສຶກສາເພີ່ມເຕີມໃນສູນຊ່ວຍເຫຼືອ</translation> +<translation id="5635169860413004179">ເບິ່ງລາຍງານ</translation> <translation id="5719918614880940190">ນີ້ຈະວັດແທກການນຳໃຊ້ CPU ແລະ ເປັນການຮວບຮວມ Core ທັງໝົດ</translation> +<translation id="5797428682393400134">ສໍາເລັດແລ້ວ</translation> <translation id="5832805196449965646">ເພີ່ມບຸກຄົນ</translation> <translation id="5895138241574237353">ເລີ່ມຕົ້ນໃໝ່</translation> +<translation id="5931523347251946569">ບໍ່ພົບໄຟລ໌</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, ເວີຊັນ <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">ປິດ</translation> <translation id="6048107060512778456">ບໍ່ສຳເລັດ, ເຈ້ຍຕິດ</translation> <translation id="6050189528197190982">ໂທນສີເທົາ</translation> <translation id="6058625436358447366">ເພື່ອສຳເລັດກະລຸນາປ້ອນລະຫັດຜ່ານເກົ່າ ແລະ ໃໝ່ຂອງທ່ານ</translation> <translation id="6061772781719867950">ຄຳຂໍ HTTPS ບໍ່ສຳເລັດ</translation> +<translation id="6104112872696127344">ຍົກເລີກການສະແກນແລ້ວ</translation> <translation id="6106186594183574873">ເພື່ອສຳເລັດ, ກະລຸນາປ້ອນລະຫັດຜ່ານເກົ່າຂອງທ່ານ</translation> <translation id="6108689792487843350">ບໍ່ສາມາດຕິດຕໍ່ເກດເວໄດ້</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">ເພື່ອດຳເນີນການໃຫ້ສຳເລັດ, ກະລຸນາປ້ອນລະຫັດຜ່ານໃໝ່ຂອງທ່ານ</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ສຶກສາເພີ່ມເຕີມ</translation> <translation id="6191293864534840972">ເຊີບເວີຊື່ຜິດຮູບແບບ</translation> +<translation id="6232017090690406397">ແບັດເຕີຣີ</translation> <translation id="6325525973963619867">ບໍ່ສຳເລັດ</translation> <translation id="636850387210749493">ການລົງທະບຽນວິສາຫະກິດ</translation> <translation id="649050271426829538">ຢຸດພິມ - ເຈ້ຍຕິດ</translation> <translation id="6517239166834772319">ສຳຫຼວດ</translation> <translation id="6527081081771465939">ໂປຣໂຕຄໍຮັກສາຄວາມປອດໄພ WiFi ທີ່ບໍ່ຮູ້ຈັກ</translation> +<translation id="6532051501443766164">ເຊື່ອງລາຍງານ</translation> <translation id="65587193855025101">ແບບແທ່ນນອນ</translation> <translation id="6564646048574748301">ບໍ່ສຳເລັດ, ບໍ່ສາມາດຕິດຕໍ່ເຄື່ອງພິມໄດ້</translation> <translation id="6618744767048954150">ກຳລັງເປີດ</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">ລຶບ</translation> <translation id="6704062477274546131">ຄວາມລະອຽດ DNS</translation> <translation id="6747215703636344499">ຢຸດພິມ, ຖາດເຈ້ຍອອກເຕັມແລ້ວ</translation> +<translation id="6756731097889387912">ບໍ່ສາມາດຍົກເລີກການສະແກນໄດ້</translation> <translation id="6766275201586212568">ຄວາມລະອຽດ DNS ບໍ່ສຳເລັດ</translation> <translation id="6768237774506518020">ອັດຕາຄວາມບໍ່ສຳເລັດຂອງຄວາມລະອຽດ DNS ສູງ</translation> <translation id="6839141349259399400">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບເຄື່ອງສະແກນໄດ້ບໍ?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">ເວລາແຝງ HTTPS ສູງ</translation> <translation id="7658239707568436148">ຍົກເລີກ</translation> <translation id="7690294790491645610">ຢືນຢັນລະຫັດຜ່ານໃໝ່</translation> +<translation id="7732651821766520760">ການທົດສອບ <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">ສະຖານະ</translation> <translation id="7855434858642800953">ບັນທຶກໄຟລ໌ທີ່ສະແກນໄວ້ແລ້ວ!</translation> <translation id="7928373994957558460">ສະແດງສະຖານທີ່ໄຟລ໌</translation> @@ -191,11 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">ຄ່າມາດຕະຖານ</translation> <translation id="8845001906332463065">ຂໍການຊ່ວຍເຫຼືອ</translation> +<translation id="8881098542468797602">ສຳເລັດການທົດສອບແລ້ວ</translation> <translation id="8910721771319628100">ເຄືອຂ່າຍເລີ່ມຕົ້ນສູງກວ່າເກນເວລາໃນການຕອບສະໜອງ</translation> <translation id="8919837981463578619">ບໍ່ສຳເລັດ, ຖາດໃສ່ເຈ້ຍຫາຍໄປ</translation> <translation id="8928727111548978589">ບໍ່ສຳເລັດ, ເຈ້ຍໝົດ</translation> +<translation id="89415009803968170">ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ <ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ຄັ້ງ</translation> +<translation id="8970109610781093811">ເອີ້ນໃຊ້ອີກຄັ້ງ</translation> <translation id="9088306295921699330">ການນຳໃຊ້ໃນປັດຈຸບັນ</translation> <translation id="910415269708673980">ໂຫຼດຂໍ້ມູນປີ້ສຳລັບ <ph name="PRINCIPAL_NAME" /> ໃໝ່</translation> <translation id="9106415115617144481">ກຳລັງສະແກນໜ້າ <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">ປົດລັອກ</translation> +<translation id="9149391708638971077">ດຳເນີນການທົດສອບຄວາມຈຳ</translation> +<translation id="982713511914535780">ດຳເນີນການທົດສອບການຄາຍປະຈຸຂອງແບັດເຕີຣີ</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb index 15e399c..eb541ff 100644 --- a/chromeos/strings/chromeos_strings_lt.xtb +++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Nepavyko pradėti nuskaitymo</translation> <translation id="1071587090247825784">Aptikta užkarda</translation> <translation id="1075811647922107217">Puslapio dydis</translation> +<translation id="1124772482545689468">Naudotojas</translation> <translation id="1175697296044146566">Šį „<ph name="DEVICE_TYPE" />“ valdo <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Nežinoma klaida.</translation> <translation id="1204296502688602597">DNS delsa</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Liko bandymų: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Siųsti atsiliepimo ataskaitą</translation> <translation id="2461822463642141190">Dabartinė</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Liko {0} bandymas}one{<ph name="ERROR_MESSAGE" /> Liko {0} bandymas}few{<ph name="ERROR_MESSAGE" /> Liko {0} bandymai}many{<ph name="ERROR_MESSAGE" /> Liko {0} bandymo}other{<ph name="ERROR_MESSAGE" /> Liko {0} bandymų}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Nuskaityti</translation> <translation id="2570743873672969996">Vykdomas „<ph name="TEST_NAME" />“ bandymas...</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Taikomosios programos</translation> <translation id="2872961005593481000">Stabdyti</translation> <translation id="3008341117444806826">ATNAUJINTI</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Ryšio diagnostika</translation> <translation id="3091839911843451378">Nepavyko – sustabdyta</translation> +<translation id="3102119246920354026">Talpykla</translation> +<translation id="3122464029669770682">Centrinis procesorius</translation> <translation id="3188257591659621405">Mano failai</translation> <translation id="3199982728237701504">Dokumentų tiektuvas (dvipusis)</translation> <translation id="3246869037381808805">Senesnės nei 1 dienos spausdinimo užduotys bus pašalintos</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Naujas slaptažodis</translation> <translation id="3865414814144988605">Skyra</translation> <translation id="3941014780699102620">Nepavyko nustatyti prieglobos pavadinimo</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Senesnės nei <ph name="NUMBER_OF_DAYS" /> d. spausdinimo užduotys bus pašalintos</translation> <translation id="4003384961948020559">Nepavyko – išvestis pilna</translation> <translation id="4034824040120875894">Spausdintuvas</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Įkrauta: <ph name="RATE" /> per <ph name="NUM_SECONDS" /> sek.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Vykdyti</translation> +<translation id="5154917547274118687">Atmintis</translation> <translation id="5168185087976003268">Akumuliatoriaus būsena</translation> <translation id="520299634122159966">Nėra pasiekiamų skaitytuvų</translation> <translation id="5212543919916444558">Ekrane nieko nerasta, dėl ko galėtume jums padėti. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Sužinokite daugiau</translation> <translation id="6191293864534840972">Netinkamai sukonfigūruoti domenų pavadinimų serveriai</translation> +<translation id="6232017090690406397">Akumuliatorius</translation> <translation id="6325525973963619867">Nepavyko</translation> <translation id="636850387210749493">Įmonės registracija</translation> <translation id="649050271426829538">Sustabdyta – įstrigęs popierius</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Numatytojo tinklo delsa viršija slenksčio vertę</translation> <translation id="8919837981463578619">Nepavyko – nėra dėklo</translation> <translation id="8928727111548978589">Nepavyko – baigėsi popierius</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Liko bandymų: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Paleisti dar kartą</translation> <translation id="9088306295921699330">Dabartinis naudojimas</translation> <translation id="910415269708673980">Atnaujinkite <ph name="PRINCIPAL_NAME" /> bilietą</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb index 03cedfe..f2bb95d 100644 --- a/chromeos/strings/chromeos_strings_lv.xtb +++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Nevarēja sākt skenēšanu.</translation> <translation id="1071587090247825784">Konstatēts ugunsmūris</translation> <translation id="1075811647922107217">Lapas lielums</translation> +<translation id="1124772482545689468">Lietotājs</translation> <translation id="1175697296044146566">Šo <ph name="DEVICE_TYPE" /> ierīci pārvalda <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Nezināma kļūda.</translation> <translation id="1204296502688602597">DNS latentums</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> pārvalda šo lietotāju un, iespējams, var attālināti pārvaldīt iestatījumus un pārraudzīt lietotāja darbības.</translation> <translation id="150962533380566081">PUK nav derīgs.</translation> <translation id="1510238584712386396">Lietojumprogrammu palaidējs</translation> +<translation id="1621067168122174824">Veikt uzlādes pārbaudi</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (pavedienu skaits: <ph name="THREAD_COUNT" />)</translation> <translation id="1641857168437328880">Dokumentu padevējs (vienpusēji)</translation> <translation id="1644574205037202324">Vēsture</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS atrisinātāja pieejamība</translation> <translation id="1743558184855585519">Akumulators tiek uzskatīts par tukšu, kad tiek sasniegts ierobežojums.</translation> +<translation id="1792647875738159689">Skenēšana tiek atcelta</translation> <translation id="1905710495812624430">Ir pārsniegts maksimālais atļautais mēģinājumu skaits.</translation> <translation id="1930797645656624981">Chrome OS ievades metodes pakalpojums</translation> <translation id="1947737735496445907">Izdrukāts</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Vēl <ph name="ATTEMPTS_LEFT" /> mēģinājumi</translation> <translation id="2391082728065870591">Sūtīt atsauksmju pārskatu</translation> <translation id="2461822463642141190">Šobrīd</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Atlicis {0} mēģinājums.}zero{<ph name="ERROR_MESSAGE" />. Atlikuši {0} mēģinājumi.}one{<ph name="ERROR_MESSAGE" />. Atlicis {0} mēģinājums.}other{<ph name="ERROR_MESSAGE" />. Atlikuši {0} mēģinājumi.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> — <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Meklēt</translation> <translation id="2570743873672969996">Notiek testa “<ph name="TEST_NAME" />” izpilde...</translation> +<translation id="2620436844016719705">Sistēma</translation> <translation id="2805756323405976993">Lietotnes</translation> <translation id="2872961005593481000">Beidzēt</translation> <translation id="3008341117444806826">ATSVAIDZINĀT</translation> <translation id="3009958530611748826">Atlasiet mapi, kurā saglabāt failus</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Testēšana neizdevās</translation> <translation id="3083667275341675831">Savienojamības diagnostika</translation> <translation id="3091839911843451378">Neizdevās — darbība apturēta</translation> +<translation id="3102119246920354026">Kešatmiņa</translation> +<translation id="3122464029669770682">Maksa par daļas vienību</translation> <translation id="3188257591659621405">Mani faili</translation> <translation id="3199982728237701504">Dokumentu padevējs (divpusēji)</translation> <translation id="3246869037381808805">Drukas uzdevumi, kas ir vecāki par vienu dienu, tiks noņemti</translation> <translation id="3268178239013324452">Neizdevās — durtiņas ir atvērtas</translation> <translation id="3310640316857623290">DNS latentums ievērojami pārsniedz pieļaujamo slieksni</translation> +<translation id="3328783797891415197">Tiek veikta pārbaude</translation> <translation id="3369013195428705271">Vai tiešām vēlaties notīrīt visu drukāšanas vēsturi? Netiks notīrīti drukas uzdevumi, kas tiek izpildīti.</translation> <translation id="3456078764689556234">Izdrukāto lapu skaits: <ph name="PRINTED_PAGES" /> no<ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Drukāšana</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Jaunā parole</translation> <translation id="3865414814144988605">Izšķirtspēja</translation> <translation id="3941014780699102620">Neizdevās atrisināt saimniekdatora nosaukumu</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Drukas uzdevumi, kas ir vecāki par <ph name="NUMBER_OF_DAYS" /> dienām, tiks noņemti</translation> <translation id="4003384961948020559">Neizdevās — izvades paliktnis pilns</translation> <translation id="4034824040120875894">Printeris</translation> <translation id="4131410914670010031">Melnbaltā</translation> <translation id="4145784616224233563">HTTP ugunsmūris</translation> +<translation id="4170700058716978431">NESEKMĪGA</translation> <translation id="4227825898293920515">Paroles derīguma termiņš: <ph name="TIME" /></translation> <translation id="4238516577297848345">Nenotiek neviens drukas darbs</translation> <translation id="4297501883039923494">Apturēts — nezināma kļūda</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Pārtraukts</translation> <translation id="4808449224298348341">Drukas uzdevums “<ph name="DOCUMENT_TITLE" />” tika atcelts</translation> <translation id="4832079907277790330">Atlasīt mapi lietotnē Faili…</translation> +<translation id="4848429997038228357">TIEK VEIKTA</translation> <translation id="4890353053343094602">Nekavējoties izvēlieties jaunu</translation> <translation id="4917889632206600977">Apturēts — beidzies papīrs</translation> <translation id="4921665434385737356">Uzlādes apjoms: <ph name="RATE" /> <ph name="NUM_SECONDS" /> sekundēs.</translation> <translation id="4932733599132424254">Datums</translation> <translation id="4985509611418653372">Izpildīt</translation> +<translation id="500920857929044050">Apturēt pārbaudi</translation> +<translation id="5154917547274118687">Atmiņa</translation> <translation id="5168185087976003268">Akumulatora stāvoklis</translation> <translation id="520299634122159966">Nav pieejamu skeneru</translation> <translation id="5212543919916444558">Ekrānā neredzu neko, ar ko varētu palīdzēt. Pieskarieties mikrofonam, lai uzdotu man jautājumu.</translation> <translation id="5222676887888702881">Izrakstīties</translation> +<translation id="5264277876637023664">Veikt centrālā procesora pārbaudi</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />: <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Atkārtoti izpildīt darbību secību</translation> <translation id="5317780077021120954">Saglabāt</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Pārvaldītais</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Uzzināt vairāk palīdzības centrā</translation> +<translation id="5635169860413004179">Skatīt pārskatu</translation> <translation id="5719918614880940190">Nosaka centrālā procesora lietojumu un atspoguļo visu rādītāju apkopojumu.</translation> +<translation id="5797428682393400134">SEKMĪGA</translation> <translation id="5832805196449965646">Pievienot personu</translation> <translation id="5895138241574237353">Restartēt</translation> +<translation id="5931523347251946569">Fails nav atrasts</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versija <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Aizvērt</translation> <translation id="6048107060512778456">Neizdevās — iestrēdzis papīrs</translation> <translation id="6050189528197190982">Pelēktoņi</translation> <translation id="6058625436358447366">Lai pabeigtu, ievadiet savu iepriekšējo un jauno paroli</translation> <translation id="6061772781719867950">Nesekmīgi HTTP pieprasījumi</translation> +<translation id="6104112872696127344">Skenēšana ir atcelta</translation> <translation id="6106186594183574873">Lai pabeigtu, ievadiet savu iepriekšējo paroli</translation> <translation id="6108689792487843350">Vārteja nav sasniedzama</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Lai pabeigtu, ievadiet savu jauno paroli</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Uzzināt vairāk</translation> <translation id="6191293864534840972">Nepareizi nosaukumu serveri</translation> +<translation id="6232017090690406397">Akumulators</translation> <translation id="6325525973963619867">Neizdevās</translation> <translation id="636850387210749493">Uzņēmuma palaide</translation> <translation id="649050271426829538">Apturēts — iestrēdzis papīrs</translation> <translation id="6517239166834772319">Izpēte</translation> <translation id="6527081081771465939">Nezināms Wi-Fi drošības protokols</translation> +<translation id="6532051501443766164">Paslēpt pārskatu</translation> <translation id="65587193855025101">Plakanvirsma</translation> <translation id="6564646048574748301">Neizdevās — printeris nav sasniedzams</translation> <translation id="6618744767048954150">Notiek pārbaude</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Notīrīt</translation> <translation id="6704062477274546131">DNS atrise</translation> <translation id="6747215703636344499">Apturēts — izvades paliktnis ir pilns</translation> +<translation id="6756731097889387912">Nevarēja atcelt skenēšanu</translation> <translation id="6766275201586212568">DNS atrisināšanas kļūmes</translation> <translation id="6768237774506518020">Biežas DNS atrisināšanas kļūmes</translation> <translation id="6839141349259399400">Vai nevar izveidot savienojumu ar skeneriem?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Liels HTTPS latentums</translation> <translation id="7658239707568436148">Atcelt</translation> <translation id="7690294790491645610">Apstipriniet jauno paroli</translation> +<translation id="7732651821766520760">Pārbaude: <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Statuss</translation> <translation id="7855434858642800953">Skenētais fails ir saglabāts!</translation> <translation id="7928373994957558460">Parādīt faila atrašanās vietu</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Noklusējums</translation> <translation id="8845001906332463065">Saņemt palīdzību</translation> +<translation id="8881098542468797602">Pārbaude sekmīga</translation> <translation id="8910721771319628100">Noklusējuma tīkla latentums pārsniedza slieksni</translation> <translation id="8919837981463578619">Neizdevās — trūkst paliktņa</translation> <translation id="8928727111548978589">Neizdevās — beidzies papīrs</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Atlikušais mēģinājumu skaits: <ph name="ATTEMPTS_LEFT" />.</translation> <translation id="8970109610781093811">Izpildīt vēlreiz</translation> <translation id="9088306295921699330">Pašreizējais lietojums</translation> <translation id="910415269708673980">Atsvaidziniet <ph name="PRINCIPAL_NAME" /> biļeti</translation> <translation id="9106415115617144481">Notiek <ph name="PAGE_NUMBER" />. lapas skenēšana</translation> <translation id="9111102763498581341">Atbloķēt</translation> +<translation id="9149391708638971077">Veikt atmiņas pārbaudi</translation> +<translation id="982713511914535780">Veikt izlādes pārbaudi</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb index 520246c..07c85aa0 100644 --- a/chromeos/strings/chromeos_strings_mk.xtb +++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Не можеше да се започне со скенирање</translation> <translation id="1071587090247825784">Откриен е заштитен ѕид</translation> <translation id="1075811647922107217">Големина на страницата</translation> +<translation id="1124772482545689468">Корисник</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> управува со овој <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Непозната грешка.</translation> <translation id="1204296502688602597">DNS-латентност</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> управува со корисников и може оддалеку да управува со поставките и да ја набљудува неговата активност.</translation> <translation id="150962533380566081">Погрешен PUK.</translation> <translation id="1510238584712386396">Стартер</translation> +<translation id="1621067168122174824">Изврши тест за наполнетост</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> низи)</translation> <translation id="1641857168437328880">Внесувач на документи (едностран)</translation> <translation id="1644574205037202324">Историја</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Има DNS-одредувач</translation> <translation id="1743558184855585519">Батеријата се смета за потрошена штом ќе го достигне ограничувањето</translation> +<translation id="1792647875738159689">Се откажува скенирањето</translation> <translation id="1905710495812624430">Максималниот број дозволени обиди е надминат.</translation> <translation id="1930797645656624981">Услуга за метод за внесување во Chrome OS</translation> <translation id="1947737735496445907">Отпечатено</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Преостануваат <ph name="ATTEMPTS_LEFT" /> обиди</translation> <translation id="2391082728065870591">Испрати извештај со повратни информации</translation> <translation id="2461822463642141190">Моментално</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Уште {0} обид}one{<ph name="ERROR_MESSAGE" /> Уште {0} обиди}other{<ph name="ERROR_MESSAGE" /> Уште {0} обиди}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Скенирај</translation> <translation id="2570743873672969996">Се извршува тест за <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Систем</translation> <translation id="2805756323405976993">Апликации</translation> <translation id="2872961005593481000">Исклучи</translation> <translation id="3008341117444806826">ОСВЕЖИ</translation> <translation id="3009958530611748826">Изберете папка за зачувување</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Тестот не успеа</translation> <translation id="3083667275341675831">Дијагностика на поврзливоста</translation> <translation id="3091839911843451378">Неуспешно - запрено</translation> +<translation id="3102119246920354026">Кеш</translation> +<translation id="3122464029669770682">ЦПУ</translation> <translation id="3188257591659621405">Мои датотеки</translation> <translation id="3199982728237701504">Внесувач на документи (двостран)</translation> <translation id="3246869037381808805">Задачите за печатење постари од 1 ден ќе се отстранат</translation> <translation id="3268178239013324452">Неуспешно - вратата е отворена</translation> <translation id="3310640316857623290">Латенцијата на DNS е значително над дозволениот праг</translation> +<translation id="3328783797891415197">Тестот се извршува</translation> <translation id="3369013195428705271">Дали сте сигурни дека сакате да ја исчистите сета историја на печатење? Тековните задачи за печатење нема да бидат избришани.</translation> <translation id="3456078764689556234">Отпечатена страница <ph name="PRINTED_PAGES" /> од <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Се печати</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Нова лозинка</translation> <translation id="3865414814144988605">Резолуција</translation> <translation id="3941014780699102620">Неуспешно отворање на хостот</translation> +<translation id="3942420633017001071">Дијагностика</translation> <translation id="39823212440917567">Задачите за печатење постари од <ph name="NUMBER_OF_DAYS" /> дена ќе се отстранат</translation> <translation id="4003384961948020559">Неуспешно - излезната фиока е полна</translation> <translation id="4034824040120875894">Печатач</translation> <translation id="4131410914670010031">Црно и бело</translation> <translation id="4145784616224233563">Заштитен ѕид со HTTP</translation> +<translation id="4170700058716978431">НЕУСПЕШЕН</translation> <translation id="4227825898293920515">Лозинката истекува за <ph name="TIME" /></translation> <translation id="4238516577297848345">Нема задачи за печатење во тек</translation> <translation id="4297501883039923494">Запрено - непозната грешка</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Сопрено</translation> <translation id="4808449224298348341">Откажан налог за печатење: <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Изберете папка во апликацијата „Датотеки“…</translation> +<translation id="4848429997038228357">СЕ ИЗВРШУВА</translation> <translation id="4890353053343094602">Веднаш изберете нова</translation> <translation id="4917889632206600977">Запрено - нема хартија</translation> <translation id="4921665434385737356">Наполнета <ph name="RATE" /> за <ph name="NUM_SECONDS" /> секунди.</translation> <translation id="4932733599132424254">Датум</translation> <translation id="4985509611418653372">Изврши</translation> +<translation id="500920857929044050">Запри го тестот</translation> +<translation id="5154917547274118687">Меморија</translation> <translation id="5168185087976003268">Состојба на батеријата</translation> <translation id="520299634122159966">Нема достапни скенери</translation> <translation id="5212543919916444558">Не можам да најдам ништо на екранот со што би можел ви помогнам. Допрете го микрофонот за да ме прашате нешто.</translation> <translation id="5222676887888702881">Одјави се</translation> +<translation id="5264277876637023664">Изврши CPU-тест</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Изврши ги рутините повторно</translation> <translation id="5317780077021120954">Зачувај</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Управуван</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Дознајте повеќе во „Центарот за помош“</translation> +<translation id="5635169860413004179">Прикажи го извештајот</translation> <translation id="5719918614880940190">Ова го мери користењето на CPU и претставува збир од сите јадра</translation> +<translation id="5797428682393400134">УСПЕШЕН</translation> <translation id="5832805196449965646">Додај лице</translation> <translation id="5895138241574237353">Рестартирај</translation> +<translation id="5931523347251946569">Датотеката не е најдена</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, верзија <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Затвори</translation> <translation id="6048107060512778456">Неуспешно - заглавена хартија</translation> <translation id="6050189528197190982">Скала на сиви тонови</translation> <translation id="6058625436358447366">За да завршите, внесете ги старата и новата лозинка</translation> <translation id="6061772781719867950">Неуспешни HTTP-барања</translation> +<translation id="6104112872696127344">Скенирањето е откажано</translation> <translation id="6106186594183574873">За да завршите, внесете ја старата лозинка</translation> <translation id="6108689792487843350">Порталот е недостапен</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">За да завршите, внесете ја новата лозинка</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Дознајте повеќе</translation> <translation id="6191293864534840972">Неправилно форматирани сервери за име</translation> +<translation id="6232017090690406397">Батерија</translation> <translation id="6325525973963619867">Неуспешно</translation> <translation id="636850387210749493">Запишување компанија</translation> <translation id="649050271426829538">Запрено - заглавена хартија</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Непознат безбедносен протокол за Wi-Fi</translation> +<translation id="6532051501443766164">Сокриј го извештајот</translation> <translation id="65587193855025101">Со рамна плоча</translation> <translation id="6564646048574748301">Неуспешно - печатачот е недостапен</translation> <translation id="6618744767048954150">Се извршува</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Исчисти</translation> <translation id="6704062477274546131">Одредување со DNS</translation> <translation id="6747215703636344499">Запрено - излезната фиока е полна</translation> +<translation id="6756731097889387912">Не можеше да се откаже скенирањето</translation> <translation id="6766275201586212568">Неуспешни одредувања со DNS</translation> <translation id="6768237774506518020">Висока стапка на неуспех на одредување со DNS</translation> <translation id="6839141349259399400">Не може да се поврзете со скенерите?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Висока латенција на HTTPS</translation> <translation id="7658239707568436148">Откажи</translation> <translation id="7690294790491645610">Потврдете ја новата лозинка</translation> +<translation id="7732651821766520760">Тест за <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Статус</translation> <translation id="7855434858642800953">Скенираната датотека е зачувана.</translation> <translation id="7928373994957558460">Прикажи ја локацијата на датотеката</translation> @@ -191,11 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Стандардно</translation> <translation id="8845001906332463065">Побарајте помош</translation> +<translation id="8881098542468797602">Тестот успеа</translation> <translation id="8910721771319628100">Стандардната мрежа е над прагот за латентност</translation> <translation id="8919837981463578619">Неуспешно - недостасува фиоката</translation> <translation id="8928727111548978589">Неуспешно - нема хартија</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Преостанати обиди: <ph name="ATTEMPTS_LEFT" /></translation> +<translation id="8970109610781093811">Изврши повторно</translation> <translation id="9088306295921699330">Моментално користење</translation> <translation id="910415269708673980">Освежете го билетот за <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Се скенира страницата <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Отклучи</translation> +<translation id="9149391708638971077">Изврши тест за меморија</translation> +<translation id="982713511914535780">Изврши тест за празнење</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb index f18e53c..d2b2386a 100644 --- a/chromeos/strings/chromeos_strings_ml.xtb +++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">സ്കാൻ ചെയ്യൽ ആരംഭിക്കാനായില്ല</translation> <translation id="1071587090247825784">ഫയര്വാള് കണ്ടെത്തി</translation> <translation id="1075811647922107217">പേജിന്റെ വലുപ്പം</translation> +<translation id="1124772482545689468">ഉപയോക്താവ്</translation> <translation id="1175697296044146566">ഈ <ph name="DEVICE_TYPE" /> മാനേജ് ചെയ്യുന്നത് <ph name="MANAGER" /> ആണ്.</translation> <translation id="1195447618553298278">അജ്ഞാത പിശക്.</translation> <translation id="1204296502688602597">DNS പ്രതികരണ സമയം</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ശ്രമങ്ങൾ ശേഷിക്കുന്നു</translation> <translation id="2391082728065870591">ഫീഡ്ബാക്ക് റിപ്പോർട്ട് അയയ്ക്കുക</translation> <translation id="2461822463642141190">നിലവിൽ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ശ്രമം ശേഷിക്കുന്നു}other{<ph name="ERROR_MESSAGE" /> {0} ശ്രമങ്ങൾ ശേഷിക്കുന്നു}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">സ്കാൻ ചെയ്യുക</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> പരീക്ഷണം റൺ ചെയ്യുന്നു...</translation> +<translation id="2620436844016719705">സിസ്റ്റം</translation> <translation id="2805756323405976993">ആപ്സ്</translation> <translation id="2872961005593481000">അടയ്ക്കുക</translation> <translation id="3008341117444806826">പുതുക്കിയെടുക്കുക</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">കണക്റ്റിവിറ്റി തകരാർ കണ്ടെത്തൽ</translation> <translation id="3091839911843451378">പ്രിന്റ് ചെയ്യാനായില്ല - പ്രവർത്തനം നിർത്തി</translation> +<translation id="3102119246920354026">കാഷെ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">എൻ്റെ ഫയലുകൾ</translation> <translation id="3199982728237701504">ഡോക്യുമെന്റ് ഫീഡർ (രണ്ട് വശമുള്ളത്)</translation> <translation id="3246869037381808805">1 ദിവസം മുമ്പുള്ള പ്രിന്റ് ജോലികൾ നീക്കം ചെയ്യും</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">പുതിയ പാസ്വേഡ്</translation> <translation id="3865414814144988605">റെസല്യൂഷൻ</translation> <translation id="3941014780699102620">ഹോസ്റ്റ് പരിഹരിക്കാനായില്ല</translation> +<translation id="3942420633017001071">പ്രശ്നനിർണ്ണയം</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> ദിവസം മുമ്പുള്ള പ്രിന്റ് ജോലികൾ നീക്കം ചെയ്യും</translation> <translation id="4003384961948020559">പ്രിന്റ് ചെയ്യാനായില്ല - ഔട്ട്പുട്ട് നിറഞ്ഞിരിക്കുന്നു</translation> <translation id="4034824040120875894">പ്രിന്റർ</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> സെക്കന്റിൽ <ph name="RATE" /> ചാർജ് ചെയ്തു.</translation> <translation id="4932733599132424254">തീയതി</translation> <translation id="4985509611418653372">റൺ ചെയ്യുക</translation> +<translation id="5154917547274118687">മെമ്മറി</translation> <translation id="5168185087976003268">ബാറ്ററിയുടെ പ്രവർത്തനക്ഷമത</translation> <translation id="520299634122159966">ലഭ്യമായ സ്കാനറുകളൊന്നുമില്ല</translation> <translation id="5212543919916444558">എനിക്ക് സഹായിക്കാനാവുന്ന ഒന്നും നിങ്ങളുടെ സ്ക്രീനിൽ കണ്ടെത്താനാവുന്നില്ല. എന്നോട് എന്തെങ്കിലും ആവശ്യപ്പെടാൻ മൈക്ക് ടാപ്പ് ചെയ്യുന്നത് പരീക്ഷിക്കൂ.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">കൂടുതലറിയുക</translation> <translation id="6191293864534840972">തകരാറുള്ള നെയിം സെർവറുകൾ</translation> +<translation id="6232017090690406397">ബാറ്ററി</translation> <translation id="6325525973963619867">പരാജയപ്പെട്ടു</translation> <translation id="636850387210749493">സംരംഭ വിവരപ്പട്ടിക</translation> <translation id="649050271426829538">പ്രിന്റ് ജോലി നിർത്തി - പേപ്പർ ജാമായി</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">ഡിഫോൾട്ട് നെറ്റ്വർക്ക് പ്രതികരണ സമയം പരിധിക്ക് മുകളിലാണ്</translation> <translation id="8919837981463578619">പ്രിന്റ് ചെയ്യാനായില്ല - ട്രേ കാണുന്നില്ല</translation> <translation id="8928727111548978589">പ്രിന്റ് ചെയ്യാനായില്ല - പേപ്പറില്ല</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ശ്രമങ്ങൾ ശേഷിക്കുന്നു</translation> <translation id="8970109610781093811">വീണ്ടും പ്രവർത്തിപ്പിക്കുക</translation> <translation id="9088306295921699330">നിലവിലെ ഉപയോഗം</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> എന്നതിനുള്ള ടിക്കറ്റ് പുതുക്കിയെടുക്കുക</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb index 6f37c8bb..5948a9f4c 100644 --- a/chromeos/strings/chromeos_strings_mn.xtb +++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Скан хийхийг эхлүүлж чадсангүй</translation> <translation id="1071587090247825784">Галт хана илрүүлсэн</translation> <translation id="1075811647922107217">Хуудасны хэмжээ</translation> +<translation id="1124772482545689468">Хэрэглэгч</translation> <translation id="1175697296044146566">Энэ <ph name="DEVICE_TYPE" />-г <ph name="MANAGER" /> удирддаг.</translation> <translation id="1195447618553298278">Үл танигдах алдаа гаргасан байна</translation> <translation id="1204296502688602597">DNS-н хоцролт</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> энэ хэрэглэгчийг удирддаг бөгөөд алсаас тохиргоог удирдаж, хэрэглэгчийн үйл ажиллагааг хянаж болзошгүй.</translation> <translation id="150962533380566081">PUK буруу байна.</translation> <translation id="1510238584712386396">Launcher</translation> +<translation id="1621067168122174824">Цэнэглэх туршилтыг ажиллуулах</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> уялдаат)</translation> <translation id="1641857168437328880">Документыг дамжуулах тавиур (Нэг талаар нь)</translation> <translation id="1644574205037202324">Түүх</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Захидал</translation> <translation id="1706391837335750954">DNS тайлагчийг үзүүлэх</translation> <translation id="1743558184855585519">Батарейг хязгаарт хүрмэгц хэрэглэсэн гэж үзнэ</translation> +<translation id="1792647875738159689">Скан хийхийг цуцалж байна</translation> <translation id="1905710495812624430">Оролдлогын тоо дээд хэмжээнээс хэтэрсэн.</translation> <translation id="1930797645656624981">Chrome OS-н оруулах аргын үйлчилгээ</translation> <translation id="1947737735496445907">Хэвлэсэн</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> оролдлого үлдсэн</translation> <translation id="2391082728065870591">Санал хүсэлтийн тайлан илгээх</translation> <translation id="2461822463642141190">Одоогийн</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} оролдлого үлдсэн}other{<ph name="ERROR_MESSAGE" /> {0} оролдлого үлдсэн}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Шалгах</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> тестийг ажиллуулж байна...</translation> +<translation id="2620436844016719705">Систем</translation> <translation id="2805756323405976993">Програм</translation> <translation id="2872961005593481000">Унтраах</translation> <translation id="3008341117444806826">ДАХИН ШИНЭЧЛЭХ</translation> <translation id="3009958530611748826">Хадгалах фолдероо сонгоно уу</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />мA</translation> +<translation id="3069085583900247081">Туршилт амжилтгүй боллоо</translation> <translation id="3083667275341675831">Холболтын оношилгоо</translation> <translation id="3091839911843451378">Амжилтгүй болсон - Зогссон</translation> +<translation id="3102119246920354026">Кэш</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Миний файл</translation> <translation id="3199982728237701504">Документыг дамжуулах тавиур (Хоёр талаар нь)</translation> <translation id="3246869037381808805">1 хоногоос дээш хугацаагаар хадгалсан хэвлэлийн ажлуудыг хасах болно</translation> <translation id="3268178239013324452">Амжилтгүй болсон - Таг нээлттэй</translation> <translation id="3310640316857623290">DNS-н хоцролт зөвшөөрөгдөх хязгаараас нэлээд өндөр байна</translation> +<translation id="3328783797891415197">Туршилтыг ажиллуулж байна</translation> <translation id="3369013195428705271">Та хэвлэлийн бүх түүхийг арилгахдаа итгэлтэй байна уу? Таны хийж буй хэвлэлийн ажлуудыг арилгахгүй.</translation> <translation id="3456078764689556234"><ph name="TOTAL_PAGES" />-с <ph name="PRINTED_PAGES" /> хуудсыг хэвлэсэн.</translation> <translation id="3459509316159669723">Хэвлэж байна</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Шинэ нууц үг</translation> <translation id="3865414814144988605">Нягтрал</translation> <translation id="3941014780699102620">Хостыг шийдвэрлэж чадсангүй</translation> +<translation id="3942420633017001071">Оношилгоо</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> хоногоос дээш хугацаагаар хадгалсан хэвлэлийн ажлуудыг хасах болно</translation> <translation id="4003384961948020559">Амжилтгүй болсон - Гаралт дүүрсэн</translation> <translation id="4034824040120875894">Хэвлэгч</translation> <translation id="4131410914670010031">Хар ба цагаан</translation> <translation id="4145784616224233563">HTTP галт хана</translation> +<translation id="4170700058716978431">АМЖИЛТГҮЙ БОЛЛОО</translation> <translation id="4227825898293920515">Нууц үгний хугацаа <ph name="TIME" />-н дотор дуусна</translation> <translation id="4238516577297848345">Хэвлэж байгаа ажил алга</translation> <translation id="4297501883039923494">Зогссон - Тодорхойгүй алдаа</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Зогссон</translation> <translation id="4808449224298348341"><ph name="DOCUMENT_TITLE" /> хэвлэх ажлыг цуцалсан</translation> <translation id="4832079907277790330">Файлс аппаас фолдер сонгох...</translation> +<translation id="4848429997038228357">АЖИЛЛУУЛЖ БАЙНА</translation> <translation id="4890353053343094602">Нэн даруй шинийг сонгоно уу</translation> <translation id="4917889632206600977">Зогссон - Цаас дууссан</translation> <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> секундэд <ph name="RATE" /> цэнэглэсэн.</translation> <translation id="4932733599132424254">Огноо</translation> <translation id="4985509611418653372">Ажиллуулах</translation> +<translation id="500920857929044050">Туршилтыг зогсоох</translation> +<translation id="5154917547274118687">Санах ойн</translation> <translation id="5168185087976003268">Батарей барилт</translation> <translation id="520299634122159966">Боломжтой скан хийгч алга</translation> <translation id="5212543919916444558">Би таны дэлгэцээс туслах боломжтой зүйл олсонгүй. Асуух зүйл байвал микрофоныг товшиж үзнэ үү.</translation> <translation id="5222676887888702881">Гарах</translation> +<translation id="5264277876637023664">Төв процессорын нэгжийн туршилтыг ажиллуулах</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Хэвшлийг дахин ажиллуулах</translation> <translation id="5317780077021120954">Хадгалах</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Удирдсан</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Тусламжийн төвөөс нэмэлт мэдээлэл авах</translation> +<translation id="5635169860413004179">Тайланг харах</translation> <translation id="5719918614880940190">Энэ нь CPU-н ашиглалтыг хэмждэг бөгөөд бүх цөмийн хуримтлал юм</translation> +<translation id="5797428682393400134">АМЖИЛТТАЙ</translation> <translation id="5832805196449965646">Хүн нэм</translation> <translation id="5895138241574237353">Дахин асаах</translation> +<translation id="5931523347251946569">Файл олдсонгүй</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, хувилбар <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Хаах</translation> <translation id="6048107060512778456">Амжилтгүй болсон - Цаас гацсан</translation> <translation id="6050189528197190982">Хараас цагаан өнгө</translation> <translation id="6058625436358447366">Дуусгахын тулд хуучин болон шинэ нууц үгээ оруулна уу</translation> <translation id="6061772781719867950">HTTP хүсэлт амжилтгүй</translation> +<translation id="6104112872696127344">Скан хийхийг цуцалсан</translation> <translation id="6106186594183574873">Дуусгахын тулд хуучин нууц үгээ оруулна уу</translation> <translation id="6108689792487843350">Гэйтвэйд холбогдох боломжгүй байна</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />ГГц / <ph name="MAX" />ГГц</translation> <translation id="6146993107019042706">Дуусгахын тулд шинэ нууц үгээ оруулна уу</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Нэмэлт мэдээлэл авах</translation> <translation id="6191293864534840972">DNS алдаатай байна</translation> +<translation id="6232017090690406397">Баттерей</translation> <translation id="6325525973963619867">Амжилтгүй боллоо</translation> <translation id="636850387210749493">Байгууллагын бүртгэл</translation> <translation id="649050271426829538">Зогссон - Цаас гацсан</translation> <translation id="6517239166834772319">Судлах</translation> <translation id="6527081081771465939">WiFi-н аюулгүй байдлын үл мэдэгдэх протокол</translation> +<translation id="6532051501443766164">Тайланг нуух</translation> <translation id="65587193855025101">Тавцант</translation> <translation id="6564646048574748301">Амжилтгүй болсон - Хэвлэгчид холбогдох боломжгүй</translation> <translation id="6618744767048954150">Ажиллуулж байна</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Цэвэрлэх</translation> <translation id="6704062477274546131">DNS-н тайлал</translation> <translation id="6747215703636344499">Зогссон - Гаралт дүүрсэн</translation> +<translation id="6756731097889387912">Скан хийхийг цуцалж чадсангүй</translation> <translation id="6766275201586212568">DNS-н тайлал амжилтгүй</translation> <translation id="6768237774506518020">DNS-н тайллын алдааны өндөр хувь</translation> <translation id="6839141349259399400">Сканнертай холбогдож чадахгүй байна уу?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Өндөр HTTPS хоцролт</translation> <translation id="7658239707568436148">Болих</translation> <translation id="7690294790491645610">Шинэ нууц үг баталгаажуулна уу</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> туршилт</translation> <translation id="7805768142964895445">Байр байдал</translation> <translation id="7855434858642800953">Скан хийсэн файлыг хадгалсан!</translation> <translation id="7928373994957558460">Файлын байршлыг харуулах</translation> @@ -191,11 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Гэрээ үл биелүүлэх</translation> <translation id="8845001906332463065">Тусламж авах</translation> +<translation id="8881098542468797602">Туршилт амжилттай боллоо</translation> <translation id="8910721771319628100">Өгөгдмөл сүлжээ хоцролтын хязгаараас дээш байна</translation> <translation id="8919837981463578619">Амжилтгүй болсон - Тавиур алга байна</translation> <translation id="8928727111548978589">Амжилтгүй болсон - Цаас дууссан</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> оролдлого үлдлээ</translation> +<translation id="8970109610781093811">Дахин ажиллуулах</translation> <translation id="9088306295921699330">Одоогийн ашиглалт</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" />-н тасалбарыг дахин шинэчлэх</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />-р хуудсыг скан хийж байна</translation> <translation id="9111102763498581341">Нээх</translation> +<translation id="9149391708638971077">Санах ойн туршилтыг ажиллуулах</translation> +<translation id="982713511914535780">Цэнэггүй болгох туршилтыг ажиллуулах</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb index c6b4843..f136451 100644 --- a/chromeos/strings/chromeos_strings_mr.xtb +++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">स्कॅनिंग सुरू करता आले नाही</translation> <translation id="1071587090247825784">फायरवॉल डिटेक्ट केली</translation> <translation id="1075811647922107217">पेजचा आकार</translation> +<translation id="1124772482545689468">वापरकर्ता</translation> <translation id="1175697296044146566">हे <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> द्वारे व्यवस्थापित केले आहे.</translation> <translation id="1195447618553298278">अज्ञात एरर.</translation> <translation id="1204296502688602597">DNS लेटंसी</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> प्रयत्न शिल्लक</translation> <translation id="2391082728065870591">फीडबॅक अहवाल पाठवा</translation> <translation id="2461822463642141190">सद्य</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} प्रयत्न शिल्लक}other{<ph name="ERROR_MESSAGE" /> {0} प्रयत्न शिल्लक}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">स्कॅन करा</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> चाचणी रन होत आहे...</translation> +<translation id="2620436844016719705">सिस्टम</translation> <translation id="2805756323405976993">ॲप्लिकेशन</translation> <translation id="2872961005593481000">बंद करा</translation> <translation id="3008341117444806826">रिफ्रेश करा</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">कनेक्टिव्हिटी निदान</translation> <translation id="3091839911843451378">अयशस्वी झाले - थांबले आहे</translation> +<translation id="3102119246920354026">कॅशे </translation> +<translation id="3122464029669770682">सीपीयू</translation> <translation id="3188257591659621405">माझ्या फाइल</translation> <translation id="3199982728237701504">दस्तऐवज फीडर (दोन बाजू असलेले)</translation> <translation id="3246869037381808805">एक दिवसापेक्षा जुने प्रिंट जॉब काढून टाकले जातील</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">नवीन पासवर्ड</translation> <translation id="3865414814144988605">रिझोल्युशन</translation> <translation id="3941014780699102620">होस्टचे निराकरण करता आले नाही</translation> +<translation id="3942420633017001071">निदान</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> दिवसांपेक्षा जुने प्रिंट जॉब काढून टाकले जातील</translation> <translation id="4003384961948020559">अयशस्वी झाले - आउटपुट भरले आहे</translation> <translation id="4034824040120875894">प्रिंटर</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> सेकंदांत <ph name="RATE" /> शुल्क आकारले.</translation> <translation id="4932733599132424254">तारीख</translation> <translation id="4985509611418653372">रन</translation> +<translation id="5154917547274118687">मेमरी</translation> <translation id="5168185087976003268">बॅटरीची स्थिती</translation> <translation id="520299634122159966">कोणतीही स्कॅनर उपलब्ध नाही</translation> <translation id="5212543919916444558">मी मदत करू शकेन असे मला तुमच्या स्क्रीनवर काही आढळले नाही. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">अधिक जाणून घ्या</translation> <translation id="6191293864534840972">समस्या असलेले नेम सर्व्हर</translation> +<translation id="6232017090690406397">बॅटरी</translation> <translation id="6325525973963619867">अयशस्वी</translation> <translation id="636850387210749493">Enterprise नावनोंदणी</translation> <translation id="649050271426829538">थांबले - कागद अडकला</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">डीफॉल्ट नेटवर्क लेटंसी सीमेच्या वर आहे</translation> <translation id="8919837981463578619">अयशस्वी झाले - ट्रे सापडला नाही</translation> <translation id="8928727111548978589">अयशस्वी झाले - कागद संपला आहे</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> प्रयत्न शिल्लक</translation> <translation id="8970109610781093811">पुन्हा चालवा</translation> <translation id="9088306295921699330">सद्य वापर</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> चे तिकीट रिफ्रेश करा</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb index 2173806..4f25bd9 100644 --- a/chromeos/strings/chromeos_strings_ms.xtb +++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Tidak dapat memulakan pengimbasan</translation> <translation id="1071587090247825784">Tembok api dikesan</translation> <translation id="1075811647922107217">Saiz halaman</translation> +<translation id="1124772482545689468">Pengguna</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> ini diurus oleh <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Ralat tidak diketahui.</translation> <translation id="1204296502688602597">Kependaman DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> mengurus pengguna ini dan mungkin mengurus tetapan dan memantau aktiviti pengguna dari jauh.</translation> <translation id="150962533380566081">PUK tidak sah.</translation> <translation id="1510238584712386396">Pelancar</translation> +<translation id="1621067168122174824">Jalankan Ujian cas</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> urutan)</translation> <translation id="1641857168437328880">Penyuap Dokumen (Satu sisi)</translation> <translation id="1644574205037202324">Sejarah</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Surat</translation> <translation id="1706391837335750954">Pelerai DNS Ada</translation> <translation id="1743558184855585519">Bateri akan dianggap lupus sebaik sahaja had dicapai</translation> +<translation id="1792647875738159689">Membatalkan pengimbasan</translation> <translation id="1905710495812624430">Melebihi had maksimum percubaan yang dibenarkan.</translation> <translation id="1930797645656624981">Perkhidmatan Kaedah Input OS Chrome</translation> <translation id="1947737735496445907">Dicetak</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> percubaan lagi</translation> <translation id="2391082728065870591">Hantar Laporan Maklum balas</translation> <translation id="2461822463642141190">Semasa</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} percubaan lagi}other{<ph name="ERROR_MESSAGE" /> {0} percubaan lagi}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Imbas</translation> <translation id="2570743873672969996">Menjalankan ujian <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Apl</translation> <translation id="2872961005593481000">Mematikan</translation> <translation id="3008341117444806826">MUAT SEMULA</translation> <translation id="3009958530611748826">Pilih folder untuk menyimpan imbasan</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Ujian gagal</translation> <translation id="3083667275341675831">Diagnostik Ketersambungan</translation> <translation id="3091839911843451378">Gagal - Dihentikan</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Fail saya</translation> <translation id="3199982728237701504">Penyuap Dokumen (Dwisisi)</translation> <translation id="3246869037381808805">Tugas cetak yang melebihi 1 hari akan dialih keluar</translation> <translation id="3268178239013324452">Gagal - Pintu terbuka</translation> <translation id="3310640316857623290">Kependaman DNS ternyata melebihi ambang yang dibenarkan</translation> +<translation id="3328783797891415197">Ujian sedang berjalan</translation> <translation id="3369013195428705271">Adakah anda pasti anda ingin mengosongkan semua sejarah cetak? Tugas cetak anda yang masih dijalankan tidak akan dipadamkan.</translation> <translation id="3456078764689556234">Mencetak halaman <ph name="PRINTED_PAGES" /> daripada <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Mencetak</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Kata laluan baharu</translation> <translation id="3865414814144988605">Peleraian</translation> <translation id="3941014780699102620">Gagal untuk menyelesaikan hos</translation> +<translation id="3942420633017001071">Diagnostik</translation> <translation id="39823212440917567">Tugas cetak yang melebihi <ph name="NUMBER_OF_DAYS" /> hari akan dialih keluar</translation> <translation id="4003384961948020559">Gagal - Output penuh</translation> <translation id="4034824040120875894">Pencetak</translation> <translation id="4131410914670010031">Hitam putih</translation> <translation id="4145784616224233563">Tembok Api HTTP</translation> +<translation id="4170700058716978431">GAGAL</translation> <translation id="4227825898293920515">Kata laluan tamat tempoh dalam <ph name="TIME" /></translation> <translation id="4238516577297848345">Tiada tugas cetak yang sedang dijalankan</translation> <translation id="4297501883039923494">Dihentikan - Ralat tidak diketahui</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Dihentikan</translation> <translation id="4808449224298348341">Tugas cetak <ph name="DOCUMENT_TITLE" /> dibatalkan</translation> <translation id="4832079907277790330">Pilih folder dalam apl Files...</translation> +<translation id="4848429997038228357">BERJALAN</translation> <translation id="4890353053343094602">Pilih kata laluan baharu secepat mungkin</translation> <translation id="4917889632206600977">Dihentikan - Kehabisan kertas</translation> <translation id="4921665434385737356">Dicas <ph name="RATE" /> dalam masa <ph name="NUM_SECONDS" /> saat.</translation> <translation id="4932733599132424254">Tarikh</translation> <translation id="4985509611418653372">Jalankan</translation> +<translation id="500920857929044050">Hentikan ujian</translation> +<translation id="5154917547274118687">Memori</translation> <translation id="5168185087976003268">Kesihatan bateri</translation> <translation id="520299634122159966">Tiada pengimbas tersedia</translation> <translation id="5212543919916444558">Saya tidak menemui apa-apa pada skrin anda yang boleh saya bantu. Cuba ketik mikrofon untuk bertanyakan sebarang perkara kepada saya.</translation> <translation id="5222676887888702881">Log keluar</translation> +<translation id="5264277876637023664">Jalankan Ujian CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Jalankan Semula Rutin</translation> <translation id="5317780077021120954">Simpan</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Diuruskan</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Ketahui lebih lanjut dalam Pusat Bantuan</translation> +<translation id="5635169860413004179">Lihat Laporan</translation> <translation id="5719918614880940190">Item ini mengukur penggunaan CPU dan merupakan pengagregatan bagi semua teras</translation> +<translation id="5797428682393400134">BERJAYA</translation> <translation id="5832805196449965646">Tambah Orang</translation> <translation id="5895138241574237353">Mulakan Semula</translation> +<translation id="5931523347251946569">Fail tidak dijumpai</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versi <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Tutup</translation> <translation id="6048107060512778456">Gagal - Kertas tersangkut</translation> <translation id="6050189528197190982">Skala Kelabu</translation> <translation id="6058625436358447366">Untuk menyelesaikan proses ini, masukkan kata laluan lama dan baharu</translation> <translation id="6061772781719867950">Permintaan HTTP gagal</translation> +<translation id="6104112872696127344">Pengimbasan telah dibatalkan</translation> <translation id="6106186594183574873">Untuk menyelesaikan proses ini, masukkan kata laluan lama anda</translation> <translation id="6108689792487843350">Get Laluan tidak boleh dicapai</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">Untuk menyelesaikan proses ini, masukkan kata laluan baharu anda</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Ketahui lebih lanjut</translation> <translation id="6191293864534840972">Pelayan nama cacat</translation> +<translation id="6232017090690406397">Bateri</translation> <translation id="6325525973963619867">Gagal</translation> <translation id="636850387210749493">Pendaftaran perusahaan</translation> <translation id="649050271426829538">Dihentikan - Kertas tersangkut</translation> <translation id="6517239166834772319">Teroka</translation> <translation id="6527081081771465939">Protokol keselamatan Wi-Fi tidak diketahui</translation> +<translation id="6532051501443766164">Sembunyikan Laporan</translation> <translation id="65587193855025101">Dasar rata</translation> <translation id="6564646048574748301">Gagal - Pencetak tidak dapat dicapai</translation> <translation id="6618744767048954150">Berjalan</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Kosongkan</translation> <translation id="6704062477274546131">Peleraian DNS</translation> <translation id="6747215703636344499">Dihentikan - Output penuh</translation> +<translation id="6756731097889387912">Tidak dapat membatalkan pengimbasan</translation> <translation id="6766275201586212568">Penyelesaian DNS gagal</translation> <translation id="6768237774506518020">Kadar kegagalan penyelesaian DNS tinggi</translation> <translation id="6839141349259399400">Tidak dapat menyambung kepada pengimbas?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Kependaman HTTPS tinggi</translation> <translation id="7658239707568436148">Batal</translation> <translation id="7690294790491645610">Sahkan kata laluan baharu</translation> +<translation id="7732651821766520760">Ujian <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Fail yang diimbas telah disimpan!</translation> <translation id="7928373994957558460">Tunjukkan lokasi fail</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Lalai</translation> <translation id="8845001906332463065">Dapatkan bantuan</translation> +<translation id="8881098542468797602">Ujian berjaya</translation> <translation id="8910721771319628100">Rangkaian lalai melebihi ambang kependaman</translation> <translation id="8919837981463578619">Gagal - Dulang tiada</translation> <translation id="8928727111548978589">Gagal - Kehabisan kertas</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> percubaan lagi</translation> <translation id="8970109610781093811">Jalankan sekali lagi</translation> <translation id="9088306295921699330">Penggunaan semasa</translation> <translation id="910415269708673980">Muat semula tiket untuk <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Mengimbas halaman <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Buka kunci</translation> +<translation id="9149391708638971077">Jalankan Ujian memori</translation> +<translation id="982713511914535780">Jalankan Ujian nyahcas</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb index b391545..474f3f2 100644 --- a/chromeos/strings/chromeos_strings_my.xtb +++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">စကင်ဖတ်ရန် စတင်၍မရပါ</translation> <translation id="1071587090247825784">Firewall တွေ့ရှိသည်</translation> <translation id="1075811647922107217">စာမျက်နှာ အရွယ်အစား</translation> +<translation id="1124772482545689468">အသုံးပြုသူ</translation> <translation id="1175697296044146566">ဤ <ph name="DEVICE_TYPE" /> ကို <ph name="MANAGER" /> က စီမံသည်။</translation> <translation id="1195447618553298278">မှားရသည့်အကြောင်း မသိပါ။</translation> <translation id="1204296502688602597">DNS တုံ့ပြန်ချိန်</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732">ဤအသုံးပြုသူကို <ph name="MANAGER" /> က စီမံခန့်ခွဲသည့်အတွက် ဆက်တင်များကို အဝေးထိန်းစီမံပြီး အသုံးပြုသူ၏လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။</translation> <translation id="150962533380566081">PUK မမှန်ကန်ပါ။</translation> <translation id="1510238584712386396">Launcher</translation> +<translation id="1621067168122174824">အားသွင်းသည့်စမ်းသပ်မှု လုပ်ဆောင်ရန်</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (စာတွဲ <ph name="THREAD_COUNT" /> ခု)</translation> <translation id="1641857168437328880">စာရွက်စာတမ်း ထည့်ရန်ဗန်း (တစ်ဘက်သုံး)</translation> <translation id="1644574205037202324">မှတ်တမ်း</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS Resolver ရှိသည်</translation> <translation id="1743558184855585519">ကန့်သတ်ပမာဏသို့ ရောက်သွားသောအခါ ဘက်ထရီကုန်ပြီဟု သတ်မှတ်လိုက်သည်</translation> +<translation id="1792647875738159689">စကင်ဖတ်ခြင်းကို ပယ်ဖျက်နေသည်</translation> <translation id="1905710495812624430">အများဆုံးခွင့်ပြုပေးထားသည့် အခေါက်အရေအတွက်ထက် ကျော်လွန်သွားပါပြီ။</translation> <translation id="1930797645656624981">Chrome OS လက်ကွက်ဝန်ဆောင်မှု</translation> <translation id="1947737735496445907">ပုံနှိပ်ထုတ်ပြီးပြီ</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">လုပ်ဆောင်ခွင့် <ph name="ATTEMPTS_LEFT" /> ကြိမ် ကျန်သည်</translation> <translation id="2391082728065870591">တုံ့ပြန်ချက် အစီရင်ခံစာ ပို့ရန်</translation> <translation id="2461822463642141190">လက်ရှိ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ကြိမ် ကြိုးပမ်းနိုင်သည်}other{<ph name="ERROR_MESSAGE" /> {0} ကြိမ် ကြိုးပမ်းနိုင်သည်}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ရှာဖွေရန်</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> စစ်ဆေးမှု လုပ်ဆောင်နေသည်...</translation> +<translation id="2620436844016719705">စနစ်</translation> <translation id="2805756323405976993">အက်ပ်များ</translation> <translation id="2872961005593481000">ပိတ်ရန်</translation> <translation id="3008341117444806826">ပြန်လည်စတင်ရန်</translation> <translation id="3009958530611748826">သိမ်းရန် ဖိုင်တွဲကို ရွေးပါ</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> +<translation id="3069085583900247081">စမ်းသပ်မှု မအောင်မြင်ပါ</translation> <translation id="3083667275341675831">ချိတ်ဆက်နိုင်မှုဆိုင်ရာ အမှားရှာဖွေမှုများ</translation> <translation id="3091839911843451378">မအောင်မြင်ပါ - ရပ်သွားသည်</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ကျွန်ုပ်၏ဖိုင်များ</translation> <translation id="3199982728237701504">စာရွက်စာတမ်း ထည့်ရန်ဗန်း (နှစ်ဘက်သုံး)</translation> <translation id="3246869037381808805">1 ရက်အထက် ပရင့်ထုတ်ရန်ဖိုင်များကို ဖယ်ရှားပါမည်</translation> <translation id="3268178239013324452">မအောင်မြင်ပါ - တံခါးပွင့်နေသည်</translation> <translation id="3310640316857623290">DNS တုံ့ပြန်ချိန်က ခွင့်ပြုနိုင်သောသတ်မှတ်ကာလကို သိသာစွာကျော်နေသည်</translation> +<translation id="3328783797891415197">စမ်းသပ်မှု လုပ်ဆောင်နေသည်</translation> <translation id="3369013195428705271">ပုံနှိပ်မှတ်တမ်း အားလုံးကို ရှင်းထုတ်လိုသည်မှာ သေချာသလား။ ပုံနှိပ်ထုတ်နေသော ဖိုင်များကို ရှင်းထုတ်မည်မဟုတ်ပါ။</translation> <translation id="3456078764689556234">စာမျက်နှာ <ph name="TOTAL_PAGES" /> မျက်နှာအနက် <ph name="PRINTED_PAGES" /> မျက်နှာကို ပုံနှိပ်ထုတ်ထားသည်။</translation> <translation id="3459509316159669723">ပုံနှိပ်နေသည်</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">စကားဝှက်အသစ်</translation> <translation id="3865414814144988605">ပုံရိပ်ပြတ်သားကိန်း</translation> <translation id="3941014780699102620">ဆာဗာပင်ရင်းကို မဖြေရှင်းနိုင်ပါ</translation> +<translation id="3942420633017001071">အမှားရှာဖွေမှုများ</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> ရက်အထက် ပရင့်ထုတ်ရန်ဖိုင်များကို ဖယ်ရှားပါမည်</translation> <translation id="4003384961948020559">မအောင်မြင်ပါ - စာရွက်ထုတ်သည့်နေရာ ပြည့်နေသည်</translation> <translation id="4034824040120875894">ပုံနှိပ်စက်</translation> <translation id="4131410914670010031">အမည်း နှင့် အဖြူ</translation> <translation id="4145784616224233563">HTTP Firewall</translation> +<translation id="4170700058716978431">မအောင်မြင်ပါ</translation> <translation id="4227825898293920515">စကားဝှက်သည် <ph name="TIME" /> တွင် သက်တမ်းကုန်ပါမည်</translation> <translation id="4238516577297848345">ပရင့်ထုတ်ရန် ဖိုင်များ လုပ်ဆောင်မနေပါ</translation> <translation id="4297501883039923494">ရပ်သွားသည် - အမည်မသိ အမှား</translation> @@ -100,15 +109,19 @@ <translation id="4773299976671772492">ဆိုင်းငံ့ထား</translation> <translation id="4808449224298348341"><ph name="DOCUMENT_TITLE" /> ပရင့်ထုတ်ခြင်းကို ပယ်ဖျက်လိုက်သည်။</translation> <translation id="4832079907277790330">Files အက်ပ်တွင် ဖိုင်တွဲကိုရွေးရန်...</translation> +<translation id="4848429997038228357">လုပ်ဆောင်နေသည်</translation> <translation id="4890353053343094602">ချက်ချင်း အသစ်တစ်ခု ရွေးပါ</translation> <translation id="4917889632206600977">ရပ်သွားသည် - စာရွက်ကုန်နေသည်</translation> <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> စက္ကန့်အတွင်း <ph name="RATE" /> အားသွင်းထားသည်။</translation> <translation id="4932733599132424254">ရက်စွဲ</translation> <translation id="4985509611418653372">စဖွင့်ရန်</translation> +<translation id="500920857929044050">စမ်းသပ်မှု ရပ်ရန်</translation> +<translation id="5154917547274118687">မှတ်ဉာဏ်</translation> <translation id="5168185087976003268">ဘက်ထရီအခြေအနေ</translation> <translation id="520299634122159966">စကင်ဖတ်စနစ်များ မရနိုင်ပါ</translation> <translation id="5212543919916444558">သင့်မျက်နှာပြင်တွင် ကျွန်ုပ်ကူညီနိုင်သည့် အကြောင်းအရာများကို မတွေ့ပါ။ မိုက်ကို တို့ပြီး နှစ်သက်ရာ မေးနိုင်ပါသည်။</translation> <translation id="5222676887888702881">ထွက်ခွာရန်</translation> +<translation id="5264277876637023664">CPU စမ်းသပ်မှု လုပ်ဆောင်ရန်</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />၊ <ph name="PRINTER_NAME" />၊ <ph name="CREATION_TIME" />၊ <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">ပုံမှန်အစီအစဉ်များသို့ ပြန်သွားရန်</translation> <translation id="5317780077021120954">သိမ်းရန်</translation> @@ -121,26 +134,33 @@ <translation id="54609108002486618">ကြီးကြပ်ထားသည်</translation> <translation id="5493614766091057239"><ph name="VERDICT" />− <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">'ကူညီရေးဌာန' တွင် ပိုမိုလေ့လာရန်</translation> +<translation id="5635169860413004179">အစီရင်ခံစာကို ကြည့်ရန်</translation> <translation id="5719918614880940190">၎င်းက CPU အသုံးပြုမှုကို တိုင်းတာပြီး core အားလုံး၏ ပေါင်းစည်းဆောင်ရွက်မှု ဖြစ်သည်</translation> +<translation id="5797428682393400134">အောင်မြင်ပါသည်</translation> <translation id="5832805196449965646">လူကို ထည့်ပေးရန်</translation> <translation id="5895138241574237353">ပြန်စတင်မည</translation> +<translation id="5931523347251946569">ဖိုင်ကို ရှာမတွေ့ပါ</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />၊ ဗားရှင်း <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">ပိတ်ရန်</translation> <translation id="6048107060512778456">မအောင်မြင်ပါ - စာရွက်ညပ်နေသည်</translation> <translation id="6050189528197190982">ဖြူမဲစကေး</translation> <translation id="6058625436358447366">အပြီးသတ်ရန်အတွက် သင့်စကားဝှက် အသစ်နှင့် အဟောင်းကို ထည့်ပါ</translation> <translation id="6061772781719867950">HTTP တောင်းဆိုချက်များ မအောင်မြင်ပါ</translation> +<translation id="6104112872696127344">စကင်ဖတ်ခြင်းကို ပယ်ဖျက်လိုက်သည်</translation> <translation id="6106186594183574873">အပြီးသတ်ရန်အတွက် သင့်စကားဝှက်ဟောင်းကို ထည့်ပါ</translation> <translation id="6108689792487843350">ဂိတ်ဝကို မချိတ်ဆက်နိုင်ပါ</translation> +<translation id="6114428539405324828"><ph name="CURRENT" />GHz / <ph name="MAX" />GHz</translation> <translation id="6146993107019042706">အပြီးသတ်ရန် သင့်စကားဝှက်အသစ်ကို ထည့်ပါ</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ပိုမိုလေ့လာရန်</translation> <translation id="6191293864534840972">ပုံပျက်နေသော အမည်ဆာဗာများ</translation> +<translation id="6232017090690406397">ဘက်ထရီ</translation> <translation id="6325525973963619867">အောင်မြင်ပါ</translation> <translation id="636850387210749493">လုပ်ငန်း အမည်စာရင်းသွင်းခြင်း</translation> <translation id="649050271426829538">ရပ်သွားသည် - စာရွက်ညပ်နေသည်</translation> <translation id="6517239166834772319">စူးစမ်းလေ့လာခြင်း</translation> <translation id="6527081081771465939">အမည်မသိ WiFi လုံခြုံရေးပရိုတိုကော</translation> +<translation id="6532051501443766164">အစီရင်ခံစာကို ဖျောက်ထားရန်</translation> <translation id="65587193855025101">ပက်လက်တင်ရန်ဗန်း</translation> <translation id="6564646048574748301">မအောင်မြင်ပါ - ပုံနှိပ်စက်ကို ဆက်သွယ်၍မရပါ</translation> <translation id="6618744767048954150">လုပ်ဆောင်နေသည်</translation> @@ -148,6 +168,7 @@ <translation id="6643016212128521049">ရှင်းရန်</translation> <translation id="6704062477274546131">DNS ဖြေရှင်းချက်</translation> <translation id="6747215703636344499">ရပ်ထားသည် - အထွက်ပြည့်နေသည်</translation> +<translation id="6756731097889387912">စကင်ဖတ်ခြင်းကို ပယ်ဖျက်၍မရပါ</translation> <translation id="6766275201586212568">DNS ဖြေရှင်းချက်များ မအောင်မြင်ပါ</translation> <translation id="6768237774506518020">DNS ဖြေရှင်းချက် ကျရှုံးမှုနှုန်း မြင့်သည်</translation> <translation id="6839141349259399400">စကင်ဖတ်စက်များသို့ ချိတ်ဆက်၍မရဘူးလား။</translation> @@ -163,6 +184,7 @@ <translation id="7648838807254605802">HTTPS တုံ့ပြန်ချိန် မြင့်သည်</translation> <translation id="7658239707568436148">မလုပ်တော့</translation> <translation id="7690294790491645610">စကားဝှက်အသစ်ကို အတည်ပြုပါ</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" /> စမ်းသပ်မှု</translation> <translation id="7805768142964895445">အခြေအနေ</translation> <translation id="7855434858642800953">စကင်ဖတ်ထားသော ဖိုင်ကို သိမ်းပြီးပါပြီ။</translation> <translation id="7928373994957558460">ဖိုင်တည်နေရာကို ပြရန်</translation> @@ -190,11 +212,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">ပုံသေ</translation> <translation id="8845001906332463065">အကူအညီရယူပါ</translation> +<translation id="8881098542468797602">စမ်းသပ်မှု အောင်မြင်သည်</translation> <translation id="8910721771319628100">တုံ့ပြန်ချိန် သတ်မှတ်ကာလအထက်ရှိနေသော မူလကွန်ရက်</translation> <translation id="8919837981463578619">မအောင်မြင်ပါ - ဗန်းမရှိပါ</translation> <translation id="8928727111548978589">မအောင်မြင်ပါ - စာရွက်ကုန်နေသည်</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> လုပ်ဆောင်ခွင့် <ph name="ATTEMPTS_LEFT" /> ကြိမ် ကျန်သည်</translation> +<translation id="8970109610781093811">ထပ်လုပ်ဆောင်ရန်</translation> <translation id="9088306295921699330">လက်ရှိ အသုံးပြုမှု</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> အတွက် လက်မှတ်ကို ပြန်လည်စတင်ပါ</translation> <translation id="9106415115617144481">စာမျက်နှာ <ph name="PAGE_NUMBER" /> ကို စကင်ဖတ်နေသည်</translation> <translation id="9111102763498581341">သော့ဖွင့်ရန်</translation> +<translation id="9149391708638971077">မှတ်ဉာဏ်စမ်းသပ်မှု လုပ်ဆောင်ရန်</translation> +<translation id="982713511914535780">အားလျော့သည့်စမ်းသပ်မှု လုပ်ဆောင်ရန်</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb index 364f94e..bd9db08 100644 --- a/chromeos/strings/chromeos_strings_ne.xtb +++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">स्क्यान गर्ने प्रक्रिया सुरु गर्न सकिएन</translation> <translation id="1071587090247825784">फायरवाल पत्ता लाग्यो</translation> <translation id="1075811647922107217">पेजको आकार</translation> +<translation id="1124772482545689468">प्रयोगकर्ता</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> ले यो <ph name="DEVICE_TYPE" /> व्यवस्थापन गर्छ।</translation> <translation id="1195447618553298278">अज्ञात त्रुटि:</translation> <translation id="1204296502688602597">DNS को विलम्बता</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">अब <ph name="ATTEMPTS_LEFT" /> पटक प्रयास गर्न मिल्छ</translation> <translation id="2391082728065870591">फिडब्याक रिपोर्ट पठाउनुहोस्</translation> <translation id="2461822463642141190">हालको</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> अब {0} पटक प्रयास गर्न मिल्छ}other{<ph name="ERROR_MESSAGE" /> अब {0} पटक प्रयास गर्न मिल्छ}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">स्क्यान गर्नुहोस्</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> परीक्षण गरिँदै छ...</translation> +<translation id="2620436844016719705">सिस्टम</translation> <translation id="2805756323405976993">एप्स</translation> <translation id="2872961005593481000">बन्द गर्नुहोस्</translation> <translation id="3008341117444806826">पुनः ताजा गर्नुहोस्</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">कनेक्टिभिटी डाइगोनेस्टिक्स</translation> <translation id="3091839911843451378">प्रिन्ट गर्न सकिएन - प्रिन्ट गर्दा गर्दै रोकियो</translation> +<translation id="3102119246920354026">केस</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">मेरा फाइलहरू</translation> <translation id="3199982728237701504">डकुमेन्ट फिडर (दुईतर्फी)</translation> <translation id="3246869037381808805">१ दिनभन्दा पहिलेका प्रिन्टसम्बन्धी कार्यहरू हटाइने छन्</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">नयाँ पासवर्ड</translation> <translation id="3865414814144988605">रिजोलुसन</translation> <translation id="3941014780699102620">होस्टको समस्या समाधान गर्न सकिएन</translation> +<translation id="3942420633017001071">निदान</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> दिनभन्दा पहिलेका प्रिन्टसम्बन्धी कार्यहरू हटाइने छ</translation> <translation id="4003384961948020559">प्रिन्ट गर्न सकिएन - ट्रे भरियो</translation> <translation id="4034824040120875894">प्रिन्टर</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> सेकेन्डमा <ph name="RATE" /> चार्ज भयो।</translation> <translation id="4932733599132424254">मिति</translation> <translation id="4985509611418653372">चलाउनुहोस्</translation> +<translation id="5154917547274118687">स्मरण</translation> <translation id="5168185087976003268">ब्याट्रीको अवस्था</translation> <translation id="520299634122159966">कुनै पनि स्क्यानर उपलब्ध छैन</translation> <translation id="5212543919916444558">मैले तपाईंको स्क्रिनमा आफूले मद्दत गर्न मिल्ने कुनै पनि कुरा फेला पार्न सकिन। मलाई केही कुरा सोध्न माइकमा ट्याप गरी हेर्नुहोस्।</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">थप जान्नुहोस्</translation> <translation id="6191293864534840972">डोमेन नेम सर्भरहरूको ढाँचा मिलेको छैन</translation> +<translation id="6232017090690406397">ब्याटरी</translation> <translation id="6325525973963619867">चलाउन सकिएन</translation> <translation id="636850387210749493">उद्यम भर्ना</translation> <translation id="649050271426829538">रोकियो - प्रिन्टरमा कागज अड्कियो</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">पूर्वनिर्धारित नेटवर्कको विलम्बता समयसीमाभन्दा बढी छ</translation> <translation id="8919837981463578619">प्रिन्ट गर्न सकिएन - ट्रे छैन</translation> <translation id="8928727111548978589">प्रिन्ट गर्न सकिएन - कागज सकियो</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> अब <ph name="ATTEMPTS_LEFT" /> पटक प्रयास गर्न मिल्छ</translation> <translation id="9088306295921699330">हालको प्रयोग</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> को टिकट पुन: ताजा गर्नुहोस्</translation> <translation id="9106415115617144481">पेज <ph name="PAGE_NUMBER" /> स्क्यान गरिँदै छ</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb index f15282f..2afdb012 100644 --- a/chromeos/strings/chromeos_strings_nl.xtb +++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Kan scannen niet starten</translation> <translation id="1071587090247825784">Firewall waargenomen</translation> <translation id="1075811647922107217">Paginagrootte</translation> +<translation id="1124772482545689468">Gebruiker</translation> <translation id="1175697296044146566">Deze <ph name="DEVICE_TYPE" /> wordt beheerd door <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Onbekende fout</translation> <translation id="1204296502688602597">DNS-wachttijd</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Nog <ph name="ATTEMPTS_LEFT" /> pogingen</translation> <translation id="2391082728065870591">Feedbackrapport sturen</translation> <translation id="2461822463642141190">Huidig</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Nog {0} poging}other{<ph name="ERROR_MESSAGE" /> Nog {0} pogingen}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Scannen</translation> <translation id="2570743873672969996">Test <ph name="TEST_NAME" /> wordt uitgevoerd...</translation> +<translation id="2620436844016719705">Systeem</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Afsluiten</translation> <translation id="3008341117444806826">VERNIEUWEN</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Verbindingsdiagnose</translation> <translation id="3091839911843451378">Mislukt - Gestopt</translation> +<translation id="3102119246920354026">Cachegeheugen</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Mijn bestanden</translation> <translation id="3199982728237701504">Documentfeeder (dubbelzijdig)</translation> <translation id="3246869037381808805">Afdruktaken ouder dan 1 dag worden verwijderd</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nieuw wachtwoord</translation> <translation id="3865414814144988605">Resolutie</translation> <translation id="3941014780699102620">Kan host niet omzetten</translation> +<translation id="3942420633017001071">Diagnose</translation> <translation id="39823212440917567">Afdruktaken ouder dan <ph name="NUMBER_OF_DAYS" /> dagen worden verwijderd</translation> <translation id="4003384961948020559">Mislukt - Uitvoer is vol</translation> <translation id="4034824040120875894">Printer</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="RATE" /> opgeladen in <ph name="NUM_SECONDS" /> seconden.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Uitvoeren</translation> +<translation id="5154917547274118687">Geheugen</translation> <translation id="5168185087976003268">Batterijprestaties</translation> <translation id="520299634122159966">Geen beschikbare scanners</translation> <translation id="5212543919916444558">Ik heb niets gevonden op je scherm waarmee ik kan helpen. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">Png</translation> <translation id="6165508094623778733">Meer informatie</translation> <translation id="6191293864534840972">Nameservers met onjuiste notatie</translation> +<translation id="6232017090690406397">Batterij</translation> <translation id="6325525973963619867">Mislukt</translation> <translation id="636850387210749493">Aanmelding voor Enterprise</translation> <translation id="649050271426829538">Gestopt: papierstoring</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Standaardnetwerk overschrijdt drempel voor wachttijd</translation> <translation id="8919837981463578619">Mislukt - Lade ontbreekt</translation> <translation id="8928727111548978589">Mislukt - Geen papier meer</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Nog <ph name="ATTEMPTS_LEFT" /> pogingen</translation> <translation id="8970109610781093811">Opnieuw uitvoeren</translation> <translation id="9088306295921699330">Huidig gebruik</translation> <translation id="910415269708673980">Ticket voor <ph name="PRINCIPAL_NAME" /> vernieuwen</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb index 4e45ee91..cb1579e 100644 --- a/chromeos/strings/chromeos_strings_no.xtb +++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Kunne ikke starte skanningen</translation> <translation id="1071587090247825784">Oppdaget en brannmur</translation> <translation id="1075811647922107217">Sidestørrelse</translation> +<translation id="1124772482545689468">Bruker</translation> <translation id="1175697296044146566">Denne <ph name="DEVICE_TYPE" />-enheten administreres av <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Ukjent feil.</translation> <translation id="1204296502688602597">DNS-tidsforsinkelse</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> administrerer denne brukeren og kan administrere innstillinger og overvåke brukeraktiviteten eksternt.</translation> <translation id="150962533380566081">Ugyldig PUK.</translation> <translation id="1510238584712386396">Appoversikt</translation> +<translation id="1621067168122174824">Kjør ladetest</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> tråder)</translation> <translation id="1641857168437328880">Dokumentmater (ensidig)</translation> <translation id="1644574205037202324">Logg</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">DNS-resolveren er til stede</translation> <translation id="1743558184855585519">Batteriet anses som oppbrukt når grensen er nådd</translation> +<translation id="1792647875738159689">Avbryter skanningen</translation> <translation id="1905710495812624430">Du har overskredet maksimumsgrensen for antall forsøk.</translation> <translation id="1930797645656624981">Tjeneste for Chrome OS-inndatametode</translation> <translation id="1947737735496445907">Skrevet ut</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> forsøk igjen</translation> <translation id="2391082728065870591">Send tilbakemeldingsrapport</translation> <translation id="2461822463642141190">Nåværende</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} forsøk igjen}other{<ph name="ERROR_MESSAGE" /> {0} forsøk igjen}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skann</translation> <translation id="2570743873672969996">Kjører test av <ph name="TEST_NAME" /> …</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Apper</translation> <translation id="2872961005593481000">Slå av</translation> <translation id="3008341117444806826">OPPDATER</translation> <translation id="3009958530611748826">Velg mappen du vil lagre i</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Testen mislyktes</translation> <translation id="3083667275341675831">Tilkoblingsdiagnostikk</translation> <translation id="3091839911843451378">Mislykket – stoppet</translation> +<translation id="3102119246920354026">Buffer</translation> +<translation id="3122464029669770682">Prosessor</translation> <translation id="3188257591659621405">Mine filer</translation> <translation id="3199982728237701504">Dokumentmater (tosidig)</translation> <translation id="3246869037381808805">Utskriftsjobber som er eldre enn 1 dag, blir fjernet</translation> <translation id="3268178239013324452">Mislykket – luken er åpen</translation> <translation id="3310640316857623290">DNS-forsinkelsen er betydelig høyere enn den tillatte grenseverdien</translation> +<translation id="3328783797891415197">Testen kjøres</translation> <translation id="3369013195428705271">Er du sikker på at du vil tømme hele utskriftsloggen? Utskriftsjobber som allerede er i gang, fjernes ikke.</translation> <translation id="3456078764689556234">Skrev ut side <ph name="PRINTED_PAGES" /> av <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Utskrift</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nytt passord</translation> <translation id="3865414814144988605">Oppløsning</translation> <translation id="3941014780699102620">Kunne ikke finne tilknytning til verten</translation> +<translation id="3942420633017001071">Diagnostikk</translation> <translation id="39823212440917567">Utskriftsjobber som er eldre enn <ph name="NUMBER_OF_DAYS" /> dager, blir fjernet</translation> <translation id="4003384961948020559">Mislykket – utskriftsmottaket er fullt</translation> <translation id="4034824040120875894">Skriver</translation> <translation id="4131410914670010031">Svarthvitt</translation> <translation id="4145784616224233563">HTTP-brannmur</translation> +<translation id="4170700058716978431">MISLYKKET</translation> <translation id="4227825898293920515">Passordet utløper om <ph name="TIME" /></translation> <translation id="4238516577297848345">Ingen utskriftsjobber pågår</translation> <translation id="4297501883039923494">Stoppet – ukjent feil</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Stoppet</translation> <translation id="4808449224298348341">Avbrøt utskriftsjobben <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Velg en mappe i Filer-appen …</translation> +<translation id="4848429997038228357">KJØRER</translation> <translation id="4890353053343094602">Velg et nytt passord umiddelbart</translation> <translation id="4917889632206600977">Stoppet – tom for papir</translation> <translation id="4921665434385737356">Ladet <ph name="RATE" /> på <ph name="NUM_SECONDS" /> sekunder.</translation> <translation id="4932733599132424254">Dato</translation> <translation id="4985509611418653372">Kjør</translation> +<translation id="500920857929044050">Stans testen</translation> +<translation id="5154917547274118687">Minne</translation> <translation id="5168185087976003268">Batterihelse</translation> <translation id="520299634122159966">Ingen tilgjengelige skannere</translation> <translation id="5212543919916444558">Jeg finner ikke noe på skjermen jeg kan hjelpe deg med. Prøv å trykke på mikrofonen for å spørre meg om noe.</translation> <translation id="5222676887888702881">Logg av</translation> +<translation id="5264277876637023664">Kjør prosessortest</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Kjør rutinene på nytt</translation> <translation id="5317780077021120954">Lagre</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Administrert</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Finn ut mer i brukerstøtten</translation> +<translation id="5635169860413004179">Se rapporten</translation> <translation id="5719918614880940190">Dette er en sammenstilt måling av CPU-bruken for alle kjernene</translation> +<translation id="5797428682393400134">FULLFØRT</translation> <translation id="5832805196449965646">Legg til person</translation> <translation id="5895138241574237353">Start på nytt</translation> +<translation id="5931523347251946569">Fant ikke filen</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versjon <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Lukk</translation> <translation id="6048107060512778456">Mislykket – papirstopp</translation> <translation id="6050189528197190982">Gråtoner</translation> <translation id="6058625436358447366">For å fullføre passordendringen, skriv inn det gamle og det nye passordet</translation> <translation id="6061772781719867950">Mislykkede HTTP-forespørsler</translation> +<translation id="6104112872696127344">Skanningen er avbrutt</translation> <translation id="6106186594183574873">For å fullføre passordendringen, skriv inn det gamle passordet</translation> <translation id="6108689792487843350">Gatewayen er utilgjengelig</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">For å fullføre passordendringen, skriv inn det nye passordet</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Finn ut mer</translation> <translation id="6191293864534840972">Navnetjenerne inneholder feil</translation> +<translation id="6232017090690406397">Batteri</translation> <translation id="6325525973963619867">Mislykket</translation> <translation id="636850387210749493">Bedriftsregistrering</translation> <translation id="649050271426829538">Stoppet – papirstopp</translation> <translation id="6517239166834772319">Utforsk</translation> <translation id="6527081081771465939">Ukjent Wi-Fi-sikkerhetsprotokoll</translation> +<translation id="6532051501443766164">Skjul rapporten</translation> <translation id="65587193855025101">Planskanner</translation> <translation id="6564646048574748301">Mislykket – skriveren kan ikke nås</translation> <translation id="6618744767048954150">Kjører</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Tøm</translation> <translation id="6704062477274546131">DNS-konvertering</translation> <translation id="6747215703636344499">Stoppet – utskriftsmottaket er fullt</translation> +<translation id="6756731097889387912">Kunne ikke avbryte skanningen</translation> <translation id="6766275201586212568">Mislykkede DNS-oppslag</translation> <translation id="6768237774506518020">Høy feilfrekvens for DNS-oppslag</translation> <translation id="6839141349259399400">Kan du ikke koble til noen skannere?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Høy HTTPS-tidsforsinkelse</translation> <translation id="7658239707568436148">Avbryt</translation> <translation id="7690294790491645610">Bekreft det nye passordet</translation> +<translation id="7732651821766520760"><ph name="TEST_NAME" />test</translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Den skannede filen er lagret!</translation> <translation id="7928373994957558460">Vis filplassering</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8845001906332463065">Få hjelp</translation> +<translation id="8881098542468797602">Testen er fullført</translation> <translation id="8910721771319628100">Tidsforsinkelsen for standardnettverket er over grenseverdien</translation> <translation id="8919837981463578619">Mislykket – en skuff mangler</translation> <translation id="8928727111548978589">Mislykket – tom for papir</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> forsøk igjen</translation> <translation id="8970109610781093811">Kjør på nytt</translation> <translation id="9088306295921699330">Nåværende bruk</translation> <translation id="910415269708673980">Oppdater saken for <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skanner side <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Lås opp</translation> +<translation id="9149391708638971077">Kjør minnetest</translation> +<translation id="982713511914535780">Kjør utladingstest</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb index e35221ab..3564d83 100644 --- a/chromeos/strings/chromeos_strings_or.xtb +++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ସ୍କାନିଂ ଆରମ୍ଭ କରାଯାଇପାରିଲା ନାହିଁ</translation> <translation id="1071587090247825784">ଫାୟାରୱାଲ୍ ଥିବାର ଚିହ୍ନଟ କରାଯାଇଛି</translation> <translation id="1075811647922107217">ପୃଷ୍ଠାର ଆକାର</translation> +<translation id="1124772482545689468">ଉପଯୋଗକର୍ତ୍ତା</translation> <translation id="1175697296044146566">ଏହି <ph name="DEVICE_TYPE" />, <ph name="MANAGER" /> ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଛି।</translation> <translation id="1195447618553298278">ଅଜ୍ଞାତ ତୃଟି ।</translation> <translation id="1204296502688602597">DNS ଲାଟେନ୍ସି</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" />ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି</translation> <translation id="2391082728065870591">ମତାମତ ରିପୋର୍ଟ ପଠାନ୍ତୁ</translation> <translation id="2461822463642141190">ବର୍ତ୍ତମାନର</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0}ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି}other{<ph name="ERROR_MESSAGE" />{0}ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ସ୍କାନ୍ କରନ୍ତୁ</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> ପରୀକ୍ଷା ଚଲାଯାଉଛି...</translation> +<translation id="2620436844016719705">ସିଷ୍ଟମ୍</translation> <translation id="2805756323405976993">ଆପ୍ସ</translation> <translation id="2872961005593481000">ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="3008341117444806826">ରିଫ୍ରେଶ୍ କରନ୍ତୁ</translation> @@ -53,6 +54,7 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">ସଂଯୋଗ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ସ</translation> <translation id="3091839911843451378">ବିଫଳ ହୋଇଛି - ପ୍ରିଣ୍ଟର୍ ବନ୍ଦ ହୋଇଯାଇଛି</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ମୋ ଫାଇଲ୍ଗୁଡ଼ିକ</translation> <translation id="3199982728237701504">ଡକ୍ୟୁମେଣ୍ଟ ଫିଡର୍ (ଦୁଇ-ପାର୍ଶ୍ୱ)</translation> <translation id="3246869037381808805">1ଦିନରୁ ଅଧିକ ପୁରୁଣା ପ୍ରିଣ୍ଟ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯିବ</translation> @@ -71,6 +73,7 @@ <translation id="3838338534323494292">ନୂଆ ପାସ୍ୱାର୍ଡ</translation> <translation id="3865414814144988605">ରିଜୋଲ୍ୟୁଶନ୍</translation> <translation id="3941014780699102620">ହୋଷ୍ଟ ସମ୍ବନ୍ଧିତ ସମସ୍ୟାର ସମାଧାନ କରିବାରେ ବିଫଳ ହୋଇଛି</translation> +<translation id="3942420633017001071">ଡାଏଗ୍ନୋଷ୍ଟିକ୍ସ</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> ଦିନରୁ ଅଧିକ ପୁରୁଣା ପ୍ରିଣ୍ଟ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ କାଢ଼ି ଦିଆଯିବ</translation> <translation id="4003384961948020559">ବିଫଳ ହୋଇଛି - ଆଉଟପୁଟ୍ ଟ୍ରେ ପୂର୍ଣ୍ଣ ଅଛି</translation> <translation id="4034824040120875894">ପ୍ରିଣ୍ଟର୍</translation> @@ -105,6 +108,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> ସେକେଣ୍ଡରେ <ph name="RATE" /> ଚାର୍ଜ ହୋଇଛି</translation> <translation id="4932733599132424254">ତାରିଖ</translation> <translation id="4985509611418653372">ଚଲାନ୍ତୁ</translation> +<translation id="5154917547274118687">ମେମୋରୀ</translation> <translation id="5168185087976003268">ବ୍ୟାଟେରୀ ହେଲ୍ଥ</translation> <translation id="520299634122159966">କୌଣସି ସ୍କାନର୍ ଉପଲବ୍ଧ ନାହିଁ</translation> <translation id="5212543919916444558">ଆପଣଙ୍କର ସ୍କ୍ରିନ୍ରେ ମୁଁ କିଛି ଖୋଜିପାଇଲି ନାହିଁ ଯାହାଦ୍ୱାରା ମୁଁ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରିପାରିବି। @@ -137,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ଅଧିକ ଜାଣନ୍ତୁ</translation> <translation id="6191293864534840972">ତ୍ରୁଟିପୂର୍ଣ୍ଣ ନେମ୍ ସର୍ଭର୍</translation> +<translation id="6232017090690406397">ବ୍ୟାଟେରୀ</translation> <translation id="6325525973963619867">ବିଫଳ ହୋଇଛି</translation> <translation id="636850387210749493">ଏଣ୍ଟର୍ପ୍ରାଇଜ୍ ନାମାଙ୍କନ</translation> <translation id="649050271426829538">ବନ୍ଦ ହୋଇଯାଇଛି - ପେପର୍ ଜାମ୍</translation> @@ -194,6 +199,7 @@ <translation id="8910721771319628100">ଡିଫଲ୍ଟ ନେଟୱାର୍କ ଲାଟେନ୍ସି ସୀମାର ଉପରେ ଅଛି</translation> <translation id="8919837981463578619">ବିଫଳ ହୋଇଛି - ଟ୍ରେ ଅନୁପଲବ୍ଧ ଅଛି</translation> <translation id="8928727111548978589">ବିଫଳ ହୋଇଛି - କାଗଜ ଶେଷ ହୋଇଯାଇଛି</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /><ph name="ATTEMPTS_LEFT" />ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି</translation> <translation id="9088306295921699330">ବର୍ତ୍ତମାନର ବ୍ୟବହାର</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> ପାଇଁ ଟିକେଟ୍ ରିଫ୍ରେଶ୍ କରନ୍ତୁ</translation> <translation id="9106415115617144481">ପୃଷ୍ଠା <ph name="PAGE_NUMBER" />କୁ ସ୍କାନ୍ କରାଯାଉଛି</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index b13ae3f..7bf511dd 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ਸਕੈਨ ਕਰਨਾ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation> <translation id="1071587090247825784">Firewall ਦਾ ਪਤਾ ਲੱਗਾ</translation> <translation id="1075811647922107217">ਪੰਨੇ ਦਾ ਆਕਾਰ</translation> +<translation id="1124772482545689468">ਵਰਤੋਂਕਾਰ</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> ਵੱਲੋਂ ਇਸ <ph name="DEVICE_TYPE" /> ਦਾ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।</translation> <translation id="1195447618553298278">ਅਗਿਆਤ ਗੜਬੜ।</translation> <translation id="1204296502688602597">DNS ਵਿਲੰਬਤਾ</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ</translation> <translation id="2391082728065870591">ਵਿਚਾਰ ਸੰਬੰਧੀ ਰਿਪੋਰਟ ਭੇਜੋ</translation> <translation id="2461822463642141190">ਮੌਜੂਦਾ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ਕੋਸ਼ਿਸ਼ ਬਾਕੀ}one{<ph name="ERROR_MESSAGE" /> {0} ਕੋਸ਼ਿਸ਼ ਬਾਕੀ}other{<ph name="ERROR_MESSAGE" /> {0} ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ਸਕੈਨ ਕਰੋ</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation> +<translation id="2620436844016719705">ਸਿਸਟਮ</translation> <translation id="2805756323405976993">ਐਪਸ</translation> <translation id="2872961005593481000">ਸ਼ਟ ਡਾਊਨ</translation> <translation id="3008341117444806826">ਰਿਫ੍ਰੈਸ਼ ਕਰੋ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">ਕਨੈਕਟੀਵਿਟੀ ਤਸ਼ਖੀਸ</translation> <translation id="3091839911843451378">ਅਸਫਲ ਰਹੀ - ਪ੍ਰਿੰਟਰ ਰੁਕ ਗਿਆ ਹੈ</translation> +<translation id="3102119246920354026">ਕੈਚ</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ਮੇਰੀਆਂ ਫ਼ਾਈਲਾਂ</translation> <translation id="3199982728237701504">ਦਸਤਾਵੇਜ਼ ਫ਼ੀਡਰ (ਦੋ ਪਾਸੜ)</translation> <translation id="3246869037381808805">1 ਦਿਨ ਤੋਂ ਜ਼ਿਆਦਾ ਪੁਰਾਣੀਆਂ ਪ੍ਰਿੰਟ ਜੌਬਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">ਨਵਾਂ ਪਾਸਵਰਡ</translation> <translation id="3865414814144988605">ਰੈਜ਼ੋਲਿਊਸ਼ਨ</translation> <translation id="3941014780699102620">ਹੋਸਟ ਨੂੰ ਹੱਲ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ</translation> +<translation id="3942420633017001071">ਤਸ਼ਖੀਸ</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> ਦਿਨਾਂ ਤੋਂ ਜ਼ਿਆਦਾ ਪੁਰਾਣੀਆਂ ਪ੍ਰਿੰਟ ਜੌਬਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> <translation id="4003384961948020559">ਅਸਫਲ ਰਹੀ - ਆਊਟਪੁੱਟ ਭਰ ਗਿਆ ਹੈ</translation> <translation id="4034824040120875894">ਪ੍ਰਿੰਟਰ</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> ਸਕਿੰਟਾਂ ਵਿੱਚ <ph name="RATE" /> ਚਾਰਜ ਹੋਈ।</translation> <translation id="4932733599132424254">ਤਾਰੀਖ</translation> <translation id="4985509611418653372">ਚਲਾਓ</translation> +<translation id="5154917547274118687">ਮੈਮਰੀ</translation> <translation id="5168185087976003268">ਬੈਟਰੀ ਦੀ ਸਥਿਤੀ</translation> <translation id="520299634122159966">ਕੋਈ ਸਕੈਨਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> <translation id="5212543919916444558">ਮੈਨੂੰ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਅਜਿਹਾ ਕੁਝ ਵੀ ਨਹੀਂ ਮਿਲਿਆ ਜਿਸ ਵਿੱਚ ਮੈਂ ਤੁਹਾਡੀ ਮਦਦ ਕਰ ਸਕਾਂ। ਮੇਰੇ ਤੋਂ ਕੁਝ ਵੀ ਪੁੱਛਣ ਲਈ ਮਾਈਕ 'ਤੇ ਟੈਪ ਕਰਕੇ ਦੇਖੋ।</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ਹੋਰ ਜਾਣੋ</translation> <translation id="6191293864534840972">ਨੁਕਸਦਾਰ ਨਾਮ ਸਰਵਰ</translation> +<translation id="6232017090690406397">ਬੈਟਰੀ</translation> <translation id="6325525973963619867">ਅਸਫਲ ਰਿਹਾ</translation> <translation id="636850387210749493">ਐਂਟਰਪ੍ਰਾਈਜ਼ ਐਨਰੌਲਮੈਂਟ</translation> <translation id="649050271426829538">ਬੰਦ ਹੋ ਗਿਆ - ਕਾਗਜ਼ ਫਸ ਗਿਆ ਹੈ</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਨੈੱਟਵਰਕ ਵਿਲੰਬਤਾ ਨਿਊਨਤਮ ਸੀਮਾ ਤੋਂ ਉੱਤੇ ਹੈ</translation> <translation id="8919837981463578619">ਅਸਫਲ ਰਹੀ - ਟ੍ਰੇਅ ਮੌਜੂਦ ਨਹੀਂ ਹੈ</translation> <translation id="8928727111548978589">ਅਸਫਲ ਰਹੀ - ਕਾਗਜ਼ ਖਤਮ ਹੋ ਗਏ</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ</translation> <translation id="9088306295921699330">ਮੌਜੂਦਾ ਵਰਤੋਂ</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> ਦੀ ਟਿਕਟ ਨੂੰ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ</translation> <translation id="9106415115617144481">ਪੰਨਾ <ph name="PAGE_NUMBER" /> ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index 2862da77..a6d9c47 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Nie udało się rozpocząć skanowania</translation> <translation id="1071587090247825784">wykryto zaporę sieciową</translation> <translation id="1075811647922107217">Rozmiar strony</translation> +<translation id="1124772482545689468">Użytkownik</translation> <translation id="1175697296044146566">Tym urządzeniem <ph name="DEVICE_TYPE" /> zarządza <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Nieznany błąd.</translation> <translation id="1204296502688602597">Opóźnienie DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Pozostałe próby: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Prześlij zgłoszenie opinii</translation> <translation id="2461822463642141190">Aktualnie</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Pozostała {0} próba.}few{<ph name="ERROR_MESSAGE" /> Pozostały {0} próby.}many{<ph name="ERROR_MESSAGE" /> Pozostało {0} prób.}other{<ph name="ERROR_MESSAGE" /> Pozostało {0} próby.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skanuj</translation> <translation id="2570743873672969996">Wykonuję test <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Aplikacje</translation> <translation id="2872961005593481000">Wyłącz</translation> <translation id="3008341117444806826">ODŚWIEŻ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostyka problemów z łącznością</translation> <translation id="3091839911843451378">Niepowodzenie – drukarka została zatrzymana</translation> +<translation id="3102119246920354026">Pamięć podręczna</translation> +<translation id="3122464029669770682">Procesor</translation> <translation id="3188257591659621405">Moje pliki</translation> <translation id="3199982728237701504">Podajnik dokumentów (dwustronny)</translation> <translation id="3246869037381808805">Zadania drukowania starsze niż 1 dzień zostaną usunięte</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nowe hasło</translation> <translation id="3865414814144988605">Rozdzielczość</translation> <translation id="3941014780699102620">Nie udało się znaleźć hosta</translation> +<translation id="3942420633017001071">Diagnostyka</translation> <translation id="39823212440917567">Zadania drukowania starsze niż <ph name="NUMBER_OF_DAYS" /> dni zostaną usunięte</translation> <translation id="4003384961948020559">Niepowodzenie – odbiornik papieru jest pełny</translation> <translation id="4034824040120875894">Drukarka</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Naładowano <ph name="RATE" /> w ciągu <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Uruchom</translation> +<translation id="5154917547274118687">Pamięć</translation> <translation id="5168185087976003268">Kondycja baterii</translation> <translation id="520299634122159966">Brak dostępnych skanerów</translation> <translation id="5212543919916444558">Na Twoim ekranie nie ma nic, w czym mogę pomóc. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Dowiedz się więcej</translation> <translation id="6191293864534840972">Nieprawidłowe serwery nazw</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Niepowodzenie</translation> <translation id="636850387210749493">Rejestracja w firmie</translation> <translation id="649050271426829538">Zatrzymano – zacięcie papieru</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Sieć domyślna przekroczyła próg opóźnienia</translation> <translation id="8919837981463578619">Niepowodzenie – nie znaleziono tacy</translation> <translation id="8928727111548978589">Niepowodzenie – brak papieru</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Pozostałe próby: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Uruchom ponownie</translation> <translation id="9088306295921699330">Obecne wykorzystanie</translation> <translation id="910415269708673980">Odśwież bilet przypisany do konta <ph name="PRINCIPAL_NAME" />.</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb index 7f9d4c32..995db21c 100644 --- a/chromeos/strings/chromeos_strings_pt-BR.xtb +++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Não foi possível iniciar a digitalização</translation> <translation id="1071587090247825784">Firewall detectado</translation> <translation id="1075811647922107217">Tamanho da página</translation> +<translation id="1124772482545689468">Usuário</translation> <translation id="1175697296044146566">Este <ph name="DEVICE_TYPE" /> é gerenciado por <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Erro desconhecido.</translation> <translation id="1204296502688602597">Latência de DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentativas restantes</translation> <translation id="2391082728065870591">Enviar relatório de feedback</translation> <translation id="2461822463642141190">Atual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} tentativa restante}one{<ph name="ERROR_MESSAGE" /> {0} tentativa restante}other{<ph name="ERROR_MESSAGE" /> {0} tentativas restantes}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Verificar</translation> <translation id="2570743873672969996">Executando o teste <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Desligar</translation> <translation id="3008341117444806826">ATUALIZAR</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnósticos de conectividade</translation> <translation id="3091839911843451378">Falha - Ação interrompida</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Meus arquivos</translation> <translation id="3199982728237701504">Alimentador de documentos (frente e verso)</translation> <translation id="3246869037381808805">Trabalhos de impressão enviados há mais de 1 dia serão removidos</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nova senha</translation> <translation id="3865414814144988605">Resolução</translation> <translation id="3941014780699102620">Falha na resolução do host</translation> +<translation id="3942420633017001071">Diagnóstico</translation> <translation id="39823212440917567">Trabalhos de impressão enviados há mais de <ph name="NUMBER_OF_DAYS" /> dias serão removidos</translation> <translation id="4003384961948020559">Falha - Saída cheia</translation> <translation id="4034824040120875894">Impressora</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="RATE" /> carregados em <ph name="NUM_SECONDS" /> segundos.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Executar</translation> +<translation id="5154917547274118687">Memória</translation> <translation id="5168185087976003268">Integridade da bateria</translation> <translation id="520299634122159966">Não há scanners disponíveis</translation> <translation id="5212543919916444558">Não foi possível encontrar na sua tela nada com o que eu possa ajudar. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Saiba mais</translation> <translation id="6191293864534840972">Servidores de nomes incorretos</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Falha</translation> <translation id="636850387210749493">Registro da empresa</translation> <translation id="649050271426829538">Parado (atolamento de papel)</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Rede padrão acima do limite de latência</translation> <translation id="8919837981463578619">Falha - Bandeja ausente</translation> <translation id="8928727111548978589">Falha - Sem papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> tentativas restantes</translation> <translation id="8970109610781093811">Executar novamente</translation> <translation id="9088306295921699330">Uso atual</translation> <translation id="910415269708673980">Atualizar tíquete para <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb index 6f9ad4b..39a8a81 100644 --- a/chromeos/strings/chromeos_strings_pt-PT.xtb +++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Não foi possível iniciar a digitalização.</translation> <translation id="1071587090247825784">Firewall detetada</translation> <translation id="1075811647922107217">Tamanho da página</translation> +<translation id="1124772482545689468">Utilizador</translation> <translation id="1175697296044146566">Este <ph name="DEVICE_TYPE" /> é gerido por <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Erro desconhecido.</translation> <translation id="1204296502688602597">Latência de DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> gere este utilizador e pode gerir remotamente as definições e monitorizar a atividade do utilizador.</translation> <translation id="150962533380566081">PUK inválido.</translation> <translation id="1510238584712386396">Launcher</translation> +<translation id="1621067168122174824">Executar teste de carregamento</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads)</translation> <translation id="1641857168437328880">Alimentador de documentos (um lado)</translation> <translation id="1644574205037202324">Histórico</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Resolvedor de DNS presente</translation> <translation id="1743558184855585519">A bateria é considerada consumida quando atingir o limite.</translation> +<translation id="1792647875738159689">A cancelar a digitalização…</translation> <translation id="1905710495812624430">Foi excedido o número máximo de tentativas permitidas.</translation> <translation id="1930797645656624981">Serviço do método de introdução do Chrome OS</translation> <translation id="1947737735496445907">Impressão concluída</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentativas restantes</translation> <translation id="2391082728065870591">Enviar relatório de feedback</translation> <translation id="2461822463642141190">Atual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} tentativa restante.}other{<ph name="ERROR_MESSAGE" /> {0} tentativas restantes.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Analisar</translation> <translation id="2570743873672969996">A executar o teste <ph name="TEST_NAME" />…</translation> +<translation id="2620436844016719705">Sistema</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2872961005593481000">Encerrar</translation> <translation id="3008341117444806826">ATUALIZAR</translation> <translation id="3009958530611748826">Selecione uma pasta onde guardar</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">O teste falhou</translation> <translation id="3083667275341675831">Diagnóstico de conetividade</translation> <translation id="3091839911843451378">Falha – Parou</translation> +<translation id="3102119246920354026">Cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Os meus ficheiros</translation> <translation id="3199982728237701504">Alimentador de documentos (dois lados)</translation> <translation id="3246869037381808805">As tarefas de impressão com mais de um 1 dia serão removidas.</translation> <translation id="3268178239013324452">Falha – Porta aberta</translation> <translation id="3310640316857623290">Latência de DNS significativamente acima do limite permitido.</translation> +<translation id="3328783797891415197">A executar teste…</translation> <translation id="3369013195428705271">Tem a certeza de que pretende limpar todo o histórico de impressões? As suas tarefas de impressão em curso não serão limpas.</translation> <translation id="3456078764689556234">Página <ph name="PRINTED_PAGES" /> impressa de <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Impressão</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nova palavra-passe</translation> <translation id="3865414814144988605">Resolução</translation> <translation id="3941014780699102620">Falha ao resolver anfitrião.</translation> +<translation id="3942420633017001071">Diagnósticos</translation> <translation id="39823212440917567">As tarefas de impressão com mais de <ph name="NUMBER_OF_DAYS" /> dias serão removidas.</translation> <translation id="4003384961948020559">Falha – Saída cheia</translation> <translation id="4034824040120875894">Impressora</translation> <translation id="4131410914670010031">Preto e branco</translation> <translation id="4145784616224233563">Firewall HTTP</translation> +<translation id="4170700058716978431">FALHOU</translation> <translation id="4227825898293920515">A palavra-passe expira daqui a <ph name="TIME" /></translation> <translation id="4238516577297848345">Nenhuma tarefa de impressão em curso.</translation> <translation id="4297501883039923494">Parada – Erro desconhecido</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Parado</translation> <translation id="4808449224298348341">Foi cancelada a tarefa de impressão de <ph name="DOCUMENT_TITLE" />.</translation> <translation id="4832079907277790330">Selecionar pasta na app Files…</translation> +<translation id="4848429997038228357">EM EXECUÇÃO</translation> <translation id="4890353053343094602">Escolha uma nova de imediato</translation> <translation id="4917889632206600977">Parada – Sem papel</translation> <translation id="4921665434385737356">Carregou <ph name="RATE" /> em <ph name="NUM_SECONDS" /> segundos.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Executar</translation> +<translation id="500920857929044050">Parar teste</translation> +<translation id="5154917547274118687">Memória</translation> <translation id="5168185087976003268">Condição da bateria</translation> <translation id="520299634122159966">Nenhum leitor disponível.</translation> <translation id="5212543919916444558">Não consigo encontrar nada no ecrã com que possa ajudar. Experimente tocar no microfone para me perguntar o que quiser.</translation> <translation id="5222676887888702881">Terminar sessão</translation> +<translation id="5264277876637023664">Executar teste da CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Executar novamente as Rotinas</translation> <translation id="5317780077021120954">Guardar</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Geridos</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Saber mais no Centro de Ajuda</translation> +<translation id="5635169860413004179">Ver relatório</translation> <translation id="5719918614880940190">Isto mede a utilização da CPU e é uma agregação de todos os núcleos.</translation> +<translation id="5797428682393400134">ÊXITO</translation> <translation id="5832805196449965646">Adicionar pessoa</translation> <translation id="5895138241574237353">Reiniciar</translation> +<translation id="5931523347251946569">Ficheiro não encontrado</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versão <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Fechar</translation> <translation id="6048107060512778456">Falha – Encravamento de papel</translation> <translation id="6050189528197190982">Tons de cinzento</translation> <translation id="6058625436358447366">Para terminar, introduza a palavra-passe antiga e a nova</translation> <translation id="6061772781719867950">Pedidos HTTPS com falhas</translation> +<translation id="6104112872696127344">A digitalização foi cancelada.</translation> <translation id="6106186594183574873">Para terminar, introduza a palavra-passe antiga</translation> <translation id="6108689792487843350">Não é possível alcançar o gateway.</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Para terminar, introduza a nova palavra-passe.</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Saiba mais</translation> <translation id="6191293864534840972">Os servidores de nomes têm um formato incorreto.</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Falhou</translation> <translation id="636850387210749493">Inscrição empresarial</translation> <translation id="649050271426829538">Parada – Encravamento de papel</translation> <translation id="6517239166834772319">Explore</translation> <translation id="6527081081771465939">Protocolo de segurança de Wi-Fi desconhecido.</translation> +<translation id="6532051501443766164">Ocultar relatório</translation> <translation id="65587193855025101">Plano</translation> <translation id="6564646048574748301">Falha – Impressora inacessível</translation> <translation id="6618744767048954150">Em execução</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Limpar</translation> <translation id="6704062477274546131">Resolução de DNS</translation> <translation id="6747215703636344499">Parada – Saída cheia</translation> +<translation id="6756731097889387912">Não foi possível cancelar a digitalização.</translation> <translation id="6766275201586212568">Resoluções de DNS com falhas</translation> <translation id="6768237774506518020">Taxa de falhas de resolução de DNS elevada</translation> <translation id="6839141349259399400">Não consegue ligar aos scanners?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Latência elevada de HTTPS</translation> <translation id="7658239707568436148">Cancelar</translation> <translation id="7690294790491645610">Confirmar a nova palavra-passe</translation> +<translation id="7732651821766520760">Teste <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Estado</translation> <translation id="7855434858642800953">Ficheiro digitalizado guardado!</translation> <translation id="7928373994957558460">Mostrar localização do ficheiro</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Predefinição</translation> <translation id="8845001906332463065">Obter ajuda</translation> +<translation id="8881098542468797602">Teste com êxito</translation> <translation id="8910721771319628100">Rede predefinida acima do limite de latência.</translation> <translation id="8919837981463578619">Falha – Tabuleiro em falta</translation> <translation id="8928727111548978589">Falha – Sem papel</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> tentativas restantes.</translation> <translation id="8970109610781093811">Executar novamente</translation> <translation id="9088306295921699330">Utilização atual</translation> <translation id="910415269708673980">Atualize a permissão para <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">A digitalizar a página <ph name="PAGE_NUMBER" />…</translation> <translation id="9111102763498581341">Desbloquear</translation> +<translation id="9149391708638971077">Executar teste de memória</translation> +<translation id="982713511914535780">Executar teste de descarga</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb index 2430926..4904dc47 100644 --- a/chromeos/strings/chromeos_strings_ro.xtb +++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Nu s-a putut începe scanarea</translation> <translation id="1071587090247825784">S-a detectat un firewall</translation> <translation id="1075811647922107217">Dimensiunea paginii</translation> +<translation id="1124772482545689468">Utilizator</translation> <translation id="1175697296044146566">Acest <ph name="DEVICE_TYPE" /> este gestionat de <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Eroare necunoscută.</translation> <translation id="1204296502688602597">Latența DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> gestionează acest utilizator și poate să gestioneze de la distanță setările și să monitorizeze activitatea utilizatorului.</translation> <translation id="150962533380566081">PUK nevalid.</translation> <translation id="1510238584712386396">Lansator</translation> +<translation id="1621067168122174824">Rulează testul Încărcare</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> fire)</translation> <translation id="1641857168437328880">Alimentator de documente (o singură față)</translation> <translation id="1644574205037202324">Istoric</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Rezolvitor DNS prezent</translation> <translation id="1743558184855585519">Se consideră că bateria este consumată când atinge limita</translation> +<translation id="1792647875738159689">Se anulează scanarea</translation> <translation id="1905710495812624430">Ai depășit numărul maxim de încercări permise.</translation> <translation id="1930797645656624981">Serviciul metodei de introducere a textului din sistemul de operare Chrome</translation> <translation id="1947737735496445907">Printată</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> încercări rămase</translation> <translation id="2391082728065870591">Trimite un raport de feedback</translation> <translation id="2461822463642141190">Actual</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} încercare rămasă}few{<ph name="ERROR_MESSAGE" /> {0} încercări rămase}other{<ph name="ERROR_MESSAGE" /> {0} de încercări rămase}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Scanează</translation> <translation id="2570743873672969996">Se rulează testul <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Aplicații</translation> <translation id="2872961005593481000">Închide</translation> <translation id="3008341117444806826">ACTUALIZEAZĂ</translation> <translation id="3009958530611748826">Selectează un dosar în care să salvezi</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Testul nu a reușit</translation> <translation id="3083667275341675831">Diagnosticare pentru conectivitate</translation> <translation id="3091839911843451378">Nereușită – Oprită</translation> +<translation id="3102119246920354026">Memoria cache</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Fișierele mele</translation> <translation id="3199982728237701504">Alimentator de documente (față-verso)</translation> <translation id="3246869037381808805">Sarcinile de printare mai vechi de o zi vor fi eliminate</translation> <translation id="3268178239013324452">Nereușită – Ușă deschisă</translation> <translation id="3310640316857623290">Latența DNS depășește semnificativ pragul permisibil</translation> +<translation id="3328783797891415197">Se rulează testul</translation> <translation id="3369013195428705271">Sigur vrei să ștergi tot istoricul printărilor? Sarcinile de printare în curs nu vor fi șterse.</translation> <translation id="3456078764689556234">S-a printat pagina <ph name="PRINTED_PAGES" /> din <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Printare</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Parolă nouă</translation> <translation id="3865414814144988605">Rezoluție</translation> <translation id="3941014780699102620">Nu s-a putut rezolva gazda</translation> +<translation id="3942420633017001071">Diagnosticare</translation> <translation id="39823212440917567">Sarcinile de printare mai vechi de <ph name="NUMBER_OF_DAYS" /> zile vor fi eliminate</translation> <translation id="4003384961948020559">Nereușită – Tavă de ieșire plină</translation> <translation id="4034824040120875894">Imprimantă</translation> <translation id="4131410914670010031">Alb-negru</translation> <translation id="4145784616224233563">Firewall HTTP</translation> +<translation id="4170700058716978431">NEREUȘIT</translation> <translation id="4227825898293920515">Parola expiră în <ph name="TIME" /></translation> <translation id="4238516577297848345">Nicio sarcină de printare în desfășurare</translation> <translation id="4297501883039923494">Oprită – Eroare necunoscută</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Oprit</translation> <translation id="4808449224298348341">S-a anulat sarcina de printare <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Selectează dosarul în aplicația Fișiere...</translation> +<translation id="4848429997038228357">RULEAZĂ</translation> <translation id="4890353053343094602">Alege imediat una nouă</translation> <translation id="4917889632206600977">Oprită – Hârtie epuizată</translation> <translation id="4921665434385737356">S-a încărcat cu <ph name="RATE" /> în <ph name="NUM_SECONDS" /> secunde.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Rulează</translation> +<translation id="500920857929044050">Oprește testul</translation> +<translation id="5154917547274118687">Memorie</translation> <translation id="5168185087976003268">Buna funcționare a bateriei:</translation> <translation id="520299634122159966">Nu sunt disponibile scanere</translation> <translation id="5212543919916444558">Nu găsesc conținut pe ecran în privința căruia te-aș putea ajuta. Atinge microfonul și întreabă orice dorești.</translation> <translation id="5222676887888702881">Deconectează-te</translation> +<translation id="5264277876637023664">Rulează testul CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Rulează din nou rutinele</translation> <translation id="5317780077021120954">Salvează</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Gestionat</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Află mai multe din Centrul de ajutor</translation> +<translation id="5635169860413004179">Consultă raportul</translation> <translation id="5719918614880940190">Indică utilizarea procesorului și este o valoare cumulată pentru toate nucleele</translation> +<translation id="5797428682393400134">TRECUT</translation> <translation id="5832805196449965646">Adăugați un utilizator</translation> <translation id="5895138241574237353">Reîncepe</translation> +<translation id="5931523347251946569">Fișierul nu a fost găsit</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versiunea <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Închide</translation> <translation id="6048107060512778456">Nereușită – Blocaj de hârtie</translation> <translation id="6050189528197190982">Tonuri de gri</translation> <translation id="6058625436358447366">Pentru a finaliza, introdu parola veche și pe cea nouă</translation> <translation id="6061772781719867950">Solicitări HTTPS nereușite</translation> +<translation id="6104112872696127344">Scanarea a fost anulată</translation> <translation id="6106186594183574873">Pentru a finaliza, introdu vechea parolă</translation> <translation id="6108689792487843350">Gateway-ul nu poate fi accesat</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz / <ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Pentru a finaliza, introdu noua parolă</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Află mai multe</translation> <translation id="6191293864534840972">Servere de nume cu formă incorectă</translation> +<translation id="6232017090690406397">Baterie</translation> <translation id="6325525973963619867">Eșuat</translation> <translation id="636850387210749493">Înscriere pentru întreprindere</translation> <translation id="649050271426829538">Oprită – Blocaj de hârtie</translation> <translation id="6517239166834772319">Explorare</translation> <translation id="6527081081771465939">Protocol de securitate Wi-Fi necunoscut</translation> +<translation id="6532051501443766164">Ascunde raportul</translation> <translation id="65587193855025101">Suport plat</translation> <translation id="6564646048574748301">Nereușită – Imprimanta nu poate fi accesată</translation> <translation id="6618744767048954150">Rulează</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Șterge</translation> <translation id="6704062477274546131">Rezolvare DNS</translation> <translation id="6747215703636344499">Oprită – Tavă de ieșire plină</translation> +<translation id="6756731097889387912">Nu s-a putut anula scanarea</translation> <translation id="6766275201586212568">Rezolvări DNS nereușite</translation> <translation id="6768237774506518020">Rată de eroare ridicată a rezolvărilor DNS</translation> <translation id="6839141349259399400">Nu te poți conecta la scanere?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Latență mare a solicitărilor HTTPS</translation> <translation id="7658239707568436148">Anulează</translation> <translation id="7690294790491645610">Confirmă noua parolă</translation> +<translation id="7732651821766520760">Testul <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Stare</translation> <translation id="7855434858642800953">Fișierul scanat a fost salvat!</translation> <translation id="7928373994957558460">Afișează locația fișierului</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Prestabilit</translation> <translation id="8845001906332463065">Obține ajutor</translation> +<translation id="8881098542468797602">Testul a reușit</translation> <translation id="8910721771319628100">Rețeaua prestabilită depășește pragul de latență</translation> <translation id="8919837981463578619">Nereușită – Tavă lipsă</translation> <translation id="8928727111548978589">Nereușită – Hârtie epuizată</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> încercări rămase</translation> <translation id="8970109610781093811">Rulați din nou</translation> <translation id="9088306295921699330">Folosire actuală</translation> <translation id="910415269708673980">Actualizează tichetul pentru <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Se scanează pagina <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Deblochează</translation> +<translation id="9149391708638971077">Rulează testul Memorie</translation> +<translation id="982713511914535780">Rulează testul Descărcare</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb index 0ccaa0d..46c79879 100644 --- a/chromeos/strings/chromeos_strings_ru.xtb +++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Не удалось начать сканирование.</translation> <translation id="1071587090247825784">обнаружен брандмауэр</translation> <translation id="1075811647922107217">Размер страницы</translation> +<translation id="1124772482545689468">Пользователь</translation> <translation id="1175697296044146566">Этим устройством <ph name="DEVICE_TYPE" /> управляет <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Неизвестная ошибка.</translation> <translation id="1204296502688602597">Задержка DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Осталось попыток: <ph name="ATTEMPTS_LEFT" />.</translation> <translation id="2391082728065870591">Отправить отзыв с отчетом</translation> <translation id="2461822463642141190">Расход энергии</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Осталась {0} попытка.}one{<ph name="ERROR_MESSAGE" /> Осталась {0} попытка.}few{<ph name="ERROR_MESSAGE" /> Осталось {0} попытки.}many{<ph name="ERROR_MESSAGE" /> Осталось {0} попыток.}other{<ph name="ERROR_MESSAGE" /> Осталось {0} попытки.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Искать</translation> <translation id="2570743873672969996">Запуск теста "<ph name="TEST_NAME" />"…</translation> +<translation id="2620436844016719705">Система</translation> <translation id="2805756323405976993">Сервисы</translation> <translation id="2872961005593481000">Завершить работу</translation> <translation id="3008341117444806826">ОБНОВИТЬ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> мА</translation> <translation id="3083667275341675831">Диагностика соединений</translation> <translation id="3091839911843451378">Сбой: остановка работы</translation> +<translation id="3102119246920354026">Кеш</translation> +<translation id="3122464029669770682">ЦПУ</translation> <translation id="3188257591659621405">Мои файлы</translation> <translation id="3199982728237701504">Автоподатчик документов (двусторонний)</translation> <translation id="3246869037381808805">Задания печати, хранящиеся дольше 1 дня, будут удалены</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Новый пароль</translation> <translation id="3865414814144988605">Разрешение</translation> <translation id="3941014780699102620">Не удалось преобразовать имя хоста.</translation> +<translation id="3942420633017001071">Диагностика</translation> <translation id="39823212440917567">Задания печати, хранящиеся дольше <ph name="NUMBER_OF_DAYS" /> дн., будут удалены</translation> <translation id="4003384961948020559">Сбой: выходной лоток заполнен</translation> <translation id="4034824040120875894">Принтер</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Батарея зарядилась на <ph name="RATE" /> за <ph name="NUM_SECONDS" /> сек.</translation> <translation id="4932733599132424254">Дата</translation> <translation id="4985509611418653372">Проверить</translation> +<translation id="5154917547274118687">Память</translation> <translation id="5168185087976003268">Уровень заряда</translation> <translation id="520299634122159966">Нет доступных сканеров.</translation> <translation id="5212543919916444558">Я не нашла на экране ничего подходящего. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Подробнее</translation> <translation id="6191293864534840972">Некорректно указаны серверы доменных имен.</translation> +<translation id="6232017090690406397">Аккумулятор</translation> <translation id="6325525973963619867">Ошибка</translation> <translation id="636850387210749493">Регистрация в корпоративном домене</translation> <translation id="649050271426829538">Печать прервана: застряла бумага</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">В сети, используемой по умолчанию, превышено пороговое значение задержки.</translation> <translation id="8919837981463578619">Сбой: нет лотка для бумаги</translation> <translation id="8928727111548978589">Сбой: закончилась бумага</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Осталось попыток: <ph name="ATTEMPTS_LEFT" />.</translation> <translation id="8970109610781093811">Выполнить ещё раз</translation> <translation id="9088306295921699330">Используется</translation> <translation id="910415269708673980">Обновите билет для аккаунта <ph name="PRINCIPAL_NAME" />.</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb index c65d3db..43f519bab 100644 --- a/chromeos/strings/chromeos_strings_si.xtb +++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ස්කෑන් කිරීම ආරම්භ කිරීමට නොහැකි විය</translation> <translation id="1071587090247825784">ෆයර්වෝලය අනාවරණය කර ගන්නා ලදි</translation> <translation id="1075811647922107217">පිටු තරම</translation> +<translation id="1124772482545689468">පරිශීලක</translation> <translation id="1175697296044146566">මෙම <ph name="DEVICE_TYPE" /> කළමනාකරණය කරනු ලබන්නේ <ph name="MANAGER" /> මගිනි.</translation> <translation id="1195447618553298278">නොදන්නා දෝෂය.</translation> <translation id="1204296502688602597">DNS පමාව</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">උත්සාහයන් <ph name="ATTEMPTS_LEFT" />ක් ඉතුරුයි</translation> <translation id="2391082728065870591">ප්රතිපෝෂණ වාර්තාව යවන්න</translation> <translation id="2461822463642141190">වත්මන්</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{උත්සාහයන් <ph name="ERROR_MESSAGE" /> {0}ක් ඉතිරිය}one{උත්සාහයන් <ph name="ERROR_MESSAGE" /> {0}ක් ඉතිරිය}other{උත්සාහයන් <ph name="ERROR_MESSAGE" /> {0}ක් ඉතිරිය}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ස්කෑන් කරන්න</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> පරීක්ෂාව ධාවනය කරමින්...</translation> +<translation id="2620436844016719705">පද්ධතිය</translation> <translation id="2805756323405976993">යෙදුම්</translation> <translation id="2872961005593481000">වසන්න</translation> <translation id="3008341117444806826">නැවුම් කරන්න</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">සබැඳුම් හැකියා දෝෂ නිර්ණ</translation> <translation id="3091839911843451378">අසාර්ථක විය - නතර විය</translation> +<translation id="3102119246920354026">හැඹිලිය</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">මගේ ගොනු</translation> <translation id="3199982728237701504">ලේඛන සංග්රාහකය (ද්විත්ව-පැති)</translation> <translation id="3246869037381808805">දින 1කට වඩා පැරණි මුද්රණ කාර්ය ඉවත් කරනු ඇත</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">නව මුරපදය</translation> <translation id="3865414814144988605">විභේදනය</translation> <translation id="3941014780699102620">සත්කාරක විසඳීම අසාර්ථක විය</translation> +<translation id="3942420633017001071">දෝෂ විනිශ්චය</translation> <translation id="39823212440917567">දින <ph name="NUMBER_OF_DAYS" />කට වඩා පැරණි මුද්රණ කාර්ය ඉවත් කරනු ඇත</translation> <translation id="4003384961948020559">අසාර්ථක විය - ප්රතිදානය පිරී ඇත</translation> <translation id="4034824040120875894">මුද්රකය</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">තත්පර <ph name="NUM_SECONDS" />ක් තුළ <ph name="RATE" /> ආරෝපණය විය.</translation> <translation id="4932733599132424254">දිනය</translation> <translation id="4985509611418653372">ධාවනය කරන්න</translation> +<translation id="5154917547274118687">මතකය</translation> <translation id="5168185087976003268">බැටරි සුවතාව</translation> <translation id="520299634122159966">ලබා ගත හැකි ස්කෑනර නැත</translation> <translation id="5212543919916444558">මට ඔබට උදවු විය හැකි කිසිවක් ඔබේ තිරය මත සොයා ගැනීමට නොහැකිය. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">තව දැන ගන්න</translation> <translation id="6191293864534840972">විකෘති වූ නම් සේවාදායක</translation> +<translation id="6232017090690406397">බැටරිය</translation> <translation id="6325525973963619867">අසාර්ථක විය</translation> <translation id="636850387210749493">ව්යාපාරික බඳවාගැනීම</translation> <translation id="649050271426829538">නැවතිණි - කඩදාසි හිරවීම</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">පමාවේ මායිමට ඉහළ පෙරනිමි ජාලය</translation> <translation id="8919837981463578619">අසාර්ථක විය - තැටිය මගහැරී ඇත</translation> <translation id="8928727111548978589">අසාර්ථක විය - කඩදාසි නැත</translation> +<translation id="89415009803968170">උත්සාහ <ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" />ක් ඉතුරුයි</translation> <translation id="9088306295921699330">වත්මන් භාවිතය</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> සඳහා ප්රවේශපත්රය නැවුම් කරන්න</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" /> පිටුව ස්කෑන් කරමින්</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb index 16d38fe..b420220 100644 --- a/chromeos/strings/chromeos_strings_sk.xtb +++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skenovanie sa nepodarilo spustiť</translation> <translation id="1071587090247825784">Bol zistený firewall</translation> <translation id="1075811647922107217">Veľkosť stránky</translation> +<translation id="1124772482545689468">Používateľ</translation> <translation id="1175697296044146566">Toto zariadenie <ph name="DEVICE_TYPE" /> spravuje <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Neznáma chyba.</translation> <translation id="1204296502688602597">Latencia DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Zostávajúce pokusy: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Odoslať správu so spätnou väzbou</translation> <translation id="2461822463642141190">Aktuálna</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Zostáva {0} pokus.}few{<ph name="ERROR_MESSAGE" /> Zostávajú {0} pokusy.}many{<ph name="ERROR_MESSAGE" /> {0} attempts left}other{<ph name="ERROR_MESSAGE" /> Zostáva {0} pokusov.}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Vyhľadať</translation> <translation id="2570743873672969996">Prebieha test <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Systém</translation> <translation id="2805756323405976993">Aplikácie</translation> <translation id="2872961005593481000">Vypnúť</translation> <translation id="3008341117444806826">OBNOVIŤ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostika pripojenia</translation> <translation id="3091839911843451378">Nepodarilo sa – zastavené</translation> +<translation id="3102119246920354026">Vyrovnávacia pamäť</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Moje súbory</translation> <translation id="3199982728237701504">Podávač dokumentov (obojstranný)</translation> <translation id="3246869037381808805">Tlačové úlohy staršie ako deň budú odstránené</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nové heslo</translation> <translation id="3865414814144988605">Rozlíšenie</translation> <translation id="3941014780699102620">Hostiteľa sa nepodarilo vybrať</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Tlačové úlohy staršie ako <ph name="NUMBER_OF_DAYS" /> d. budú odstránené</translation> <translation id="4003384961948020559">Nepodarilo sa – výstup je plný</translation> <translation id="4034824040120875894">Tlačiareň</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Nabité na <ph name="RATE" /> za <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Dátum</translation> <translation id="4985509611418653372">Spustiť</translation> +<translation id="5154917547274118687">Pamäť</translation> <translation id="5168185087976003268">Stav batérie</translation> <translation id="520299634122159966">K dispozícii nie sú žiadne skenery</translation> <translation id="5212543919916444558">Na obrazovke nie je nič, s čím by som mohol pomôcť. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Ďalšie informácie</translation> <translation id="6191293864534840972">Nesprávny formát serverov DNS</translation> +<translation id="6232017090690406397">Batéria</translation> <translation id="6325525973963619867">Zlyhanie</translation> <translation id="636850387210749493">Registrácia podniku</translation> <translation id="649050271426829538">Zastavené – zaseknutý papier</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Predvolená sieť prekračuje prah latencie</translation> <translation id="8919837981463578619">Nepodarilo sa – chýba zásobník</translation> <translation id="8928727111548978589">Nepodarilo sa – minul sa papier</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Počet zostávajúcich pokusov: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Spustiť znova</translation> <translation id="9088306295921699330">Aktuálne využitie</translation> <translation id="910415269708673980">Obnoviť tiket pre <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb index a093a8f..52e508e 100644 --- a/chromeos/strings/chromeos_strings_sl.xtb +++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Ni bilo mogoče začeti optično brati</translation> <translation id="1071587090247825784">Zaznan je požarni zid</translation> <translation id="1075811647922107217">Velikost strani</translation> +<translation id="1124772482545689468">Uporabnik</translation> <translation id="1175697296044146566">To napravo <ph name="DEVICE_TYPE" /> upravlja <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Neznana napaka.</translation> <translation id="1204296502688602597">Zakasnitev DNS-ja</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Na voljo imate še toliko poskusov: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Pošiljanje poročila s povratnimi informacijami</translation> <translation id="2461822463642141190">Trenutno</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Še {0} poskus}one{<ph name="ERROR_MESSAGE" /> Še {0} poskus}two{<ph name="ERROR_MESSAGE" /> Še {0} poskusa}few{<ph name="ERROR_MESSAGE" /> Še {0} poskusi}other{<ph name="ERROR_MESSAGE" /> Še {0} poskusov}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Išči</translation> <translation id="2570743873672969996">Izvajanje preizkusa <ph name="TEST_NAME" /> …</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2872961005593481000">Zaustavitev</translation> <translation id="3008341117444806826">OSVEŽI</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnosticiranje povezav</translation> <translation id="3091839911843451378">Napaka – ustavljeno</translation> +<translation id="3102119246920354026">Predpomnilnik</translation> +<translation id="3122464029669770682">CPE</translation> <translation id="3188257591659621405">Moje datoteke</translation> <translation id="3199982728237701504">Podajalnik dokumentov (dvostransko)</translation> <translation id="3246869037381808805">Izbrisana bodo tiskalna opravila, starejša od 1 dneva</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Novo geslo</translation> <translation id="3865414814144988605">Ločljivost</translation> <translation id="3941014780699102620">Ni bilo mogoče razrešiti gostitelja</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567">Odstranjena bodo tiskalna opravila, starejša od toliko dni: <ph name="NUMBER_OF_DAYS" /></translation> <translation id="4003384961948020559">Napaka – izhodni pladenj je poln</translation> <translation id="4034824040120875894">Tiskalnik</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Napolnjeno <ph name="RATE" /> v <ph name="NUM_SECONDS" /> s.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Izvedi</translation> +<translation id="5154917547274118687">Pomnilnik</translation> <translation id="5168185087976003268">Stanje baterije</translation> <translation id="520299634122159966">Ni razpoložljivih optičnih bralnikov</translation> <translation id="5212543919916444558">Na zaslonu ni ničesar uporabnega. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Več o tem</translation> <translation id="6191293864534840972">Napačno oblikovani imenski strežniki</translation> +<translation id="6232017090690406397">Baterija</translation> <translation id="6325525973963619867">Ni uspelo</translation> <translation id="636850387210749493">Prijava v podjetje</translation> <translation id="649050271426829538">Ustavljeno – zastoj papirja</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Privzeto omrežje je nad pragom zakasnitve</translation> <translation id="8919837981463578619">Napaka – ni pladnja</translation> <translation id="8928727111548978589">Napaka – zmanjkalo je papirja</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Število preostalih poskusov: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Znova zaženi</translation> <translation id="9088306295921699330">Trenutna poraba</translation> <translation id="910415269708673980">Osvežite kartonček za <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb index b7751b4..54555caf1 100644 --- a/chromeos/strings/chromeos_strings_sq.xtb +++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skanimi nuk mund të nisej</translation> <translation id="1071587090247825784">U zbulua mur mbrojtës</translation> <translation id="1075811647922107217">Madhësia e faqes</translation> +<translation id="1124772482545689468">Përdoruesi</translation> <translation id="1175697296044146566">Kjo pajisje <ph name="DEVICE_TYPE" /> menaxhohet nga <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Gabim i panjohur.</translation> <translation id="1204296502688602597">Vonesa e DNS-së</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> përpjekje të mbetura</translation> <translation id="2391082728065870591">Dërgo raportin e komenteve</translation> <translation id="2461822463642141190">Rryma</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} përpjekje e mbetur}other{<ph name="ERROR_MESSAGE" /> {0} përpjekje të mbetura}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skano</translation> <translation id="2570743873672969996">Po ekzekuton testin <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistemi</translation> <translation id="2805756323405976993">Aplikacionet</translation> <translation id="2872961005593481000">Ndërprit punën</translation> <translation id="3008341117444806826">RIFRESKO</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Diagnostikimi i lidhshmërisë</translation> <translation id="3091839911843451378">Dështoi - Ndaloi</translation> +<translation id="3102119246920354026">Memoria specifike</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Skedarët e mi</translation> <translation id="3199982728237701504">Furnizuesi i dokumentit (dy anë)</translation> <translation id="3246869037381808805">Printimet më të vjetra se 1 ditë do të hiqen</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Fjalëkalimi i ri</translation> <translation id="3865414814144988605">Rezolucioni</translation> <translation id="3941014780699102620">Zgjidhja e pritësit dështoi</translation> +<translation id="3942420633017001071">Diagnostikimi</translation> <translation id="39823212440917567">Printimet më të vjetra se <ph name="NUMBER_OF_DAYS" /> ditë do të hiqen</translation> <translation id="4003384961948020559">Dështoi - Dalja është plot</translation> <translation id="4034824040120875894">Printeri</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">U karikua <ph name="RATE" /> në <ph name="NUM_SECONDS" /> sekonda.</translation> <translation id="4932733599132424254">Data</translation> <translation id="4985509611418653372">Ekzekuto</translation> +<translation id="5154917547274118687">Memoria</translation> <translation id="5168185087976003268">Integriteti i baterisë</translation> <translation id="520299634122159966">Nuk ka skanerë</translation> <translation id="5212543919916444558">Nuk mund të gjej diçka në ekranin tënd me të cilën mund të të ndihmoj. Provo të trokasësh te mikrofoni për të më kërkuar diçka.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Mëso më shumë</translation> <translation id="6191293864534840972">Serverë DNS të keqformuar</translation> +<translation id="6232017090690406397">Bateria</translation> <translation id="6325525973963619867">Dështoi</translation> <translation id="636850387210749493">Regjistrimi i ndërmarrjes</translation> <translation id="649050271426829538">Ndaloi - Bllokim letre</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">Rrjeti i parazgjedhur është mbi pragun e vonesës</translation> <translation id="8919837981463578619">Dështoi - Tabakaja mungon</translation> <translation id="8928727111548978589">Dështoi - Nuk ka letër</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> përpjekje të mbetura</translation> <translation id="9088306295921699330">Përdorimi aktual</translation> <translation id="910415269708673980">Rifresko biletën për <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Po skanon faqen <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb index ab8afa1..e3f24bc 100644 --- a/chromeos/strings/chromeos_strings_sr-Latn.xtb +++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Pokretanje skeniranja nije uspelo</translation> <translation id="1071587090247825784">Otkriven je zaštitni zid</translation> <translation id="1075811647922107217">Veličina stranice</translation> +<translation id="1124772482545689468">Korisnik</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> upravlja ovim <ph name="DEVICE_TYPE" /> uređajem.</translation> <translation id="1195447618553298278">Nepoznata greška.</translation> <translation id="1204296502688602597">Kašnjenje DNS-a</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> upravlja ovim korisnikom i može daljinski da upravlja podešavanjima i nadgleda aktivnosti korisnika.</translation> <translation id="150962533380566081">Nevažeći PUK.</translation> <translation id="1510238584712386396">Pokretač</translation> +<translation id="1621067168122174824">Pokreni test punjenja</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> niti)</translation> <translation id="1641857168437328880">Uvlačenje dokumenta (jednostrano)</translation> <translation id="1644574205037202324">Istorija</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Prisutan je DNS razrešivač</translation> <translation id="1743558184855585519">Baterija se smatra potrošenom kada dostigne ograničenje</translation> +<translation id="1792647875738159689">Otkazuje se skeniranje</translation> <translation id="1905710495812624430">Premašen je maksimalni broj pokušaja.</translation> <translation id="1930797645656624981">Usluga metoda unosa za Chrome OS</translation> <translation id="1947737735496445907">Odštampano</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Preostali pokušaji: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Pošalji izveštaj sa povratnim informacijama</translation> <translation id="2461822463642141190">Aktuelno</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaj}one{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaj}few{<ph name="ERROR_MESSAGE" /> Preostaju {0} pokušaja}other{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaja}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skeniraj</translation> <translation id="2570743873672969996">Pokreće se test <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2872961005593481000">Isključi</translation> <translation id="3008341117444806826">OSVEŽI</translation> <translation id="3009958530611748826">Izaberite folder za čuvanje</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Test nije uspeo</translation> <translation id="3083667275341675831">Dijagnostika povezivosti</translation> <translation id="3091839911843451378">Nije uspelo – zaustavljeno je</translation> +<translation id="3102119246920354026">Keš</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Moje datoteke</translation> <translation id="3199982728237701504">Uvlačenje dokumenta (dvostrano)</translation> <translation id="3246869037381808805">Zadaci štampanja stariji od 1 dana se uklanjaju</translation> <translation id="3268178239013324452">Nije uspelo – vrata su otvorena</translation> <translation id="3310640316857623290">Kašnjenje DNS-a znatno premašuje dozvoljenu graničnu vrednost</translation> +<translation id="3328783797891415197">Test je u toku</translation> <translation id="3369013195428705271">Želite li stvarno da obrišete svu istoriju štampanja? Zadaci štampanja koji su u toku se ne brišu.</translation> <translation id="3456078764689556234">Odštampanih stranica: <ph name="PRINTED_PAGES" /> od <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Štampanje</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nova lozinka</translation> <translation id="3865414814144988605">Rezolucija</translation> <translation id="3941014780699102620">Razrešenje hosta nije uspelo</translation> +<translation id="3942420633017001071">Dijagnostika</translation> <translation id="39823212440917567">Zadaci štampanja stariji od <ph name="NUMBER_OF_DAYS" /> dana se uklanjaju</translation> <translation id="4003384961948020559">Nije uspelo – izlaz je pun</translation> <translation id="4034824040120875894">Štampač</translation> <translation id="4131410914670010031">Crno-belo</translation> <translation id="4145784616224233563">HTTP zaštitni zid</translation> +<translation id="4170700058716978431">NIJE USPELO</translation> <translation id="4227825898293920515">Lozinka ističe za <ph name="TIME" /></translation> <translation id="4238516577297848345">Nijedan zadatak štampanja nije u toku</translation> <translation id="4297501883039923494">Zaustavljeno – nepoznata greška</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Zaustavljeno je</translation> <translation id="4808449224298348341">Otkazan je zadatak štampanja <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Izaberite folder u aplikaciji Fajlovi...</translation> +<translation id="4848429997038228357">U TOKU</translation> <translation id="4890353053343094602">Odmah odaberite novu</translation> <translation id="4917889632206600977">Zaustavljeno – nema više papira</translation> <translation id="4921665434385737356">Napunjeno <ph name="RATE" /> za <ph name="NUM_SECONDS" /> sek.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Pokreni</translation> +<translation id="500920857929044050">Zaustavi test</translation> +<translation id="5154917547274118687">Memorija</translation> <translation id="5168185087976003268">Stanje baterije</translation> <translation id="520299634122159966">Nema dostupnih skenera</translation> <translation id="5212543919916444558">Ne mogu da pronađem na ekranu ništa oko čega mogu da pomognem. Probajte da dodirnete mikrofon da biste me pitali nešto.</translation> <translation id="5222676887888702881">Odjavi me</translation> +<translation id="5264277876637023664">Pokreni test procesora</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Ponovo pokreni rutine</translation> <translation id="5317780077021120954">Sačuvaj</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Upravljani</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Saznajte više u centru za pomoć</translation> +<translation id="5635169860413004179">Prikaži izveštaj</translation> <translation id="5719918614880940190">Ovim se meri korišćenje procesora i zbir je svih jezgara</translation> +<translation id="5797428682393400134">USPELO JE</translation> <translation id="5832805196449965646">Dodaj osobu</translation> <translation id="5895138241574237353">Pokreni ponovo</translation> +<translation id="5931523347251946569">Fajl nije pronađen</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6048107060512778456">Nije uspelo – papir je zaglavljen</translation> <translation id="6050189528197190982">Sivi tonovi</translation> <translation id="6058625436358447366">Da biste završili, unesite staru i novu lozinku</translation> <translation id="6061772781719867950">Neuspešni HTTPS zahtevi</translation> +<translation id="6104112872696127344">Skeniranje je otkazano</translation> <translation id="6106186594183574873">Da biste završili, unesite staru lozinku</translation> <translation id="6108689792487843350">Mrežni prolaz je nedostupan</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Da biste završili, unesite novu lozinku</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Saznajte više</translation> <translation id="6191293864534840972">Serveri za imena su pogrešnog formata</translation> +<translation id="6232017090690406397">Baterija</translation> <translation id="6325525973963619867">Neuspešno</translation> <translation id="636850387210749493">Prijavljivanje za izdanje za preduzeća</translation> <translation id="649050271426829538">Zaustavljeno – papir je zaglavljen</translation> <translation id="6517239166834772319">Istražite</translation> <translation id="6527081081771465939">Nepoznat bezbednosni protokol za WiFi</translation> +<translation id="6532051501443766164">Sakrij izveštaj</translation> <translation id="65587193855025101">Položeno</translation> <translation id="6564646048574748301">Nije uspelo – štampač nije dostupan</translation> <translation id="6618744767048954150">U toku je</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="6704062477274546131">DNS razrešavanje</translation> <translation id="6747215703636344499">Zaustavljeno – posuda za odštampani materijal je puna</translation> +<translation id="6756731097889387912">Otkazivanje skeniranja nije uspelo</translation> <translation id="6766275201586212568">Neuspešna DNS razrešavanja</translation> <translation id="6768237774506518020">Velika stopa neuspeha DNS razrešavanja</translation> <translation id="6839141349259399400">Povezivanje sa skenerima nije uspelo?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Veliko HTTPS kašnjenje</translation> <translation id="7658239707568436148">Otkaži</translation> <translation id="7690294790491645610">Potvrdite novu lozinku</translation> +<translation id="7732651821766520760">Test <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Status</translation> <translation id="7855434858642800953">Skenirani fajl je sačuvan!</translation> <translation id="7928373994957558460">Prikaži lokaciju datoteke</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Podrazumevano</translation> <translation id="8845001906332463065">Zatražite pomoć</translation> +<translation id="8881098542468797602">Test je uspeo</translation> <translation id="8910721771319628100">Podrazumevana mreža premašuje graničnu vrednost za kašnjenje</translation> <translation id="8919837981463578619">Nije uspelo – nedostaje fioka</translation> <translation id="8928727111548978589">Nije uspelo – nema više papira</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Preostali pokušaji: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Ponovo pokreni</translation> <translation id="9088306295921699330">Trenutna iskorišćenost</translation> <translation id="910415269708673980">Osvežite tiket za <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Skenira se <ph name="PAGE_NUMBER" />. stranica</translation> <translation id="9111102763498581341">Otključaj</translation> +<translation id="9149391708638971077">Pokreni test memorije</translation> +<translation id="982713511914535780">Pokreni test pražnjenja</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb index 9d21782..e250add 100644 --- a/chromeos/strings/chromeos_strings_sr.xtb +++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Покретање скенирања није успело</translation> <translation id="1071587090247825784">Откривен је заштитни зид</translation> <translation id="1075811647922107217">Величина странице</translation> +<translation id="1124772482545689468">Корисник</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> управља овим <ph name="DEVICE_TYPE" /> уређајем.</translation> <translation id="1195447618553298278">Непозната грешка.</translation> <translation id="1204296502688602597">Кашњење DNS-а</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> управља овим корисником и може даљински да управља подешавањима и надгледа активности корисника.</translation> <translation id="150962533380566081">Неважећи PUK.</translation> <translation id="1510238584712386396">Покретач</translation> +<translation id="1621067168122174824">Покрени тест пуњења</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> нити)</translation> <translation id="1641857168437328880">Увлачење документа (једнострано)</translation> <translation id="1644574205037202324">Историја</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Letter</translation> <translation id="1706391837335750954">Присутан је DNS разрешивач</translation> <translation id="1743558184855585519">Батерија се сматра потрошеном када достигне ограничење</translation> +<translation id="1792647875738159689">Отказује се скенирање</translation> <translation id="1905710495812624430">Премашен је максимални број покушаја.</translation> <translation id="1930797645656624981">Услуга метода уноса за Chrome ОС</translation> <translation id="1947737735496445907">Одштампано</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Преостали покушаји: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Пошаљи извештај са повратним информацијама</translation> <translation id="2461822463642141190">Актуелно</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушај}one{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушај}few{<ph name="ERROR_MESSAGE" /> Преостају {0} покушаја}other{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушаја}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Скенирај</translation> <translation id="2570743873672969996">Покреће се тест <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Систем</translation> <translation id="2805756323405976993">Апликације</translation> <translation id="2872961005593481000">Искључи</translation> <translation id="3008341117444806826">ОСВЕЖИ</translation> <translation id="3009958530611748826">Изаберите фолдер за чување</translation> <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> +<translation id="3069085583900247081">Тест није успео</translation> <translation id="3083667275341675831">Дијагностика повезивости</translation> <translation id="3091839911843451378">Није успело – заустављено је</translation> +<translation id="3102119246920354026">Кеш</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Моје датотеке</translation> <translation id="3199982728237701504">Увлачење документа (двострано)</translation> <translation id="3246869037381808805">Задаци штампања старији од 1 дана се уклањају</translation> <translation id="3268178239013324452">Није успело – врата су отворена</translation> <translation id="3310640316857623290">Кашњење DNS-а знатно премашује дозвољену граничну вредност</translation> +<translation id="3328783797891415197">Тест је у току</translation> <translation id="3369013195428705271">Желите ли стварно да обришете сву историју штампања? Задаци штампања који су у току се не бришу.</translation> <translation id="3456078764689556234">Одштампаних страница: <ph name="PRINTED_PAGES" /> од <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Штампање</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Нова лозинка</translation> <translation id="3865414814144988605">Резолуција</translation> <translation id="3941014780699102620">Разрешење хоста није успело</translation> +<translation id="3942420633017001071">Дијагностика</translation> <translation id="39823212440917567">Задаци штампања старији од <ph name="NUMBER_OF_DAYS" /> дана се уклањају</translation> <translation id="4003384961948020559">Није успело – излаз је пун</translation> <translation id="4034824040120875894">Штампач</translation> <translation id="4131410914670010031">Црно-бело</translation> <translation id="4145784616224233563">HTTP заштитни зид</translation> +<translation id="4170700058716978431">НИЈЕ УСПЕЛО</translation> <translation id="4227825898293920515">Лозинка истиче за <ph name="TIME" /></translation> <translation id="4238516577297848345">Ниједан задатак штампања није у току</translation> <translation id="4297501883039923494">Заустављено – непозната грешка</translation> @@ -100,16 +109,20 @@ <translation id="4773299976671772492">Заустављено је</translation> <translation id="4808449224298348341">Отказан је задатак штампања <ph name="DOCUMENT_TITLE" /></translation> <translation id="4832079907277790330">Изаберите фолдер у апликацији Фајлови...</translation> +<translation id="4848429997038228357">У ТОКУ</translation> <translation id="4890353053343094602">Одмах одаберите нову</translation> <translation id="4917889632206600977">Заустављено – нема више папира</translation> <translation id="4921665434385737356">Напуњено <ph name="RATE" /> за <ph name="NUM_SECONDS" /> сек.</translation> <translation id="4932733599132424254">Датум</translation> <translation id="4985509611418653372">Покрени</translation> +<translation id="500920857929044050">Заустави тест</translation> +<translation id="5154917547274118687">Меморија</translation> <translation id="5168185087976003268">Стање батерије</translation> <translation id="520299634122159966">Нема доступних скенера</translation> <translation id="5212543919916444558">Не могу да пронађем на екрану ништа око чега могу да помогнем. Пробајте да додирнете микрофон да бисте ме питали нешто.</translation> <translation id="5222676887888702881">Одјави ме</translation> +<translation id="5264277876637023664">Покрени тест процесора</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Поново покрени рутине</translation> <translation id="5317780077021120954">Сачувај</translation> @@ -122,26 +135,33 @@ <translation id="54609108002486618">Управљани</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Сазнајте више у центру за помоћ</translation> +<translation id="5635169860413004179">Прикажи извештај</translation> <translation id="5719918614880940190">Овим се мери коришћење процесора и збир је свих језгара</translation> +<translation id="5797428682393400134">УСПЕЛО ЈЕ</translation> <translation id="5832805196449965646">Додај особу</translation> <translation id="5895138241574237353">Покрени поново</translation> +<translation id="5931523347251946569">Фајл није пронађен</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, верзија <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Затвори</translation> <translation id="6048107060512778456">Није успело – папир је заглављен</translation> <translation id="6050189528197190982">Сиви тонови</translation> <translation id="6058625436358447366">Да бисте завршили, унесите стару и нову лозинку</translation> <translation id="6061772781719867950">Неуспешни HTTPS захтеви</translation> +<translation id="6104112872696127344">Скенирање је отказано</translation> <translation id="6106186594183574873">Да бисте завршили, унесите стару лозинку</translation> <translation id="6108689792487843350">Мрежни пролаз је недоступан</translation> +<translation id="6114428539405324828"><ph name="CURRENT" /> GHz/<ph name="MAX" /> GHz</translation> <translation id="6146993107019042706">Да бисте завршили, унесите нову лозинку</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Сазнајте више</translation> <translation id="6191293864534840972">Сервери за имена су погрешног формата</translation> +<translation id="6232017090690406397">Батерија</translation> <translation id="6325525973963619867">Неуспешно</translation> <translation id="636850387210749493">Пријављивање за издање за предузећа</translation> <translation id="649050271426829538">Заустављено – папир је заглављен</translation> <translation id="6517239166834772319">Истражите</translation> <translation id="6527081081771465939">Непознат безбедносни протокол за WiFi</translation> +<translation id="6532051501443766164">Сакриј извештај</translation> <translation id="65587193855025101">Положено</translation> <translation id="6564646048574748301">Није успело – штампач није доступан</translation> <translation id="6618744767048954150">У току је</translation> @@ -149,6 +169,7 @@ <translation id="6643016212128521049">Обриши</translation> <translation id="6704062477274546131">DNS разрешавање</translation> <translation id="6747215703636344499">Заустављено – посуда за одштампани материјал је пуна</translation> +<translation id="6756731097889387912">Отказивање скенирања није успело</translation> <translation id="6766275201586212568">Неуспешна DNS разрешавања</translation> <translation id="6768237774506518020">Велика стопа неуспеха DNS разрешавања</translation> <translation id="6839141349259399400">Повезивање са скенерима није успело?</translation> @@ -164,6 +185,7 @@ <translation id="7648838807254605802">Велико HTTPS кашњење</translation> <translation id="7658239707568436148">Откажи</translation> <translation id="7690294790491645610">Потврдите нову лозинку</translation> +<translation id="7732651821766520760">Тест <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Статус</translation> <translation id="7855434858642800953">Скенирани фајл је сачуван!</translation> <translation id="7928373994957558460">Прикажи локацију датотеке</translation> @@ -191,12 +213,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Подразумевано</translation> <translation id="8845001906332463065">Затражите помоћ</translation> +<translation id="8881098542468797602">Тест је успео</translation> <translation id="8910721771319628100">Подразумевана мрежа премашује граничну вредност за кашњење</translation> <translation id="8919837981463578619">Није успело – недостаје фиока</translation> <translation id="8928727111548978589">Није успело – нема више папира</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Преостали покушаји: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Поново покрени</translation> <translation id="9088306295921699330">Тренутна искоришћеност</translation> <translation id="910415269708673980">Освежите тикет за <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Скенира се <ph name="PAGE_NUMBER" />. страница</translation> <translation id="9111102763498581341">Откључај</translation> +<translation id="9149391708638971077">Покрени тест меморије</translation> +<translation id="982713511914535780">Покрени тест пражњења</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb index fba9c8f..162d19f4 100644 --- a/chromeos/strings/chromeos_strings_sv.xtb +++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Det gick inte att börja söka</translation> <translation id="1071587090247825784">Brandvägg hittades</translation> <translation id="1075811647922107217">Sidstorlek</translation> +<translation id="1124772482545689468">Användare</translation> <translation id="1175697296044146566">Denna <ph name="DEVICE_TYPE" /> hanteras av <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Okänt fel.</translation> <translation id="1204296502688602597">DNS-latens</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> försök kvar</translation> <translation id="2391082728065870591">Skicka feedbackrapport</translation> <translation id="2461822463642141190">Nuvarande</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} försök kvar}other{<ph name="ERROR_MESSAGE" /> {0} försök kvar}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Sök</translation> <translation id="2570743873672969996">Kör test av <ph name="TEST_NAME" /> …</translation> +<translation id="2620436844016719705">System</translation> <translation id="2805756323405976993">Appar</translation> <translation id="2872961005593481000">Stäng av</translation> <translation id="3008341117444806826">UPPDATERA</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Anslutningsdiagnostik</translation> <translation id="3091839911843451378">Misslyckades – skrivaren har stannat</translation> +<translation id="3102119246920354026">Cacheminne</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Mina filer</translation> <translation id="3199982728237701504">Dokumentmatare (tvåsidig)</translation> <translation id="3246869037381808805">Utskriftsjobb som är äldre än 1 dagar tas bort</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Nytt lösenord</translation> <translation id="3865414814144988605">Upplösning</translation> <translation id="3941014780699102620">DNS-matchningen misslyckades för värden</translation> +<translation id="3942420633017001071">Diagnostik</translation> <translation id="39823212440917567">Utskriftsjobb som är äldre än <ph name="NUMBER_OF_DAYS" /> dagar tas bort</translation> <translation id="4003384961948020559">Misslyckades – utmatningsfacket är fullt</translation> <translation id="4034824040120875894">Skrivare</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Har laddat <ph name="RATE" /> på <ph name="NUM_SECONDS" /> sekunder.</translation> <translation id="4932733599132424254">Datum</translation> <translation id="4985509611418653372">Kör</translation> +<translation id="5154917547274118687">Minne</translation> <translation id="5168185087976003268">Batterinivå</translation> <translation id="520299634122159966">Det finns inga tillgängliga skannrar</translation> <translation id="5212543919916444558">Det finns inget på skärmen som jag kan hjälpa till med. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Läs mer</translation> <translation id="6191293864534840972">Namnserveradresserna har fel format</translation> +<translation id="6232017090690406397">Batteri</translation> <translation id="6325525973963619867">Misslyckades</translation> <translation id="636850387210749493">Företagsregistrering</translation> <translation id="649050271426829538">Har stoppats – papperstrassel</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Tröskelvärdet för latens överskreds för standardnätverket</translation> <translation id="8919837981463578619">Misslyckades – fack saknas</translation> <translation id="8928727111548978589">Misslyckades – slut på papper</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> försök kvar</translation> <translation id="8970109610781093811">Kör igen</translation> <translation id="9088306295921699330">Nuvarande användning</translation> <translation id="910415269708673980">Uppdatera biljetten för <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb index ad77576..10738ffc 100644 --- a/chromeos/strings/chromeos_strings_sw.xtb +++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Imeshindwa kuanza kuchanganua</translation> <translation id="1071587090247825784">Kinga mtandao imetambuliwa</translation> <translation id="1075811647922107217">Ukubwa wa ukurasa</translation> +<translation id="1124772482545689468">Mtumiaji</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> hii inasimamiwa na <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Hitilafu isiyojulikana.</translation> <translation id="1204296502688602597">Muda wa Kusubiri wa DNS</translation> @@ -21,6 +22,7 @@ <translation id="1499900233129743732"><ph name="MANAGER" /> inamdhibiti mtumiaji huyu na huenda ikadhibiti mipangilio na kufuatilia shughuli za mtumiaji kwa mbali.</translation> <translation id="150962533380566081">PUK si sahihi.</translation> <translation id="1510238584712386396">Kizindua</translation> +<translation id="1621067168122174824">Tekeleza jaribio la Kuchaji</translation> <translation id="1633910004424187862"><ph name="CPU_NAME" /> (michakato <ph name="THREAD_COUNT" />)</translation> <translation id="1641857168437328880">Mashine ya kuingiza hati (Upande mmoja)</translation> <translation id="1644574205037202324">Historia</translation> @@ -28,6 +30,7 @@ <translation id="1703835215927279855">Barua</translation> <translation id="1706391837335750954">Kisuluhishaji cha DNS Kinapatikana</translation> <translation id="1743558184855585519">Betri huchukuliwa kwamba imetumika ikishafikia kikomo</translation> +<translation id="1792647875738159689">Inaghairi uchanganuzi</translation> <translation id="1905710495812624430">Idadi ya juu ya majaribio yanayoruhusiwa.</translation> <translation id="1930797645656624981">Huduma ya Mbinu ya Kuingiza Data kwenye Mfumo wa Uendeshaji wa Chrome</translation> <translation id="1947737735496445907">Imechapishwa</translation> @@ -42,22 +45,26 @@ <translation id="2375079107209812402">Umebakisha mara <ph name="ATTEMPTS_LEFT" /> za kujaribu</translation> <translation id="2391082728065870591">Tuma Ripoti ya Maoni</translation> <translation id="2461822463642141190">Ya sasa</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> umebakisha mara {0} ya kujaribu}other{<ph name="ERROR_MESSAGE" /> umebakisha mara {0} za kujaribu}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Tafuta</translation> <translation id="2570743873672969996">Inatekeleza jaribio la <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Mfumo</translation> <translation id="2805756323405976993">Programu</translation> <translation id="2872961005593481000">Zima</translation> <translation id="3008341117444806826">ONYESHA UPYA</translation> <translation id="3009958530611748826">Chagua folda utakapohifadhi</translation> <translation id="3054177598518735801">mA <ph name="CURRENT_VALUE" /></translation> +<translation id="3069085583900247081">Jaribio halijafaulu</translation> <translation id="3083667275341675831">Uchunguzi wa Muunganisho</translation> <translation id="3091839911843451378">Haijakamilika - Imesimamisha</translation> +<translation id="3102119246920354026">Akiba</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Faili zangu</translation> <translation id="3199982728237701504">Mashine ya kuingiza Hati (Pande mbili)</translation> <translation id="3246869037381808805">Kazi za kuchapisha zilizohifadhiwa kwa zaidi ya siku moja zitaondolewa</translation> <translation id="3268178239013324452">Haijakamilika - Kifuniko kimefunguka</translation> <translation id="3310640316857623290">Muda wa kusubiri wa DNS umezidi zaidi kiwango cha juu kinachoruhusiwa</translation> +<translation id="3328783797891415197">Jaribio linatekelezwa</translation> <translation id="3369013195428705271">Una uhakika kuwa ungependa kufuta historia yote ya kuchapisha? Kazi unazoendelea kuchapisha hazitafutwa.</translation> <translation id="3456078764689556234">Imechapisha ukurasa wa <ph name="PRINTED_PAGES" /> kati ya <ph name="TOTAL_PAGES" />.</translation> <translation id="3459509316159669723">Kuchapisha</translation> @@ -71,11 +78,13 @@ <translation id="3838338534323494292">Nenosiri jipya</translation> <translation id="3865414814144988605">Ubora</translation> <translation id="3941014780699102620">Imeshindwa kusuluhisha seva pangishi</translation> +<translation id="3942420633017001071">Vichunguzi</translation> <translation id="39823212440917567">Kazi za kuchapisha zilizohifadhiwa kwa zaidi ya siku <ph name="NUMBER_OF_DAYS" /> zitaondolewa</translation> <translation id="4003384961948020559">Haijakamilika - Sehemu ya kutoa karatasi imejaa</translation> <translation id="4034824040120875894">Printa</translation> <translation id="4131410914670010031">Nyeusi na nyeupe</translation> <translation id="4145784616224233563">Kinga mtandao ya HTTP</translation> +<translation id="4170700058716978431">HALIJAFAULU</translation> <translation id="4227825898293920515">Muda wa kutumia nenosiri utaisha baada ya <ph name="TIME" /></translation> <translation id="4238516577297848345">Hakuna kazi za kuchapisha zinazoendelea</translation> <translation id="4297501883039923494">Imesimama - Hitilafu isiyojulikana</translation> @@ -100,15 +109,19 @@ <translation id="4773299976671772492">Imesimamishwa</translation> <translation id="4808449224298348341">Kazi ya kuchapisha ya <ph name="DOCUMENT_TITLE" /> ilighairiwa</translation> <translation id="4832079907277790330">Chagua folda katika programu ya Faili...</translation> +<translation id="4848429997038228357">LINATEKELEZWA</translation> <translation id="4890353053343094602">Chagua nenosiri jipya mara moja</translation> <translation id="4917889632206600977">Imesimama - Karatasi zimeisha</translation> <translation id="4921665434385737356">Imechaji <ph name="RATE" /> baada ya sekunde <ph name="NUM_SECONDS" />.</translation> <translation id="4932733599132424254">Tarehe</translation> <translation id="4985509611418653372">Tekeleza</translation> +<translation id="500920857929044050">Komesha jaribio</translation> +<translation id="5154917547274118687">Kumbukumbu</translation> <translation id="5168185087976003268">Muda wa kudumu wa betri</translation> <translation id="520299634122159966">Hakuna vichanganuzi vinavyopatikana</translation> <translation id="5212543919916444558">Sijapata swali lolote kwenye skrini yako. Jaribu kugonga maikrofoni ili uniulize chochote.</translation> <translation id="5222676887888702881">Ondoka</translation> +<translation id="5264277876637023664">Tekeleza jaribio la CPU</translation> <translation id="5267975978099728568"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="ERROR_STATUS" /></translation> <translation id="5275828089655680674">Rudia Uchunguzi</translation> <translation id="5317780077021120954">Hifadhi</translation> @@ -121,26 +134,33 @@ <translation id="54609108002486618">Imedhibitiwa</translation> <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation> <translation id="5551702563755460533">Pata maelezo zaidi katika Kituo cha Usaidizi</translation> +<translation id="5635169860413004179">Angalia Ripoti</translation> <translation id="5719918614880940190">Kipengele hiki hupima matumizi ya kiini cha kompyuta (CPU) na ni ujumlisho wa viini vyote</translation> +<translation id="5797428682393400134">LIMEFAULU</translation> <translation id="5832805196449965646">Ongeza Mtumiaji Mwingine</translation> <translation id="5895138241574237353">Zzima na uwashe</translation> +<translation id="5931523347251946569">Faili haijapatikana</translation> <translation id="5982592372228113572">(<ph name="BOARD_NAME" />, toleo la <ph name="MILESTONE_VERSION" />)</translation> <translation id="6040143037577758943">Funga</translation> <translation id="6048107060512778456">Haijakamilika - Karatasi imekwama</translation> <translation id="6050189528197190982">Mtindo wa rangi nyeupe na nyeusi</translation> <translation id="6058625436358447366">Ili ukamilishe, weka nenosiri lako la awali na lile jipya</translation> <translation id="6061772781719867950">Maombi ya HTTP hayakutumwa</translation> +<translation id="6104112872696127344">Uchanganuzi umeghairiwa</translation> <translation id="6106186594183574873">Ili ukamilishe, weka nenosiri lako la awali</translation> <translation id="6108689792487843350">Imeshindwa kufikia lango</translation> +<translation id="6114428539405324828">GHz <ph name="CURRENT" /> / GHz <ph name="MAX" /></translation> <translation id="6146993107019042706">Ili ukamilishe, weka nenosiri jipya</translation> <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Pata maelezo zaidi</translation> <translation id="6191293864534840972">Seva za majina zilizo na hitilafu</translation> +<translation id="6232017090690406397">Betri</translation> <translation id="6325525973963619867">Imeshindwa</translation> <translation id="636850387210749493">Usajili wa biashara</translation> <translation id="649050271426829538">Imesimama - Karatasi imekwama</translation> <translation id="6517239166834772319">Gundua</translation> <translation id="6527081081771465939">Itifaki isiyojulikana ya ulinzi wa WiFi</translation> +<translation id="6532051501443766164">Ficha Ripoti</translation> <translation id="65587193855025101">Kichanganuzi bapa</translation> <translation id="6564646048574748301">Haijakamilika - Printa haiwezi kufikiwa</translation> <translation id="6618744767048954150">Inakagua</translation> @@ -148,6 +168,7 @@ <translation id="6643016212128521049">Futa</translation> <translation id="6704062477274546131">Usuluhishaji wa DNS</translation> <translation id="6747215703636344499">Imesimama - Sehemu ya kutoa karatasi imejaa</translation> +<translation id="6756731097889387912">Imeshindwa kughairi uchanganuzi</translation> <translation id="6766275201586212568">Usuluhishaji wa DNS haukufaulu</translation> <translation id="6768237774506518020">Kiwango cha juu cha usuluhishaji wa DNS usiofaulu</translation> <translation id="6839141349259399400">Je, umeshindwa kuunganisha kwenye vichanganuzi?</translation> @@ -163,6 +184,7 @@ <translation id="7648838807254605802">Muda mwingi wa kusubiri maombi ya HTTPS</translation> <translation id="7658239707568436148">Ghairi</translation> <translation id="7690294790491645610">Thibitisha nenosiri jipya</translation> +<translation id="7732651821766520760">Jaribio la <ph name="TEST_NAME" /></translation> <translation id="7805768142964895445">Hali</translation> <translation id="7855434858642800953">Faili iliyochanganuliwa imehifadhiwa!</translation> <translation id="7928373994957558460">Onyesha faili ilipo</translation> @@ -190,12 +212,16 @@ <translation id="877985182522063539">A4</translation> <translation id="8798099450830957504">Chaguomsingi</translation> <translation id="8845001906332463065">Pata usaidizi</translation> +<translation id="8881098542468797602">Jaribio limefaulu</translation> <translation id="8910721771319628100">Muda wa kusubiri wa mtandao chaguomsingi umezidi kiwango cha juu</translation> <translation id="8919837981463578619">Haijakamilika - Trei haipo</translation> <translation id="8928727111548978589">Haijakamilika - Karatasi zimeisha</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> umebakisha mara <ph name="ATTEMPTS_LEFT" /> za kujaribu</translation> <translation id="8970109610781093811">Endesha tena</translation> <translation id="9088306295921699330">Matumizi ya sasa</translation> <translation id="910415269708673980">Onyesha upya tiketi ya <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Inachanganua ukurasa wa <ph name="PAGE_NUMBER" /></translation> <translation id="9111102763498581341">Fungua</translation> +<translation id="9149391708638971077">Tekeleza jaribio la Hifadhi</translation> +<translation id="982713511914535780">Tekeleza jaribio la Kutumia chaji</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index 12083563..c9f5055 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">ஸ்கேன் செய்ய முடியவில்லை</translation> <translation id="1071587090247825784">ஃபயர்வால் கண்டறியப்பட்டது</translation> <translation id="1075811647922107217">பக்க அளவு</translation> +<translation id="1124772482545689468">பயனர்</translation> <translation id="1175697296044146566">இந்த <ph name="DEVICE_TYPE" /> சாதனத்தை <ph name="MANAGER" /> நிர்வகிக்கிறது.</translation> <translation id="1195447618553298278">தெரியாத பிழை.</translation> <translation id="1204296502688602597">DNS தாமதம்</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> முயற்சிகள் மீதமுள்ளன</translation> <translation id="2391082728065870591">கருத்து அறிக்கையை அனுப்பு</translation> <translation id="2461822463642141190">தற்போதைய மின் உபயோகம்</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} முயற்சி மீதமுள்ளது}other{<ph name="ERROR_MESSAGE" /> {0} முயற்சிகள் மீதமுள்ளன}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">ஸ்கேன் செய்</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> சோதனை இயங்குகிறது...</translation> +<translation id="2620436844016719705">அமைப்பு</translation> <translation id="2805756323405976993">ஆப்ஸ்</translation> <translation id="2872961005593481000">நிறுத்து</translation> <translation id="3008341117444806826">புதுப்பி</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">இணைப்புநிலையைக் கண்டறிதல்</translation> <translation id="3091839911843451378">பிரிண்டர் நிறுத்தப்பட்டதால் அச்சிட முடியவில்லை</translation> +<translation id="3102119246920354026">தற்காலிகச் சேமிப்பு</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">எனது கோப்புகள்</translation> <translation id="3199982728237701504">டாக்குமெண்ட் ஃபீடர் (இரண்டு பக்கமும்)</translation> <translation id="3246869037381808805">1 நாளுக்கும் முன்னதாக உள்ள பிரிண்ட்டிங் பணிகள் அகற்றப்படும்</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">புதிய கடவுச்சொல்</translation> <translation id="3865414814144988605">தெளிவு</translation> <translation id="3941014780699102620">ஹோஸ்ட்டைச் சரிசெய்ய முடியவில்லை</translation> +<translation id="3942420633017001071">கண்டறிதல்</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> நாட்களுக்கும் மேலாக இருக்கும் பிரிண்ட்டிங் பணிகள் அகற்றப்படும்</translation> <translation id="4003384961948020559">பிரிண்ட் வெளியே வரும் டிரே நிரம்பி விட்டதால் அச்சிட முடியவில்லை</translation> <translation id="4034824040120875894">பிரிண்டர்</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> வினாடிகளில் <ph name="RATE" /> சார்ஜ் செய்யப்பட்டது.</translation> <translation id="4932733599132424254">தேதி</translation> <translation id="4985509611418653372">இயக்கு</translation> +<translation id="5154917547274118687">நினைவகம்</translation> <translation id="5168185087976003268">பேட்டரி நிலை</translation> <translation id="520299634122159966">ஸ்கேனர்கள் எதுவும் இல்லை</translation> <translation id="5212543919916444558">உங்களுக்கு நான் உதவும் வகையில், உங்கள் திரையில் எதுவுமில்லை. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">மேலும் அறிக</translation> <translation id="6191293864534840972">பெயர் சேவையகங்கள் தவறானவை</translation> +<translation id="6232017090690406397">பேட்டரி</translation> <translation id="6325525973963619867">தோல்வி</translation> <translation id="636850387210749493">நிறுவனப் பதிவு</translation> <translation id="649050271426829538">காகிதம் சிக்கிக் கொண்டதால் அச்சிட முடியவில்லை</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">இயல்புநிலை நெட்வொர்க்கில் ஏற்படும் தாமதம் வரம்பை மீறி உள்ளது</translation> <translation id="8919837981463578619">பிரிண்டரில் டிரே இல்லாததால் அச்சிட முடியவில்லை</translation> <translation id="8928727111548978589">காகிதம் இல்லாததால் அச்சிட முடியவில்லை</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> முயற்சிகள் மீதமுள்ளன</translation> <translation id="8970109610781093811">மீண்டும் இயக்கு</translation> <translation id="9088306295921699330">தற்போதைய உபயோகம்</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> வலைதளத்திற்கான டிக்கெட்டை ரெஃப்ரெஷ் செய்யவும்</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb index d3269e3..2f12170 100644 --- a/chromeos/strings/chromeos_strings_te.xtb +++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">స్కానింగ్ ప్రారంభించడం సాధ్యపడలేదు</translation> <translation id="1071587090247825784">ఫైర్వాల్ గుర్తించబడింది</translation> <translation id="1075811647922107217">పేజీ పరిమాణం</translation> +<translation id="1124772482545689468">వినియోగదారు</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> ద్వారా ఈ <ph name="DEVICE_TYPE" /> మేనేజ్ చేయబడుతోంది.</translation> <translation id="1195447618553298278">తెలియని ఎర్రర్.</translation> <translation id="1204296502688602597">DNS ప్రతిస్పందన సమయం</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ప్రయత్నాలు మిగిలి ఉన్నాయి</translation> <translation id="2391082728065870591">ఫీడ్బ్యాక్ రిపోర్ట్ను పంపు</translation> <translation id="2461822463642141190">ప్రస్తుత</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ప్రయత్నం మిగిలి ఉంది}other{<ph name="ERROR_MESSAGE" /> {0} ప్రయత్నాలు మిగిలి ఉన్నాయి}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">స్కాన్ చేయి</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> పరీక్షను రన్ చేస్తోంది...</translation> +<translation id="2620436844016719705">సిస్టమ్</translation> <translation id="2805756323405976993">యాప్స్</translation> <translation id="2872961005593481000">షట్ డౌన్ చెయ్యండి</translation> <translation id="3008341117444806826">రిఫ్రెష్ చేయి</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">కనెక్టివిటీ సమస్య విశ్లేషణ</translation> <translation id="3091839911843451378">విఫలమైంది - ఆగిపోయింది</translation> +<translation id="3102119246920354026">కాష్</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">నా ఫైల్లు</translation> <translation id="3199982728237701504">డాక్యుమెంట్ ఫీడర్ (రెండు వైపులా)</translation> <translation id="3246869037381808805">1 రోజుకు పైగా ఉన్న ప్రింట్ టాస్క్లు తీసివేయబడతాయి</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">కొత్త పాస్వర్డ్</translation> <translation id="3865414814144988605">రిజల్యూషన్</translation> <translation id="3941014780699102620">హోస్ట్ను పరిష్కరించడంలో విఫలమైంది</translation> +<translation id="3942420633017001071">నిర్ధారణలు</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> రోజులకు పైగా ఉన్న ప్రింట్ టాస్క్లు తీసివేయబడతాయి</translation> <translation id="4003384961948020559">విఫలమైంది - అవుట్పుట్, ప్రింటింగ్ జాబ్లతో నిండి ఉంది</translation> <translation id="4034824040120875894">ప్రింటర్</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> సెకన్లలో <ph name="RATE" /> ఛార్జ్ అయ్యింది.</translation> <translation id="4932733599132424254">తేదీ</translation> <translation id="4985509611418653372">రన్ చేయి</translation> +<translation id="5154917547274118687">మెమరీ</translation> <translation id="5168185087976003268">బ్యాటరీ సామర్థ్యం</translation> <translation id="520299634122159966">స్కానర్లు అందుబాటులో లేవు</translation> <translation id="5212543919916444558">నేను సహాయం అందించగలిగేలా మీ స్క్రీన్పై నాకు ఏదీ కనిపించలేదు. మైక్ను నొక్కి, నన్ను ఏదైనా అడగడానికి ప్రయత్నించండి.</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">మరింత తెలుసుకోండి</translation> <translation id="6191293864534840972">పేరు తప్పుగా ఉన్న సర్వర్లు</translation> +<translation id="6232017090690406397">బ్యాటరీ</translation> <translation id="6325525973963619867">విఫలమైంది</translation> <translation id="636850387210749493">ఎంటర్ప్రైజ్ నమోదు</translation> <translation id="649050271426829538">ఆగిపోయింది - కాగితం జామ్ అయింది</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">పరిమితిని మించి ప్రతిస్పందన సమయం ఉన్న డిఫాల్ట్ నెట్వర్క్</translation> <translation id="8919837981463578619">విఫలమైంది - ట్రే అందుబాటులో లేదు</translation> <translation id="8928727111548978589">విఫలమైంది - పేపర్ లేదు</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ప్రయత్నాలు మిగిలి ఉన్నాయి</translation> <translation id="8970109610781093811">మళ్లీ అమలు చేయి</translation> <translation id="9088306295921699330">ప్రస్తుత వినియోగం</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> సంబంధిత టిక్కెట్ను రిఫ్రెష్ చేయండి</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb index 2b2f723..1f78627 100644 --- a/chromeos/strings/chromeos_strings_th.xtb +++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">เริ่มการสแกนไม่ได้</translation> <translation id="1071587090247825784">ตรวจพบไฟร์วอลล์</translation> <translation id="1075811647922107217">ขนาดหน้า</translation> +<translation id="1124772482545689468">ผู้ใช้</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> เครื่องนี้จัดการโดย <ph name="MANAGER" /></translation> <translation id="1195447618553298278">ข้อผิดพลาดที่ไม่รู้จัก</translation> <translation id="1204296502688602597">เวลาในการตอบสนองของ DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">ลองได้อีก <ph name="ATTEMPTS_LEFT" /> ครั้ง</translation> <translation id="2391082728065870591">ส่งรายงานความคิดเห็น</translation> <translation id="2461822463642141190">ปัจจุบัน</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> ลองได้อีก {0} ครั้ง}other{<ph name="ERROR_MESSAGE" /> ลองได้อีก {0} ครั้ง}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">สแกน</translation> <translation id="2570743873672969996">กำลังทำการทดสอบ <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">ระบบ</translation> <translation id="2805756323405976993">แอป</translation> <translation id="2872961005593481000">ปิด</translation> <translation id="3008341117444806826">รีเฟรช</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">การวินิจฉัยการเชื่อมต่อ</translation> <translation id="3091839911843451378">ไม่สำเร็จ - หยุดทำงาน</translation> +<translation id="3102119246920354026">แคช</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">ไฟล์ของฉัน</translation> <translation id="3199982728237701504">ตัวป้อนเอกสาร (สองด้าน)</translation> <translation id="3246869037381808805">ระบบจะนำงานพิมพ์ที่เก่ากว่า 1 วันออก</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">รหัสผ่านใหม่</translation> <translation id="3865414814144988605">ความละเอียด</translation> <translation id="3941014780699102620">แก้ไขโฮสต์ไม่สำเร็จ</translation> +<translation id="3942420633017001071">การวินิจฉัย</translation> <translation id="39823212440917567">ระบบจะนำงานพิมพ์ที่เก่ากว่า <ph name="NUMBER_OF_DAYS" /> วันออก</translation> <translation id="4003384961948020559">ไม่สำเร็จ - ถาดกระดาษขาออกเต็ม</translation> <translation id="4034824040120875894">เครื่องพิมพ์</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">ชาร์จ <ph name="RATE" /> ใน <ph name="NUM_SECONDS" /> วินาที</translation> <translation id="4932733599132424254">วันที่</translation> <translation id="4985509611418653372">เรียกใช้</translation> +<translation id="5154917547274118687">หน่วยความจำ</translation> <translation id="5168185087976003268">ประสิทธิภาพของแบตเตอรี่</translation> <translation id="520299634122159966">ไม่มีเครื่องสแกนที่ใช้ได้</translation> <translation id="5212543919916444558">ฉันไม่พบสิ่งที่จะช่วยได้ในหน้าจอ @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">ดูข้อมูลเพิ่มเติม</translation> <translation id="6191293864534840972">เนมเซิร์ฟเวอร์มีรูปแบบไม่ถูกต้อง</translation> +<translation id="6232017090690406397">แบตเตอรี่</translation> <translation id="6325525973963619867">ล้มเหลว</translation> <translation id="636850387210749493">การลงทะเบียนองค์กร</translation> <translation id="649050271426829538">หยุดพิมพ์ - กระดาษติด</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">เครือข่ายเริ่มต้นสูงกว่าเกณฑ์เวลาในการตอบสนอง</translation> <translation id="8919837981463578619">ไม่สำเร็จ - ไม่มีถาด</translation> <translation id="8928727111548978589">ไม่สำเร็จ - กระดาษหมด</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> ลองได้อีก <ph name="ATTEMPTS_LEFT" /> ครั้ง</translation> <translation id="8970109610781093811">ทำงานอีกครั้ง</translation> <translation id="9088306295921699330">การใช้งานปัจจุบัน</translation> <translation id="910415269708673980">รีเฟรชตั๋วสำหรับ <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb index 7c72123..02bcd2c 100644 --- a/chromeos/strings/chromeos_strings_tr.xtb +++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Tarama işlemi başlatılamadı</translation> <translation id="1071587090247825784">Güvenlik duvarı algılandı</translation> <translation id="1075811647922107217">Sayfa boyutu</translation> +<translation id="1124772482545689468">Kullanıcı</translation> <translation id="1175697296044146566">Bu <ph name="DEVICE_TYPE" />, <ph name="MANAGER" /> tarafından yönetiliyor.</translation> <translation id="1195447618553298278">Bilinmeyen hata.</translation> <translation id="1204296502688602597">DNS Gecikmesi</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> deneme hakkınız kaldı</translation> <translation id="2391082728065870591">Geri Bildirim Raporu Gönder</translation> <translation id="2461822463642141190">Mevcut güç tüketimi</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} deneme hakkınız kaldı}other{<ph name="ERROR_MESSAGE" /> {0} deneme hakkınız kaldı}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" />, <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Tara</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> adlı test çalıştırılıyor...</translation> +<translation id="2620436844016719705">Sistem</translation> <translation id="2805756323405976993">Uygulamalar</translation> <translation id="2872961005593481000">Kapat</translation> <translation id="3008341117444806826">YENİLE</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Bağlantı Teşhisi</translation> <translation id="3091839911843451378">İşlem başarısız - Durdu</translation> +<translation id="3102119246920354026">Önbellek</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Dosyalarım</translation> <translation id="3199982728237701504">Doküman Besleyici (İki taraflı)</translation> <translation id="3246869037381808805">1 günden daha eski yazdırma işleri kaldırılır</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Yeni şifre</translation> <translation id="3865414814144988605">Çözünürlük</translation> <translation id="3941014780699102620">Ana makine çözümlenemedi</translation> +<translation id="3942420633017001071">Teşhis</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> günden eski yazdırma işleri silinir</translation> <translation id="4003384961948020559">İşlem başarısız - Çıkış dolu</translation> <translation id="4034824040120875894">Yazıcı</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> saniyede <ph name="RATE" /> şarj oldu</translation> <translation id="4932733599132424254">Tarih</translation> <translation id="4985509611418653372">Çalıştır</translation> +<translation id="5154917547274118687">Bellek</translation> <translation id="5168185087976003268">Pil gücü</translation> <translation id="520299634122159966">Kullanılabilir tarayıcı yok</translation> <translation id="5212543919916444558">Ekranınızda size yardımcı olabileceğim bir şey bulamıyorum. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Daha fazla bilgi</translation> <translation id="6191293864534840972">Alan adı sunucuları geçersiz</translation> +<translation id="6232017090690406397">Pil</translation> <translation id="6325525973963619867">Başarısız</translation> <translation id="636850387210749493">Kurumsal kayıt</translation> <translation id="649050271426829538">Durduruldu - Kağıt sıkışması</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Varsayılan ağ, gecikme eşiğini aştı</translation> <translation id="8919837981463578619">İşlem başarısız - Tepsi yok</translation> <translation id="8928727111548978589">İşlem başarısız - Kağıt yok</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> deneme hakkınız kaldı</translation> <translation id="8970109610781093811">Yeniden çalıştır</translation> <translation id="9088306295921699330">Mevcut kullanım</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> için bileti yenileyin</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb index e9dcff9..b3606cc 100644 --- a/chromeos/strings/chromeos_strings_uk.xtb +++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Не вдається почати сканування</translation> <translation id="1071587090247825784">виявлено брандмауер</translation> <translation id="1075811647922107217">Розмір сторінки</translation> +<translation id="1124772482545689468">Користувач</translation> <translation id="1175697296044146566">Цим пристроєм <ph name="DEVICE_TYPE" /> керує <ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Невідома помилка.</translation> <translation id="1204296502688602597">Затримка DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Залишилося спроб: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">Надіслати відгук</translation> <translation id="2461822463642141190">Енергоспоживання</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Залишилася {0} спроба}one{<ph name="ERROR_MESSAGE" /> Залишилася {0} спроба}few{<ph name="ERROR_MESSAGE" /> Залишилися {0} спроби}many{<ph name="ERROR_MESSAGE" /> Залишилося {0} спроб}other{<ph name="ERROR_MESSAGE" /> Залишилося {0} спроби}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Сканувати</translation> <translation id="2570743873672969996">Тестування (<ph name="TEST_NAME" />)…</translation> +<translation id="2620436844016719705">Система</translation> <translation id="2805756323405976993">Додатки</translation> <translation id="2872961005593481000">Завершити роботу</translation> <translation id="3008341117444806826">ОНОВИТИ</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> мА</translation> <translation id="3083667275341675831">Діагностика з'єднання</translation> <translation id="3091839911843451378">Не надруковано – друк зупинено</translation> +<translation id="3102119246920354026">Кеш</translation> +<translation id="3122464029669770682">ЦП</translation> <translation id="3188257591659621405">Мої файли</translation> <translation id="3199982728237701504">Пристрій автоподачі документів (двосторонній)</translation> <translation id="3246869037381808805">Завдання друку, старіші за 1 день, буде вилучено</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Новий пароль</translation> <translation id="3865414814144988605">Роздільна здатність</translation> <translation id="3941014780699102620">не вдалося розпізнати хост</translation> +<translation id="3942420633017001071">Діагностика</translation> <translation id="39823212440917567">Завдання друку, старіші за <ph name="NUMBER_OF_DAYS" /> дн., буде вилучено</translation> <translation id="4003384961948020559">Не надруковано – вихідний лоток заповнений</translation> <translation id="4034824040120875894">Принтер</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Акумулятор зарядився на <ph name="RATE" /> за <ph name="NUM_SECONDS" /> с.</translation> <translation id="4932733599132424254">Дата</translation> <translation id="4985509611418653372">Виконати</translation> +<translation id="5154917547274118687">Пам’ять</translation> <translation id="5168185087976003268">Стан акумулятора</translation> <translation id="520299634122159966">Немає доступних сканерів</translation> <translation id="5212543919916444558">На екрані не знайдено елементів, проблеми з якими я можу вирішити. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Докладніше</translation> <translation id="6191293864534840972">Неправильні сервери імен</translation> +<translation id="6232017090690406397">Акумулятор</translation> <translation id="6325525973963619867">Помилка</translation> <translation id="636850387210749493">Реєстрація підприємства</translation> <translation id="649050271426829538">Зупинено – зам'яло папір</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Затримка мережі за умовчанням задовга</translation> <translation id="8919837981463578619">Не надруковано – немає лотка</translation> <translation id="8928727111548978589">Не надруковано – закінчився папір</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />. Залишилося спроб: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">Запустити знову</translation> <translation id="9088306295921699330">Використовується</translation> <translation id="910415269708673980">Оновити квиток для користувача <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb index 1361216..c02d7c4 100644 --- a/chromeos/strings/chromeos_strings_ur.xtb +++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">اسکین کرنا شروع نہیں کیا جا سکا</translation> <translation id="1071587090247825784">فائروال کا پتا چلا</translation> <translation id="1075811647922107217">صفحہ کا سائز</translation> +<translation id="1124772482545689468">صارف</translation> <translation id="1175697296044146566"><ph name="MANAGER" /> اس <ph name="DEVICE_TYPE" /> کا نظم کرتا ہے۔</translation> <translation id="1195447618553298278">نامعلوم خرابی۔</translation> <translation id="1204296502688602597">DNS تاخیر</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> کوششیں باقی ہیں</translation> <translation id="2391082728065870591">تاثرات کی رپورٹ بھیجیں</translation> <translation id="2461822463642141190">حالیہ</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} کوشش باقی ہے}other{<ph name="ERROR_MESSAGE" /> {0} کوششیں باقی ہیں}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">اسکین کریں</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> ٹیسٹ چل رہا ہے...</translation> +<translation id="2620436844016719705">سسٹم</translation> <translation id="2805756323405976993">اطلاقات</translation> <translation id="2872961005593481000">بند کریں</translation> <translation id="3008341117444806826">ریفریش کریں</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">کنیکٹویٹی ڈائيگناسٹکس</translation> <translation id="3091839911843451378">ناکام ہو گیا - رک گیا</translation> +<translation id="3102119246920354026">کیش</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">میری فائلز</translation> <translation id="3199982728237701504">دستاویز فیڈر (دو طرفہ)</translation> <translation id="3246869037381808805">1 دن سے پرانی پرنٹ جابز کو ہٹا دیا جائے گا</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">نیا پاس ورڈ</translation> <translation id="3865414814144988605">ریزولیوشن</translation> <translation id="3941014780699102620">میزبان کو حل کرنے میں ناکام</translation> +<translation id="3942420633017001071">تشخیصات</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> دن سے پرانی پرنٹ جابز کو ہٹا دیا جائے گا</translation> <translation id="4003384961948020559">ناکام ہو گیا - آؤٹ پٹ مکمل</translation> <translation id="4034824040120875894">پرنٹر</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> سیکنڈ میں <ph name="RATE" /> چارج کیا گیا۔</translation> <translation id="4932733599132424254">تاریخ</translation> <translation id="4985509611418653372">چلائیں</translation> +<translation id="5154917547274118687">میموری</translation> <translation id="5168185087976003268">بیٹری کی صحت</translation> <translation id="520299634122159966">کوئی اسکینرز دستیاب نہیں ہے</translation> <translation id="5212543919916444558">مجھے آپ کی اسکرین پر ایسا کچھ نہیں ملا جس سے متعلق میں آپ کی مدد کر سکوں۔ مجھ سے کچھ بھی پوچھنے کے لیے مائیک کو تھپتھپانے کی کوشش کریں۔</translation> @@ -136,6 +141,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">مزید جانیں</translation> <translation id="6191293864534840972">نام سرورز غلط ہے</translation> +<translation id="6232017090690406397">بیٹری</translation> <translation id="6325525973963619867">ناکام</translation> <translation id="636850387210749493">انٹرپرائز اندراج</translation> <translation id="649050271426829538">رک گیا - پیپر جام</translation> @@ -193,6 +199,7 @@ <translation id="8910721771319628100">تاخیر کی حد کے اوپر ڈیفالٹ نیٹ ورک</translation> <translation id="8919837981463578619">ناکام ہو گیا - ٹرے موجود نہیں ہے</translation> <translation id="8928727111548978589">ناکام ہو گیا - کاغذ ختم ہو گیا</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> کوششیں باقی ہیں</translation> <translation id="9088306295921699330">حالیہ استعمال</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> کے لیے ٹکٹ ریفریش کریں</translation> <translation id="9106415115617144481">اسکین شدہ صفحہ <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb index 89d5327..34e3b32 100644 --- a/chromeos/strings/chromeos_strings_uz.xtb +++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Skanerlash ishga tushmadi</translation> <translation id="1071587090247825784">Himoya devori aniqlandi</translation> <translation id="1075811647922107217">Sahifa hajmi</translation> +<translation id="1124772482545689468">Foydalanuvchi</translation> <translation id="1175697296044146566">Bu <ph name="DEVICE_TYPE" /> qurilmasi <ph name="MANAGER" /> domenida boshqariladi.</translation> <translation id="1195447618553298278">Noma’lum xatolik.</translation> <translation id="1204296502688602597">DNS kechikishi</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ta urinish qoldi</translation> <translation id="2391082728065870591">Fikr va mulohaza hisobotini yuborish</translation> <translation id="2461822463642141190">Ayni vaqtda</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ta urinish qoldi}other{<ph name="ERROR_MESSAGE" /> {0} ta urinish qoldi}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Qidiruv</translation> <translation id="2570743873672969996"><ph name="TEST_NAME" /> testi bajarilmoqda...</translation> +<translation id="2620436844016719705">Tizim</translation> <translation id="2805756323405976993">Ilovalar</translation> <translation id="2872961005593481000">Ishni tamomlash</translation> <translation id="3008341117444806826">YANGILASH</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">Aloqa diagnostikasi</translation> <translation id="3091839911843451378">Bajarilmadi - Toʻxtatildi</translation> +<translation id="3102119246920354026">Kesh</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Fayllarim</translation> <translation id="3199982728237701504">Hujjat tasmasi (Ikki tomonlama)</translation> <translation id="3246869037381808805">1 kundan eski chop etish vazifalari avtomatik tozalanadi</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Yangi parol</translation> <translation id="3865414814144988605">Piksellar sig‘imi</translation> <translation id="3941014780699102620">Host aniqlanmadi</translation> +<translation id="3942420633017001071">Diagnostika</translation> <translation id="39823212440917567"><ph name="NUMBER_OF_DAYS" /> kundan eski chop etish vazifalari avtomatik tozalanadi</translation> <translation id="4003384961948020559">Bajarilmadi - Boʻsh joy qolmadi</translation> <translation id="4034824040120875894">Printer</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> soniyada <ph name="RATE" /> quvvat oldi.</translation> <translation id="4932733599132424254">Sana</translation> <translation id="4985509611418653372">Ishga tushirish</translation> +<translation id="5154917547274118687">Operativ xotira</translation> <translation id="5168185087976003268">Quvvat darajasi</translation> <translation id="520299634122159966">Skanerlar topilmadi</translation> <translation id="5212543919916444558">Ekranda men yordam bera oladigan hech narsa topilmadi. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Batafsil</translation> <translation id="6191293864534840972">Nom serverlarida xato</translation> +<translation id="6232017090690406397">Batareya</translation> <translation id="6325525973963619867">Amalga oshmadi</translation> <translation id="636850387210749493">Korporativ domen ro‘yxatidan o‘tish</translation> <translation id="649050271426829538">Toʻxtatildi – Qogʻoz tiqilib qoldi</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Birlamchi tarmoq kutish vaqti baland</translation> <translation id="8919837981463578619">Bajarilmadi - Tarnov joyida emas</translation> <translation id="8928727111548978589">Bajarilmadi - Qogʻoz tugadi</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> ta urinish qoldi</translation> <translation id="9088306295921699330">Joriy faollik</translation> <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> uchun chiptani yangilash</translation> <translation id="9106415115617144481"><ph name="PAGE_NUMBER" /> ta sahifa skanerlandi</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb index 6291d31..16fdadf5 100644 --- a/chromeos/strings/chromeos_strings_vi.xtb +++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Không thể bắt đầu quét</translation> <translation id="1071587090247825784">Đã phát hiện thấy tường lửa</translation> <translation id="1075811647922107217">Kích thước trang</translation> +<translation id="1124772482545689468">Người dùng</translation> <translation id="1175697296044146566"><ph name="DEVICE_TYPE" /> này do <ph name="MANAGER" /> quản lý.</translation> <translation id="1195447618553298278">Lỗi chưa biết.</translation> <translation id="1204296502688602597">Độ trễ DNS</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">Còn <ph name="ATTEMPTS_LEFT" /> lần thử</translation> <translation id="2391082728065870591">Gửi báo cáo phản hồi</translation> <translation id="2461822463642141190">Hiện tại</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Bạn còn {0} lần thử}other{<ph name="ERROR_MESSAGE" /> Bạn còn {0} lần thử}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Quét</translation> <translation id="2570743873672969996">Đang chạy kiểm tra <ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Hệ thống</translation> <translation id="2805756323405976993">Ứng dụng</translation> <translation id="2872961005593481000">Tắt</translation> <translation id="3008341117444806826">LÀM MỚI</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">Chẩn đoán kết nối</translation> <translation id="3091839911843451378">Không thành công – Đã dừng</translation> +<translation id="3102119246920354026">Bộ nhớ đệm</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">Tệp của tôi</translation> <translation id="3199982728237701504">Khay nạp tài liệu (2 mặt)</translation> <translation id="3246869037381808805">Các lệnh in quá 1 ngày sẽ bị xóa</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Mật khẩu mới</translation> <translation id="3865414814144988605">Độ phân giải</translation> <translation id="3941014780699102620">Không phân giải được máy chủ</translation> +<translation id="3942420633017001071">Chẩn đoán</translation> <translation id="39823212440917567">Các lệnh in quá <ph name="NUMBER_OF_DAYS" /> ngày sẽ bị xóa</translation> <translation id="4003384961948020559">Không thành công – Khay đầu ra đã đầy</translation> <translation id="4034824040120875894">Máy in</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Đã sạc <ph name="RATE" /> trong <ph name="NUM_SECONDS" /> giây.</translation> <translation id="4932733599132424254">Ngày Tháng</translation> <translation id="4985509611418653372">Chạy</translation> +<translation id="5154917547274118687">Bộ nhớ</translation> <translation id="5168185087976003268">Tình trạng pin</translation> <translation id="520299634122159966">Chưa có máy quét nào</translation> <translation id="5212543919916444558">Tôi không tìm thấy nội dung nào trên màn hình để có thể trợ giúp cho bạn. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">Tìm hiểu thêm</translation> <translation id="6191293864534840972">Máy chủ định danh không hợp lệ</translation> +<translation id="6232017090690406397">Pin</translation> <translation id="6325525973963619867">Lỗi</translation> <translation id="636850387210749493">Đăng ký doanh nghiệp</translation> <translation id="649050271426829538">Đã dừng – Kẹt giấy</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Mạng mặc định vượt ngưỡng độ trễ</translation> <translation id="8919837981463578619">Không thành công – Thiếu khay</translation> <translation id="8928727111548978589">Không thành công – Hết giấy</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> Bạn còn <ph name="ATTEMPTS_LEFT" /> lần thử</translation> <translation id="8970109610781093811">Chạy lại</translation> <translation id="9088306295921699330">Mức sử dụng hiện tại</translation> <translation id="910415269708673980">Làm mới phiếu cho <ph name="PRINCIPAL_NAME" /></translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb index 43ee7821..d757700 100644 --- a/chromeos/strings/chromeos_strings_zh-CN.xtb +++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">无法启动扫描</translation> <translation id="1071587090247825784">检测到防火墙</translation> <translation id="1075811647922107217">页面大小</translation> +<translation id="1124772482545689468">用户</translation> <translation id="1175697296044146566">此 <ph name="DEVICE_TYPE" /> 由 <ph name="MANAGER" /> 管理。</translation> <translation id="1195447618553298278">未知错误。</translation> <translation id="1204296502688602597">DNS 延迟时间</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">剩余尝试次数:<ph name="ATTEMPTS_LEFT" /></translation> <translation id="2391082728065870591">发送反馈报告</translation> <translation id="2461822463642141190">电流</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />剩余尝试次数:{0}}other{<ph name="ERROR_MESSAGE" />剩余尝试次数:{0}}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">扫描</translation> <translation id="2570743873672969996">正在运行<ph name="TEST_NAME" />测试…</translation> +<translation id="2620436844016719705">系统</translation> <translation id="2805756323405976993">应用</translation> <translation id="2872961005593481000">关机</translation> <translation id="3008341117444806826">刷新</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">网络连接诊断</translation> <translation id="3091839911843451378">失败 - 已停止</translation> +<translation id="3102119246920354026">缓存</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">我的文件</translation> <translation id="3199982728237701504">文件馈送器(双面)</translation> <translation id="3246869037381808805">系统会自动移除存在时长已超过 1 天的打印任务</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">新密码</translation> <translation id="3865414814144988605">分辨率</translation> <translation id="3941014780699102620">未能解析主机</translation> +<translation id="3942420633017001071">诊断</translation> <translation id="39823212440917567">系统会自动移除存在时长已超过 <ph name="NUMBER_OF_DAYS" /> 天的打印任务</translation> <translation id="4003384961948020559">失败 - 出纸盘已满</translation> <translation id="4034824040120875894">打印机</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> 秒内充了 <ph name="RATE" /> 的电量。</translation> <translation id="4932733599132424254">日期</translation> <translation id="4985509611418653372">运行</translation> +<translation id="5154917547274118687">内存</translation> <translation id="5168185087976003268">电池寿命</translation> <translation id="520299634122159966">无可用的扫描器</translation> <translation id="5212543919916444558">无法提供与您的屏幕上可以找到的任何内容相关的帮助。 @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">了解详情</translation> <translation id="6191293864534840972">域名服务器格式不正确</translation> +<translation id="6232017090690406397">电池</translation> <translation id="6325525973963619867">失败</translation> <translation id="636850387210749493">企业注册</translation> <translation id="649050271426829538">已停止 - 卡纸了</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">默认网络的延迟时间超出了阈值</translation> <translation id="8919837981463578619">失败 - 缺少送纸盘</translation> <translation id="8928727111548978589">失败 - 纸张已用完</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />剩余尝试次数:<ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">重新运行</translation> <translation id="9088306295921699330">目前用量</translation> <translation id="910415269708673980">刷新 <ph name="PRINCIPAL_NAME" /> 的票据</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb index ab6ce91..cbdfce6a 100644 --- a/chromeos/strings/chromeos_strings_zh-HK.xtb +++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">無法開始掃瞄</translation> <translation id="1071587090247825784">偵測到防火牆</translation> <translation id="1075811647922107217">頁面大小</translation> +<translation id="1124772482545689468">使用者</translation> <translation id="1175697296044146566">此 <ph name="DEVICE_TYPE" /> 由 <ph name="MANAGER" /> 管理。</translation> <translation id="1195447618553298278">未知的錯誤。</translation> <translation id="1204296502688602597">DNS 延遲時間</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">剩餘嘗試次數:<ph name="ATTEMPTS_LEFT" /> 次</translation> <translation id="2391082728065870591">傳送意見反映報告</translation> <translation id="2461822463642141190">電流</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />剩餘嘗試次數:{0} 次}other{<ph name="ERROR_MESSAGE" />剩餘嘗試次數:{0} 次}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">掃瞄</translation> <translation id="2570743873672969996">正在執行<ph name="TEST_NAME" />測試…</translation> +<translation id="2620436844016719705">系統</translation> <translation id="2805756323405976993">應用程式</translation> <translation id="2872961005593481000">關閉</translation> <translation id="3008341117444806826">更新</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">連接性診斷</translation> <translation id="3091839911843451378">失敗 - 已停止</translation> +<translation id="3102119246920354026">快取</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">我的檔案</translation> <translation id="3199982728237701504">文件送紙器 (雙面)</translation> <translation id="3246869037381808805">超過 1 天前的列印工作將被移除</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">新密碼</translation> <translation id="3865414814144988605">解像度</translation> <translation id="3941014780699102620">無法解析主機</translation> +<translation id="3942420633017001071">診斷</translation> <translation id="39823212440917567">超過 <ph name="NUMBER_OF_DAYS" /> 天前的列印工作將被移除</translation> <translation id="4003384961948020559">失敗 - 輸出紙匣已滿</translation> <translation id="4034824040120875894">打印機</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">已在 <ph name="NUM_SECONDS" /> 秒內充電 <ph name="RATE" />。</translation> <translation id="4932733599132424254">日期</translation> <translation id="4985509611418653372">執行</translation> +<translation id="5154917547274118687">記憶體</translation> <translation id="5168185087976003268">電池狀態</translation> <translation id="520299634122159966">沒有可用的掃瞄器</translation> <translation id="5212543919916444558">系統在您的畫面上找不到任何可提供協助的內容。 @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">瞭解更多資料</translation> <translation id="6191293864534840972">域名伺服器格式錯誤</translation> +<translation id="6232017090690406397">電池</translation> <translation id="6325525973963619867">失敗</translation> <translation id="636850387210749493">企業註冊</translation> <translation id="649050271426829538">已停止 - 卡紙</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">預設網絡超過延遲門檻</translation> <translation id="8919837981463578619">失敗 - 沒有紙匣</translation> <translation id="8928727111548978589">失敗 - 紙張已用完</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />剩餘嘗試次數:<ph name="ATTEMPTS_LEFT" /></translation> <translation id="8970109610781093811">再執行一次</translation> <translation id="9088306295921699330">目前使用量</translation> <translation id="910415269708673980">更新 <ph name="PRINCIPAL_NAME" /> 的票證</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb index 5150d91b..4cef5633 100644 --- a/chromeos/strings/chromeos_strings_zh-TW.xtb +++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">無法開始掃描</translation> <translation id="1071587090247825784">已偵測到防火牆</translation> <translation id="1075811647922107217">網頁大小</translation> +<translation id="1124772482545689468">使用者</translation> <translation id="1175697296044146566">這部 <ph name="DEVICE_TYPE" /> 是由 <ph name="MANAGER" /> 管理。</translation> <translation id="1195447618553298278">未知的錯誤。</translation> <translation id="1204296502688602597">DNS 延遲</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402">剩餘嘗試次數:<ph name="ATTEMPTS_LEFT" /> 次</translation> <translation id="2391082728065870591">傳送意見回饋報告</translation> <translation id="2461822463642141190">目前耗電量</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" />剩餘嘗試次數:{0} 次}other{<ph name="ERROR_MESSAGE" />剩餘嘗試次數:{0} 次}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">掃描</translation> <translation id="2570743873672969996">正在執行<ph name="TEST_NAME" />測試...</translation> +<translation id="2620436844016719705">系統</translation> <translation id="2805756323405976993">應用程式</translation> <translation id="2872961005593481000">關閉</translation> <translation id="3008341117444806826">更新</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation> <translation id="3083667275341675831">連線診斷工具</translation> <translation id="3091839911843451378">失敗 - 已停止</translation> +<translation id="3102119246920354026">快取</translation> +<translation id="3122464029669770682">CPU</translation> <translation id="3188257591659621405">我的檔案</translation> <translation id="3199982728237701504">文件送紙器 (雙面)</translation> <translation id="3246869037381808805">系統會移除 1 天前的列印工作</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">新密碼</translation> <translation id="3865414814144988605">解析度</translation> <translation id="3941014780699102620">無法解析主機</translation> +<translation id="3942420633017001071">診斷</translation> <translation id="39823212440917567">系統會移除 <ph name="NUMBER_OF_DAYS" /> 天前的列印工作</translation> <translation id="4003384961948020559">失敗 - 輸出紙匣已滿</translation> <translation id="4034824040120875894">印表機</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> 秒內已充電 <ph name="RATE" />。</translation> <translation id="4932733599132424254">日期</translation> <translation id="4985509611418653372">執行</translation> +<translation id="5154917547274118687">記憶體</translation> <translation id="5168185087976003268">電池壽命</translation> <translation id="520299634122159966">沒有可用的掃描器</translation> <translation id="5212543919916444558">系統在你的畫面上找不到任何能提供協助的內容。 @@ -137,6 +142,7 @@ <translation id="6147514244879357420">PNG</translation> <translation id="6165508094623778733">瞭解詳情</translation> <translation id="6191293864534840972">名稱伺服器格式錯誤</translation> +<translation id="6232017090690406397">電池</translation> <translation id="6325525973963619867">失敗</translation> <translation id="636850387210749493">企業註冊</translation> <translation id="649050271426829538">已停止 - 卡紙</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">預設網路超過延遲門檻</translation> <translation id="8919837981463578619">失敗 - 缺少紙匣</translation> <translation id="8928727111548978589">失敗 - 紙張用盡</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" />剩餘嘗試次數:<ph name="ATTEMPTS_LEFT" /> 次</translation> <translation id="8970109610781093811">再執行一次</translation> <translation id="9088306295921699330">目前用量</translation> <translation id="910415269708673980">更新 <ph name="PRINCIPAL_NAME" /> 的票證</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb index d309fee..793a67f 100644 --- a/chromeos/strings/chromeos_strings_zu.xtb +++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -5,6 +5,7 @@ <translation id="1059913517121127803">Ayikwazanga ukuqalisa ukuskena</translation> <translation id="1071587090247825784">Kutholwe uhlelo lokuvikela</translation> <translation id="1075811647922107217">Usayizi wekhasi</translation> +<translation id="1124772482545689468">Umsebenzisi</translation> <translation id="1175697296044146566">Le-<ph name="DEVICE_TYPE" /> iphethwe yi-<ph name="MANAGER" />.</translation> <translation id="1195447618553298278">Iphutha elingaziwa.</translation> <translation id="1204296502688602597">I-DNS Latency</translation> @@ -42,10 +43,10 @@ <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> imizamo esele</translation> <translation id="2391082728065870591">Thumela Umbiko Wempendulo</translation> <translation id="2461822463642141190">Okwamanje</translation> -<translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> kusele umzamo ongu-{0}}one{<ph name="ERROR_MESSAGE" /> kusele imizamo engu-{0}}other{<ph name="ERROR_MESSAGE" /> kusele imizamo engu-{0}}}</translation> <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation> <translation id="2517472476991765520">Skena</translation> <translation id="2570743873672969996">Iqalisa ukuhlola kwe-<ph name="TEST_NAME" />...</translation> +<translation id="2620436844016719705">Isistimu</translation> <translation id="2805756323405976993">Izinhlelo zokusebenza</translation> <translation id="2872961005593481000">Cisha</translation> <translation id="3008341117444806826">VUSELELA</translation> @@ -53,6 +54,8 @@ <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation> <translation id="3083667275341675831">Ukuxilongwa Kokuxhumana</translation> <translation id="3091839911843451378">Yehlulekile - Imile</translation> +<translation id="3102119246920354026">Inqolobane</translation> +<translation id="3122464029669770682">I-CPU</translation> <translation id="3188257591659621405">Amafayela ami</translation> <translation id="3199982728237701504">Isiphakeli Sedokhumenti (Amahlangothi amabili)</translation> <translation id="3246869037381808805">Imisebenzi yokuphrinta emidala kunosuku olu-1 izosuswa</translation> @@ -71,6 +74,7 @@ <translation id="3838338534323494292">Iphasiwedi entsha</translation> <translation id="3865414814144988605">Isixazululo</translation> <translation id="3941014780699102620">Yehlulekile ukulungisa umsingathi</translation> +<translation id="3942420633017001071">Ukuxilonga</translation> <translation id="39823212440917567">Imisebenzi yokuphrinta engaphezu kwezinsuku ezingu-<ph name="NUMBER_OF_DAYS" /> izosuswa</translation> <translation id="4003384961948020559">Yehlulekile - Okukhiphayo kugcwele</translation> <translation id="4034824040120875894">Iphrinta</translation> @@ -105,6 +109,7 @@ <translation id="4921665434385737356">Ikhokhiswe <ph name="RATE" /> ngamasekhondi angu-<ph name="NUM_SECONDS" />.</translation> <translation id="4932733599132424254">Idethi</translation> <translation id="4985509611418653372">Ukugijima</translation> +<translation id="5154917547274118687">Imemori</translation> <translation id="5168185087976003268">Impilo yebhethri</translation> <translation id="520299634122159966">Awekho amaskena atholakalayo</translation> <translation id="5212543919916444558">Angikwazi ukuthola lutho kusikrini sakho engingasiza ngakho. @@ -137,6 +142,7 @@ <translation id="6147514244879357420">I-PNG</translation> <translation id="6165508094623778733">Funda kabanzi</translation> <translation id="6191293864534840972">Amaseva wegama angasebenzi kahle</translation> +<translation id="6232017090690406397">Ibhethri</translation> <translation id="6325525973963619867">Yehlulekile</translation> <translation id="636850387210749493">Ukubhalisa kwebhizinisi</translation> <translation id="649050271426829538">Imile - Ukujema kwephepha</translation> @@ -194,6 +200,7 @@ <translation id="8910721771319628100">Inethiwekhi ezenzakalelayo ingaphezu komkhawulo wokubambezeleka</translation> <translation id="8919837981463578619">Yehlulekile - Itreyi alikho</translation> <translation id="8928727111548978589">Yehlulekile - Iphepha liphelile</translation> +<translation id="89415009803968170"><ph name="ERROR_MESSAGE" /> <ph name="ATTEMPTS_LEFT" /> imizamo esele</translation> <translation id="9088306295921699330">Ukusetshenziswa kwamanje</translation> <translation id="910415269708673980">Vuselela ithikithi le-<ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Iskena ikhasi <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/tpm/BUILD.gn b/chromeos/tpm/BUILD.gn index 9a10cbc..025ed71 100644 --- a/chromeos/tpm/BUILD.gn +++ b/chromeos/tpm/BUILD.gn
@@ -2,13 +2,21 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/buildflag_header.gni") +import("//chromeos/tpm/buildflags.gni") import("//testing/test.gni") assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos") +buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "SYSTEM_SLOT_SOFTWARE_FALLBACK=$system_slot_software_fallback" ] +} + component("tpm") { defines = [ "IS_CHROMEOS_TPM_IMPL" ] deps = [ + ":buildflags", "//base", "//chromeos/cryptohome", "//chromeos/dbus/constants",
diff --git a/chromeos/tpm/buildflags.gni b/chromeos/tpm/buildflags.gni new file mode 100644 index 0000000..0fdcb6e --- /dev/null +++ b/chromeos/tpm/buildflags.gni
@@ -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. + +declare_args() { + # True if the system slot should fall back to software-backed initialization + # in case of a disabled TPM. + system_slot_software_fallback = false +}
diff --git a/chromeos/tpm/tpm_token_info_getter.cc b/chromeos/tpm/tpm_token_info_getter.cc index 36709fdb7..8fe3ce95 100644 --- a/chromeos/tpm/tpm_token_info_getter.cc +++ b/chromeos/tpm/tpm_token_info_getter.cc
@@ -71,6 +71,11 @@ Continue(); } +void TPMTokenInfoGetter::SetSystemSlotSoftwareFallback( + bool use_system_slot_software_fallback) { + use_system_slot_software_fallback_ = use_system_slot_software_fallback; +} + TPMTokenInfoGetter::TPMTokenInfoGetter( TPMTokenInfoGetter::Type type, const AccountId& account_id, @@ -107,6 +112,15 @@ weak_factory_.GetWeakPtr())); } break; + case STATE_SYSTEM_SLOT_SOFTWARE_FALLBACK: + if (type_ == TYPE_SYSTEM) { + cryptohome_client_->Pkcs11GetTpmTokenInfo( + base::BindOnce(&TPMTokenInfoGetter::OnPkcs11GetTpmTokenInfo, + weak_factory_.GetWeakPtr())); + } else { // if (type_ == TYPE_USER) + NOTREACHED(); + } + break; case STATE_DONE: NOTREACHED(); } @@ -129,6 +143,15 @@ } if (!reply.is_enabled()) { + // In case the TPM is disabled and use_system_slot_software_fallback_ is + // true, we continue the token info retrieval for the system slot in order + // to fall back to a software-backed initialization. + if (use_system_slot_software_fallback_) { + state_ = STATE_SYSTEM_SLOT_SOFTWARE_FALLBACK; + Continue(); + return; + } + state_ = STATE_DONE; std::move(callback_).Run(base::nullopt); return;
diff --git a/chromeos/tpm/tpm_token_info_getter.h b/chromeos/tpm/tpm_token_info_getter.h index 8e0cb096..1beca78 100644 --- a/chromeos/tpm/tpm_token_info_getter.h +++ b/chromeos/tpm/tpm_token_info_getter.h
@@ -52,6 +52,8 @@ // called). void Start(TpmTokenInfoCallback callback); + void SetSystemSlotSoftwareFallback(bool use_system_slot_software_fallback); + private: enum Type { TYPE_SYSTEM, @@ -62,6 +64,7 @@ STATE_INITIAL, STATE_STARTED, STATE_TPM_ENABLED, + STATE_SYSTEM_SLOT_SOFTWARE_FALLBACK, STATE_DONE }; @@ -100,6 +103,12 @@ TpmTokenInfoCallback callback_; + // If set and the TPM is disabled, TPMTokenInfoGetter will still get the token + // info using cryptohome's Pkcs11GetTpmTokenInfo query. The token info is + // needed for falling back to a software-backed initialization of the system + // token. + bool use_system_slot_software_fallback_ = false; + // The current request delay before the next attempt to initialize the // TPM. Will be adapted after each attempt. base::TimeDelta tpm_request_delay_;
diff --git a/chromeos/tpm/tpm_token_info_getter_unittest.cc b/chromeos/tpm/tpm_token_info_getter_unittest.cc index e660e3a7..bb94de6d 100644 --- a/chromeos/tpm/tpm_token_info_getter_unittest.cc +++ b/chromeos/tpm/tpm_token_info_getter_unittest.cc
@@ -292,6 +292,32 @@ EXPECT_EQ(std::vector<int64_t>(), delays_); } +TEST_F(SystemTPMTokenInfoGetterTest, TPMNotEnabledSystemSlotFallbackEnabled) { + chromeos::TpmManagerClient::Get() + ->GetTestInterface() + ->mutable_nonsensitive_status_reply() + ->set_is_enabled(false); + + bool completed = false; + base::Optional<TpmTokenInfo> result; + tpm_token_info_getter_->SetSystemSlotSoftwareFallback(true); + tpm_token_info_getter_->Start( + base::BindOnce(&OnTpmTokenInfoGetterCompleted, &completed, &result)); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(completed); + + const TpmTokenInfo fake_token_info = {"TOKEN_1", "2222", 1}; + cryptohome_client_->SetTpmTokenInfo(fake_token_info); + + EXPECT_TRUE(completed); + ASSERT_TRUE(result.has_value()); + EXPECT_EQ("TOKEN_1", result->label); + EXPECT_EQ("2222", result->user_pin); + EXPECT_EQ(1, result->slot); + + EXPECT_EQ(std::vector<int64_t>(), delays_); +} + TEST_F(SystemTPMTokenInfoGetterTest, TpmEnabledCallFails) { chromeos::TpmManagerClient::Get() ->GetTestInterface()
diff --git a/chromeos/tpm/tpm_token_loader.cc b/chromeos/tpm/tpm_token_loader.cc index 7340b8f..ccf87d3 100644 --- a/chromeos/tpm/tpm_token_loader.cc +++ b/chromeos/tpm/tpm_token_loader.cc
@@ -14,6 +14,7 @@ #include "base/system/sys_info.h" #include "base/task_runner_util.h" #include "base/threading/thread_task_runner_handle.h" +#include "chromeos/tpm/buildflags.h" #include "chromeos/tpm/tpm_token_info_getter.h" #include "crypto/nss_util.h" @@ -27,6 +28,15 @@ runner->PostTask(FROM_HERE, base::BindOnce(std::move(callback), success)); } +// Checks if the build flag system_slot_software_fallback is enabled. +bool IsSystemSlotSoftwareFallbackEnabled() { +#if BUILDFLAG(SYSTEM_SLOT_SOFTWARE_FALLBACK) + return true; +#else + return false; +#endif +} + } // namespace static TPMTokenLoader* g_tpm_token_loader = NULL; @@ -70,6 +80,9 @@ base::ThreadTaskRunnerHandle::Get())), tpm_token_slot_id_(-1), can_start_before_login_(false) { + tpm_token_info_getter_->SetSystemSlotSoftwareFallback( + IsSystemSlotSoftwareFallbackEnabled()); + if (!initialized_for_test_ && LoginState::IsInitialized()) LoginState::Get()->AddObserver(this);
diff --git a/components/arc/intent_helper/custom_tab.cc b/components/arc/intent_helper/custom_tab.cc index a7fa152..9cdd4da 100644 --- a/components/arc/intent_helper/custom_tab.cc +++ b/components/arc/intent_helper/custom_tab.cc
@@ -69,10 +69,8 @@ } void CustomTab::OnWindowDestroying(aura::Window* window) { - if (arc_app_window_observation_.IsObservingSource(window)) - arc_app_window_observation_.RemoveObservation(); - if (other_windows_observation_.IsObservingSource(window)) - other_windows_observation_.RemoveObservation(); + arc_app_window_observation_.Reset(); + other_windows_observation_.Reset(); } void CustomTab::UpdateHostBounds(aura::Window* arc_app_window) {
diff --git a/components/autofill/content/browser/risk/fingerprint.cc b/components/autofill/content/browser/risk/fingerprint.cc index 994561d..ca846f7 100644 --- a/components/autofill/content/browser/risk/fingerprint.cc +++ b/components/autofill/content/browser/risk/fingerprint.cc
@@ -328,7 +328,7 @@ return; DCHECK(gpu_observation_.IsObservingSource(gpu_data_manager_)); - gpu_observation_.RemoveObservation(); + gpu_observation_.Reset(); MaybeFillFingerprint(); }
diff --git a/components/autofill/core/browser/autofill_handler.cc b/components/autofill/core/browser/autofill_handler.cc index 2be5646b..183277e 100644 --- a/components/autofill/core/browser/autofill_handler.cc +++ b/components/autofill/core/browser/autofill_handler.cc
@@ -74,12 +74,42 @@ using base::TimeTicks; +// static +void AutofillHandler::LogAutofillTypePredictionsAvailable( + LogManager* log_manager, + const std::vector<FormStructure*>& forms) { + if (VLOG_IS_ON(1)) { + VLOG(1) << "Parsed forms:"; + for (FormStructure* form : forms) + VLOG(1) << *form; + } + + if (!log_manager || !log_manager->IsLoggingActive()) + return; + + LogBuffer buffer; + for (FormStructure* form : forms) + buffer << *form; + + log_manager->Log() << LoggingScope::kParsing << LogMessage::kParsedForms + << std::move(buffer); +} + +// static +bool AutofillHandler::IsRichQueryEnabled(version_info::Channel channel) { + return base::FeatureList::IsEnabled(features::kAutofillRichMetadataQueries) && + channel != version_info::Channel::STABLE && + channel != version_info::Channel::BETA; +} + AutofillHandler::AutofillHandler( AutofillDriver* driver, LogManager* log_manager, AutofillDownloadManagerState enable_download_manager, version_info::Channel channel) - : driver_(driver), log_manager_(log_manager) { + : driver_(driver), + log_manager_(log_manager), + is_rich_query_enabled_(IsRichQueryEnabled(channel)) { if (enable_download_manager == ENABLE_AUTOFILL_DOWNLOAD_MANAGER) { download_manager_ = std::make_unique<AutofillDownloadManager>( driver, this, GetAPIKeyForUrl(channel), log_manager); @@ -152,6 +182,55 @@ OnFormsParsed(new_forms); } +void AutofillHandler::OnFormsParsed(const std::vector<const FormData*>& forms) { + DCHECK(!forms.empty()); + OnBeforeProcessParsedForms(); + + driver()->HandleParsedForms(forms); + + std::vector<FormStructure*> non_queryable_forms; + std::vector<FormStructure*> queryable_forms; + std::set<FormType> form_types; + for (const FormData* form : forms) { + FormStructure* form_structure = + FindCachedFormByRendererId(form->unique_renderer_id); + if (!form_structure) { + NOTREACHED(); + continue; + } + + std::set<FormType> current_form_types = form_structure->GetFormTypes(); + form_types.insert(current_form_types.begin(), current_form_types.end()); + + // Configure the query encoding for this form and add it to the appropriate + // collection of forms: queryable vs non-queryable. + form_structure->set_is_rich_query_enabled(is_rich_query_enabled_); + if (form_structure->ShouldBeQueried()) + queryable_forms.push_back(form_structure); + else + non_queryable_forms.push_back(form_structure); + + OnFormProcessed(*form, *form_structure); + } + + if (!queryable_forms.empty() || !non_queryable_forms.empty()) { + OnAfterProcessParsedForms(form_types); + } + + // Send the current type predictions to the renderer. For non-queryable forms + // this is all the information about them that will ever be available. The + // queryable forms will be updated once the field type query is complete. + driver()->SendAutofillTypePredictionsToRenderer(non_queryable_forms); + driver()->SendAutofillTypePredictionsToRenderer(queryable_forms); + LogAutofillTypePredictionsAvailable(log_manager_, non_queryable_forms); + LogAutofillTypePredictionsAvailable(log_manager_, queryable_forms); + + // Query the server if at least one of the forms was parsed. + if (!queryable_forms.empty() && download_manager()) { + download_manager()->StartQueryRequest(queryable_forms); + } +} + void AutofillHandler::OnTextFieldDidChange(const FormData& form, const FormFieldData& field, const gfx::RectF& bounding_box,
diff --git a/components/autofill/core/browser/autofill_handler.h b/components/autofill/core/browser/autofill_handler.h index b967896f..be55b48 100644 --- a/components/autofill/core/browser/autofill_handler.h +++ b/components/autofill/core/browser/autofill_handler.h
@@ -51,6 +51,16 @@ virtual void OnFormParsed() = 0; }; + // Rich queries are enabled by feature flag iff this chrome instance is + // neither on the STABLE nor BETA release channel. + static bool IsRichQueryEnabled(version_info::Channel channel); + + // TODO(crbug.com/1151542): Move to anonymous namespace once + // AutofillManager::OnLoadedServerPredictions() moves to AutofillHandler. + static void LogAutofillTypePredictionsAvailable( + LogManager* log_manager, + const std::vector<FormStructure*>& forms); + ~AutofillHandler() override; // Invoked when the value of textfield is changed. @@ -166,7 +176,7 @@ FormStructure* ParseFormForTest(const FormData& form) { return ParseForm(form, nullptr); } -#endif +#endif // UNIT_TEST protected: using FormInteractionsUkmLoggerFactoryCallback = base::RepeatingCallback< @@ -216,8 +226,17 @@ // form_structures. virtual bool ShouldParseForms(const std::vector<FormData>& forms) = 0; - // Invoked when forms from OnFormsSeen() has been parsed to |form_structures|. - virtual void OnFormsParsed(const std::vector<const FormData*>& forms) = 0; + // Invoked before parsing the forms. + virtual void OnBeforeProcessParsedForms() = 0; + + // Invoked when the given |form| has been processed to the given + // |form_structure|. + virtual void OnFormProcessed(const FormData& form, + const FormStructure& form_structure) = 0; + // Invoked after all forms have been processed, |form_types| is a set of + // FormType found. + virtual void OnAfterProcessParsedForms( + const std::set<FormType>& form_types) = 0; // Returns the number of FormStructures with the given |form_signature| and // appends them to |form_structures|. Runs in linear time. @@ -245,11 +264,16 @@ return &form_structures_; } +#ifdef UNIT_TEST // Exposed for testing. void set_download_manager(AutofillDownloadManager* manager) { download_manager_.reset(manager); } + // Exposed for testing. + bool is_rich_query_enabled() const { return is_rich_query_enabled_; } +#endif // UNIT_TEST + private: // AutofillDownloadManager::Observer: void OnLoadedServerPredictions( @@ -259,6 +283,10 @@ AutofillDownloadManager::RequestType request_type, int http_error) override; + // Invoked when forms from OnFormsSeen() have been parsed to + // |form_structures|. + void OnFormsParsed(const std::vector<const FormData*>& forms); + // Provides driver-level context to the shared code of the component. Must // outlive this object. AutofillDriver* const driver_; @@ -280,6 +308,9 @@ std::unique_ptr<AutofillMetrics::FormInteractionsUkmLogger> form_interactions_ukm_logger_; + // Tracks whether or not rich query encoding is enabled for this client. + const bool is_rich_query_enabled_ = false; + // Will be not null only for |SaveCardBubbleViewsFullFormBrowserTest|. ObserverForTest* observer_for_testing_ = nullptr;
diff --git a/components/autofill/core/browser/autofill_handler_proxy.h b/components/autofill/core/browser/autofill_handler_proxy.h index 2a31eda..a849caa 100644 --- a/components/autofill/core/browser/autofill_handler_proxy.h +++ b/components/autofill/core/browser/autofill_handler_proxy.h
@@ -66,8 +66,13 @@ bool ShouldParseForms(const std::vector<FormData>& forms) override; - void OnFormsParsed( - const std::vector<const FormData*>& form_structures) override {} + void OnBeforeProcessParsedForms() override {} + + void OnFormProcessed(const FormData& form, + const FormStructure& form_structure) override {} + + void OnAfterProcessParsedForms( + const std::set<FormType>& form_types) override {} private: AutofillProvider* provider_;
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc index d6f8cc4..248fb1e 100644 --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc
@@ -175,14 +175,14 @@ void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder, ukm::SourceId source_id, - FormStructure* form_structure) { - if (form_structure->developer_engagement_metrics()) { + const FormStructure& form_structure) { + if (form_structure.developer_engagement_metrics()) { AutofillMetrics::LogDeveloperEngagementUkm( - ukm_recorder, source_id, form_structure->main_frame_origin().GetURL(), - form_structure->IsCompleteCreditCardForm(), - form_structure->GetFormTypes(), - form_structure->developer_engagement_metrics(), - form_structure->form_signature()); + ukm_recorder, source_id, form_structure.main_frame_origin().GetURL(), + form_structure.IsCompleteCreditCardForm(), + form_structure.GetFormTypes(), + form_structure.developer_engagement_metrics(), + form_structure.form_signature()); } } @@ -241,26 +241,6 @@ return false; } -void LogAutofillTypePredictionsAvailable( - LogManager* log_manager, - const std::vector<FormStructure*>& forms) { - if (VLOG_IS_ON(1)) { - VLOG(1) << "Parsed forms:"; - for (FormStructure* form : forms) - VLOG(1) << *form; - } - - if (!log_manager || !log_manager->IsLoggingActive()) - return; - - LogBuffer buffer; - for (FormStructure* form : forms) - buffer << *form; - - log_manager->Log() << LoggingScope::kParsing << LogMessage::kParsedForms - << std::move(buffer); -} - // Finds the first field in |form_structure| with |field.value|=|value|. AutofillField* FindFirstFieldWithValue(const FormStructure& form_structure, const base::string16& value) { @@ -1504,13 +1484,6 @@ return ::autofill::prefs::IsAutofillCreditCardEnabled(client_->GetPrefs()); } -// static -bool AutofillManager::IsRichQueryEnabled(version_info::Channel channel) { - return base::FeatureList::IsEnabled(features::kAutofillRichMetadataQueries) && - channel != version_info::Channel::STABLE && - channel != version_info::Channel::BETA; -} - const FormData& AutofillManager::last_query_form() const { return external_delegate_->query_form(); } @@ -1628,8 +1601,8 @@ app_locale_(app_locale), personal_data_(personal_data), field_filler_(app_locale, client->GetAddressNormalizer()), - autocomplete_history_manager_(autocomplete_history_manager->GetWeakPtr()), - is_rich_query_enabled_(IsRichQueryEnabled(client->GetChannel())) { + autocomplete_history_manager_( + autocomplete_history_manager->GetWeakPtr()) { DCHECK(driver); DCHECK(client_); // The factory callback must be set first because the logger is used to create @@ -2018,8 +1991,7 @@ return suggestions; } -void AutofillManager::OnFormsParsed(const std::vector<const FormData*>& forms) { - DCHECK(!forms.empty()); +void AutofillManager::OnBeforeProcessParsedForms() { has_parsed_forms_ = true; // Record the current sync state to be used for metrics on this page. @@ -2027,105 +1999,72 @@ // Setup the url for metrics that we will collect for this form. form_interactions_ukm_logger()->OnFormsParsed(client_->GetUkmSourceId()); +} - driver()->HandleParsedForms(forms); +void AutofillManager::OnFormProcessed(const FormData& form, + const FormStructure& form_structure) { + if (data_util::ContainsPhone(data_util::DetermineGroups(form_structure))) { + has_observed_phone_number_field_ = true; + } - std::vector<FormStructure*> non_queryable_forms; - std::vector<FormStructure*> queryable_forms; - std::set<FormType> form_types; - for (const FormData* form : forms) { - FormStructure* form_structure = - FindCachedFormByRendererId(form->unique_renderer_id); - if (!form_structure) { - NOTREACHED(); - continue; - } + // TODO(crbug.com/869482): avoid logging developer engagement multiple + // times for a given form if it or other forms on the page are dynamic. + LogDeveloperEngagementUkm(client_->GetUkmRecorder(), + client_->GetUkmSourceId(), form_structure); - if (data_util::ContainsPhone(data_util::DetermineGroups(*form_structure))) { - has_observed_phone_number_field_ = true; - } - - // TODO(crbug.com/869482): avoid logging developer engagement multiple - // times for a given form if it or other forms on the page are dynamic. - LogDeveloperEngagementUkm(client_->GetUkmRecorder(), - client_->GetUkmSourceId(), form_structure); - std::set<FormType> current_form_types = form_structure->GetFormTypes(); - form_types.insert(current_form_types.begin(), current_form_types.end()); - - // Configure the query encoding for this form and add it to the appropriate - // collection of forms: queryable vs non-queryable. - form_structure->set_is_rich_query_enabled(is_rich_query_enabled_); - if (form_structure->ShouldBeQueried()) - queryable_forms.push_back(form_structure); - else - non_queryable_forms.push_back(form_structure); - - // Log the type of form that was parsed. - bool card_form = false; - bool address_form = false; - for (const auto& field : *form_structure) { - if (field->Type().group() == CREDIT_CARD) { - card_form = true; - } else if (IsAddressForm(field->Type().group())) { - address_form = true; - } else if (field->Type().html_type() == HTML_TYPE_ONE_TIME_CODE) { - has_observed_one_time_code_field_ = true; - } - } - if (card_form) { - credit_card_form_event_logger_->OnDidParseForm(*form_structure); - } - if (address_form) { - address_form_event_logger_->OnDidParseForm(*form_structure); - } - - // If a form with the same name was previously filled, and there has not - // been a refill attempt on that form yet, start the process of triggering a - // refill. - if (ShouldTriggerRefill(*form_structure)) { - FillingContext* filling_context = GetFillingContext(*form_structure); - DCHECK(filling_context != nullptr); - - // If a timer for the refill was already running, it means the form - // changed again. Stop the timer and start it again. - if (filling_context->on_refill_timer.IsRunning()) - filling_context->on_refill_timer.AbandonAndStop(); - - // Start a new timer to trigger refill. - filling_context->on_refill_timer.Start( - FROM_HERE, - base::TimeDelta::FromMilliseconds(kWaitTimeForDynamicFormsMs), - base::BindRepeating(&AutofillManager::TriggerRefill, - weak_ptr_factory_.GetWeakPtr(), *form)); + // Log the type of form that was parsed. + bool card_form = false; + bool address_form = false; + for (const auto& field : form_structure) { + if (field->Type().group() == CREDIT_CARD) { + card_form = true; + } else if (IsAddressForm(field->Type().group())) { + address_form = true; + } else if (field->Type().html_type() == HTML_TYPE_ONE_TIME_CODE) { + has_observed_one_time_code_field_ = true; } } - if (!queryable_forms.empty() || !non_queryable_forms.empty()) { - AutofillMetrics::LogUserHappinessMetric( - AutofillMetrics::FORMS_LOADED, form_types, - client_->GetSecurityLevelForUmaHistograms(), - /*profile_form_bitmask=*/0); + if (card_form) { + credit_card_form_event_logger_->OnDidParseForm(form_structure); + } + if (address_form) { + address_form_event_logger_->OnDidParseForm(form_structure); + } + // If a form with the same name was previously filled, and there has not + // been a refill attempt on that form yet, start the process of triggering a + // refill. + if (ShouldTriggerRefill(form_structure)) { + FillingContext* filling_context = GetFillingContext(form_structure); + DCHECK(filling_context != nullptr); + + // If a timer for the refill was already running, it means the form + // changed again. Stop the timer and start it again. + if (filling_context->on_refill_timer.IsRunning()) + filling_context->on_refill_timer.AbandonAndStop(); + + // Start a new timer to trigger refill. + filling_context->on_refill_timer.Start( + FROM_HERE, + base::TimeDelta::FromMilliseconds(kWaitTimeForDynamicFormsMs), + base::BindRepeating(&AutofillManager::TriggerRefill, + weak_ptr_factory_.GetWeakPtr(), form)); + } +} + +void AutofillManager::OnAfterProcessParsedForms( + const std::set<FormType>& form_types) { + AutofillMetrics::LogUserHappinessMetric( + AutofillMetrics::FORMS_LOADED, form_types, + client_->GetSecurityLevelForUmaHistograms(), + /*profile_form_bitmask=*/0); #if defined(OS_IOS) - // Log this from same location as AutofillMetrics::FORMS_LOADED to ensure - // that KeyboardAccessoryButtonsIOS and UserHappiness UMA metrics will be - // directly comparable. - KeyboardAccessoryMetricsLogger::OnFormsLoaded(); + // Log this from same location as AutofillMetrics::FORMS_LOADED to ensure + // that KeyboardAccessoryButtonsIOS and UserHappiness UMA metrics will be + // directly comparable. + KeyboardAccessoryMetricsLogger::OnFormsLoaded(); #endif - } - - // Send the current type predictions to the renderer. For non-queryable forms - // this is all the information about them that will ever be available. The - // queryable forms will be updated once the field type query is complete. - driver()->SendAutofillTypePredictionsToRenderer(non_queryable_forms); - driver()->SendAutofillTypePredictionsToRenderer(queryable_forms); - LogAutofillTypePredictionsAvailable(log_manager_, non_queryable_forms); - LogAutofillTypePredictionsAvailable(log_manager_, queryable_forms); - - // Query the server if at least one of the forms was parsed. - if (!queryable_forms.empty() && download_manager()) { - download_manager()->StartQueryRequest(queryable_forms); - } } int AutofillManager::BackendIDToInt(const std::string& backend_id) const {
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h index 171413b..8d4f461 100644 --- a/components/autofill/core/browser/autofill_manager.h +++ b/components/autofill/core/browser/autofill_manager.h
@@ -244,10 +244,6 @@ // to be uploadable. Exposed for testing. bool ShouldUploadForm(const FormStructure& form); - // Rich queries are enabled by feature flag iff this chrome instance is - // neither on the STABLE nor BETA release channel. - static bool IsRichQueryEnabled(version_info::Channel channel); - // Returns the last form the autofill manager considered in this frame. virtual const FormData& last_query_form() const; @@ -358,10 +354,10 @@ const FormFieldData& field, const gfx::RectF& bounding_box) override; bool ShouldParseForms(const std::vector<FormData>& forms) override; - void OnFormsParsed(const std::vector<const FormData*>& forms) override; - - // Exposed for testing. - bool is_rich_query_enabled() const { return is_rich_query_enabled_; } + void OnBeforeProcessParsedForms() override; + void OnFormProcessed(const FormData& form, + const FormStructure& form_structure) override; + void OnAfterProcessParsedForms(const std::set<FormType>& form_types) override; // Exposed for testing. FormData* pending_form_data() { return pending_form_data_.get(); } @@ -707,9 +703,6 @@ std::map<base::string16, std::unique_ptr<FillingContext>> filling_context_by_unique_name_; - // Tracks whether or not rich query encoding is enabled for this client. - const bool is_rich_query_enabled_ = false; - // Used to record metrics. This should be set at the beginning of the // interaction and re-used throughout the context of this manager. AutofillSyncSigninState sync_state_ = AutofillSyncSigninState::kNumSyncStates;
diff --git a/components/autofill/core/browser/form_structure.h b/components/autofill/core/browser/form_structure.h index c67d92f..818c32166 100644 --- a/components/autofill/core/browser/form_structure.h +++ b/components/autofill/core/browser/form_structure.h
@@ -360,7 +360,9 @@ // - Name for Autofill of first field base::string16 GetIdentifierForRefill() const; - int developer_engagement_metrics() { return developer_engagement_metrics_; } + int developer_engagement_metrics() const { + return developer_engagement_metrics_; + } void set_randomized_encoder(std::unique_ptr<RandomizedEncoder> encoder);
diff --git a/components/blocked_content/popup_tracker.cc b/components/blocked_content/popup_tracker.cc index f949085..3d7b562b 100644 --- a/components/blocked_content/popup_tracker.cc +++ b/components/blocked_content/popup_tracker.cc
@@ -172,7 +172,8 @@ } void PopupTracker::OnSubresourceFilterGoingAway() { - scoped_observation_.RemoveObservation(); + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); } WEB_CONTENTS_USER_DATA_KEY_IMPL(PopupTracker)
diff --git a/components/blocked_content/safe_browsing_triggered_popup_blocker.cc b/components/blocked_content/safe_browsing_triggered_popup_blocker.cc index 3f77fa8..ac5e7fd72 100644 --- a/components/blocked_content/safe_browsing_triggered_popup_blocker.cc +++ b/components/blocked_content/safe_browsing_triggered_popup_blocker.cc
@@ -172,7 +172,8 @@ } void SafeBrowsingTriggeredPopupBlocker::OnSubresourceFilterGoingAway() { - scoped_observation_.RemoveObservation(); + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); } bool SafeBrowsingTriggeredPopupBlocker::IsEnabled(
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc index c932b27..c0c2a4e 100644 --- a/components/content_settings/renderer/content_settings_agent_impl.cc +++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -446,10 +446,6 @@ return false; } -void ContentSettingsAgentImpl::DidNotAllowPlugins() { - DidBlockContentType(ContentSettingsType::PLUGINS); -} - void ContentSettingsAgentImpl::DidNotAllowScript() { DidBlockContentType(ContentSettingsType::JAVASCRIPT); }
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h index 868b7e6..f5f55e5 100644 --- a/components/content_settings/renderer/content_settings_agent_impl.h +++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -92,7 +92,6 @@ bool AllowReadFromClipboard(bool default_value) override; bool AllowWriteToClipboard(bool default_value) override; bool AllowMutationEvents(bool default_value) override; - void DidNotAllowPlugins() override; void DidNotAllowScript() override; bool AllowRunningInsecureContent(bool allowed_per_settings, const blink::WebURL& url) override;
diff --git a/components/download/internal/common/BUILD.gn b/components/download/internal/common/BUILD.gn index 37672de..3745ba3a 100644 --- a/components/download/internal/common/BUILD.gn +++ b/components/download/internal/common/BUILD.gn
@@ -31,6 +31,7 @@ "download_interrupt_reasons_utils.cc", "download_item_impl.cc", "download_item_impl_delegate.cc", + "download_item_rename_handler.cc", "download_job.cc", "download_job_factory.cc", "download_job_impl.cc",
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc index dfe701e..462babb0 100644 --- a/components/download/internal/common/download_item_impl.cc +++ b/components/download/internal/common/download_item_impl.cc
@@ -984,6 +984,10 @@ return download_file_.get(); } +DownloadItemRenameHandler* DownloadItemImpl::GetRenameHandler() { + return rename_handler_.get(); +} + bool DownloadItemImpl::IsDangerous() const { return danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE || danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_URL || @@ -1932,11 +1936,20 @@ DCHECK(!IsDangerous()); DCHECK(download_file_); + // Unilaterally rename; even if it already has the right name, - // we need theannotation. + // we need the annotation. DownloadFile::RenameCompletionCallback callback = base::BindOnce(&DownloadItemImpl::OnDownloadRenamedToFinalName, - weak_ptr_factory_.GetWeakPtr()); + weak_ptr_factory_.GetWeakPtr()); + + // If an alternate rename handler is specified, use it instead. + rename_handler_ = delegate_->GetRenameHandlerForDownload(this); + if (rename_handler_) { + rename_handler_->Start(std::move(callback)); + return; + } + #if defined(OS_ANDROID) if (GetTargetFilePath().IsContentUri()) { GetDownloadTaskRunner()->PostTask( @@ -1953,6 +1966,7 @@ auto quarantine_callback = delegate_->GetQuarantineConnectionCallback(); if (quarantine_callback) quarantine_callback.Run(quarantine.InitWithNewPipeAndPassReceiver()); + GetDownloadTaskRunner()->PostTask( FROM_HERE, base::BindOnce(&DownloadFile::RenameAndAnnotate,
diff --git a/components/download/internal/common/download_item_impl_delegate.cc b/components/download/internal/common/download_item_impl_delegate.cc index 0f5ca1f..b432a41 100644 --- a/components/download/internal/common/download_item_impl_delegate.cc +++ b/components/download/internal/common/download_item_impl_delegate.cc
@@ -111,4 +111,10 @@ return base::NullCallback(); } +std::unique_ptr<DownloadItemRenameHandler> +DownloadItemImplDelegate::GetRenameHandlerForDownload( + DownloadItemImpl* download_item) { + return nullptr; +} + } // namespace download
diff --git a/components/download/internal/common/download_item_impl_unittest.cc b/components/download/internal/common/download_item_impl_unittest.cc index 3f30ed1..503e0ac 100644 --- a/components/download/internal/common/download_item_impl_unittest.cc +++ b/components/download/internal/common/download_item_impl_unittest.cc
@@ -30,6 +30,7 @@ #include "components/download/public/common/download_file_factory.h" #include "components/download/public/common/download_interrupt_reasons.h" #include "components/download/public/common/download_item_impl_delegate.h" +#include "components/download/public/common/download_item_rename_handler.h" #include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/mock_download_file.h" #include "crypto/secure_hash.h" @@ -37,6 +38,8 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using ::testing::_; +using ::testing::ByMove; using ::testing::DoAll; using ::testing::Invoke; using ::testing::InvokeWithoutArgs; @@ -47,7 +50,6 @@ using ::testing::SaveArg; using ::testing::StrictMock; using ::testing::WithArg; -using ::testing::_; const int kDownloadChunkSize = 1000; const int kDownloadSpeed = 1000; @@ -65,6 +67,18 @@ return static_cast<base::HistogramBase::Sample>(t); } +class MockDownloadItemRenameHandler : public DownloadItemRenameHandler { + public: + MockDownloadItemRenameHandler() : DownloadItemRenameHandler(nullptr) {} + ~MockDownloadItemRenameHandler() override = default; + + MOCK_METHOD1(Start, void(Callback)); + + void VerifyAndClearExpectations() { + ::testing::Mock::VerifyAndClearExpectations(this); + } +}; + class MockDelegate : public DownloadItemImplDelegate { public: MockDelegate() { SetDefaultExpectations(); } @@ -103,6 +117,8 @@ MOCK_METHOD1(DownloadRemoved, void(DownloadItemImpl*)); MOCK_CONST_METHOD0(IsOffTheRecord, bool()); MOCK_METHOD(bool, IsActiveNetworkMetered, (), (const override)); + MOCK_METHOD1(GetRenameHandlerForDownload, + std::unique_ptr<DownloadItemRenameHandler>(DownloadItemImpl*)); void VerifyAndClearExpectations() { ::testing::Mock::VerifyAndClearExpectations(this); @@ -462,6 +478,8 @@ TestDownloadItemObserver observer(item); MockDownloadFile* download_file = DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); DoDestinationComplete(item, download_file); ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); @@ -540,6 +558,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(_, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(_)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _, _)); unsafeurl_item->ValidateDangerousDownload(); EXPECT_TRUE(unsafeurl_observer.CheckAndResetDownloadUpdated()); @@ -558,6 +578,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(_, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(_)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _, _)); unsafefile_item->ValidateDangerousDownload(); EXPECT_TRUE(unsafefile_observer.CheckAndResetDownloadUpdated()); @@ -798,6 +820,8 @@ // Fail final rename with unresumable reason. EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); auto task_runner = base::ThreadTaskRunnerHandle::Get(); EXPECT_CALL( *download_file, @@ -1336,6 +1360,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _, _, _, _, _)) .WillOnce(WithArg<5>([&task_runner, &final_path]( DownloadFile::RenameCompletionCallback cb) { @@ -1807,6 +1833,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); EXPECT_CALL(*download_file, FullPath()) .WillOnce(ReturnRefOfCopy(base::FilePath())); EXPECT_CALL(*download_file, Detach()); @@ -1837,6 +1865,8 @@ // Complete Temporary EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); auto task_runner = base::ThreadTaskRunnerHandle::Get(); EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _, _)) .WillOnce( @@ -1902,6 +1932,8 @@ // Drive the delegate interaction. EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); item->DestinationObserverAsWeakPtr()->DestinationCompleted( 0, std::unique_ptr<crypto::SecureHash>()); EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); @@ -1941,6 +1973,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(DoAll(MoveArg<1>(&delegate_callback), Return(false))) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); item->DestinationObserverAsWeakPtr()->DestinationCompleted( 0, std::unique_ptr<crypto::SecureHash>()); ASSERT_TRUE(delegate_callback); @@ -1984,6 +2018,8 @@ EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(DoAll(MoveArg<1>(&delegate_callback), Return(false))) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); item->DestinationObserverAsWeakPtr()->DestinationCompleted( 0, std::unique_ptr<crypto::SecureHash>()); ASSERT_TRUE(delegate_callback); @@ -2037,6 +2073,8 @@ .WillOnce(DoAll(MoveArg<1>(&delegate_callback), Return(false))) .WillOnce(DoAll(MoveArg<1>(&delegate_callback), Return(false))) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); item->DestinationObserverAsWeakPtr()->DestinationCompleted( 0, std::unique_ptr<crypto::SecureHash>()); ASSERT_TRUE(delegate_callback); @@ -2179,6 +2217,8 @@ })); EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); EXPECT_CALL(*download_file, FullPath()) .WillOnce(ReturnRefOfCopy(base::FilePath())); EXPECT_CALL(*download_file, Detach()); @@ -2206,6 +2246,8 @@ EXPECT_CALL(*download_file, FullPath()) .WillOnce(ReturnRefOfCopy(base::FilePath())); EXPECT_CALL(*download_file, Detach()); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::unique_ptr<DownloadItemRenameHandler>()))); item->DestinationObserverAsWeakPtr()->DestinationCompleted( 0, std::unique_ptr<crypto::SecureHash>()); task_environment_.RunUntilIdle(); @@ -2757,5 +2799,41 @@ EXPECT_FALSE(item->GetDownloadSchedule().has_value()); } +TEST_F(DownloadItemTest, ExternalRenameHandler) { + // Start a download. + DownloadItemImpl* item = CreateDownloadItem(); + MockDownloadFile* download_file = + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); + EXPECT_CALL(*download_file, Detach()); + + // Create a rename handler and make sure the delegate returns it. + DownloadItemRenameHandler::Callback callback; + auto rename_handler = std::make_unique<MockDownloadItemRenameHandler>(); + MockDownloadItemRenameHandler* rename_handler_ptr = rename_handler.get(); + + EXPECT_CALL(*rename_handler, Start(_)).WillOnce(MoveArg<0>(&callback)); + EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload_(item, _)) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_delegate(), GetRenameHandlerForDownload(item)) + .WillOnce(Return(ByMove(std::move(rename_handler)))); + + // The standard rename should not be called. + EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _, _)).Times(0); + + item->DestinationObserverAsWeakPtr()->DestinationCompleted( + 0, std::unique_ptr<crypto::SecureHash>()); + EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); + ASSERT_FALSE(callback.is_null()); + + // Invoke the rename callback. This should complete the download. + std::move(callback).Run(DOWNLOAD_INTERRUPT_REASON_NONE, + base::FilePath(kDummyTargetPath)); + task_environment_.RunUntilIdle(); + EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); + + ASSERT_NE(nullptr, item->GetRenameHandler()); + rename_handler_ptr->VerifyAndClearExpectations(); +} + } // namespace } // namespace download
diff --git a/components/download/internal/common/download_item_rename_handler.cc b/components/download/internal/common/download_item_rename_handler.cc new file mode 100644 index 0000000..d241df8 --- /dev/null +++ b/components/download/internal/common/download_item_rename_handler.cc
@@ -0,0 +1,26 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/download/public/common/download_item_rename_handler.h" + +#include "components/download/public/common/download_interrupt_reasons.h" +#include "components/download/public/common/download_item.h" + +namespace download { + +DownloadItemRenameHandler::DownloadItemRenameHandler( + DownloadItem* download_item) {} + +DownloadItemRenameHandler::~DownloadItemRenameHandler() = default; + +void DownloadItemRenameHandler::Start(Callback callback) { + std::move(callback).Run(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, + base::FilePath()); +} + +void DownloadItemRenameHandler::OpenDownload() {} + +void DownloadItemRenameHandler::ShowDownloadInContext() {} + +} // namespace download
diff --git a/components/download/public/common/BUILD.gn b/components/download/public/common/BUILD.gn index 4e1469be..a177a54 100644 --- a/components/download/public/common/BUILD.gn +++ b/components/download/public/common/BUILD.gn
@@ -37,6 +37,7 @@ "download_item_factory.h", "download_item_impl.h", "download_item_impl_delegate.h", + "download_item_rename_handler.h", "download_job.h", "download_job_factory.h", "download_path_reservation_tracker.h",
diff --git a/components/download/public/common/download_item.h b/components/download/public/common/download_item.h index ac980571..070ea776 100644 --- a/components/download/public/common/download_item.h +++ b/components/download/public/common/download_item.h
@@ -51,6 +51,7 @@ namespace download { class DownloadFile; +class DownloadItemRenameHandler; // One DownloadItem per download. This is the model class that stores all the // state for a download. @@ -432,6 +433,12 @@ // Gets the pointer to the DownloadFile owned by this object. virtual DownloadFile* GetDownloadFile() = 0; + // Gets a handler to perform the rename for a download item. If no special + // rename handling is required, this function returns null and the default + // rename handling is performed. The caller does not own the returned + // pointer. + virtual DownloadItemRenameHandler* GetRenameHandler() = 0; + // Progress State accessors ----------------------------------------------- // Simple calculation of the amount of time remaining to completion. Fills
diff --git a/components/download/public/common/download_item_impl.h b/components/download/public/common/download_item_impl.h index 6417c75..2868b25 100644 --- a/components/download/public/common/download_item_impl.h +++ b/components/download/public/common/download_item_impl.h
@@ -274,6 +274,7 @@ bool GetFileExternallyRemoved() const override; void DeleteFile(base::OnceCallback<void(bool)> callback) override; DownloadFile* GetDownloadFile() override; + DownloadItemRenameHandler* GetRenameHandler() override; bool IsDangerous() const override; bool IsMixedContent() const override; DownloadDangerType GetDangerType() const override; @@ -862,6 +863,9 @@ // Defines when to start the download. Used by download later feature. base::Optional<DownloadSchedule> download_schedule_; + // A handler for renaming and helping with display the item. + std::unique_ptr<DownloadItemRenameHandler> rename_handler_; + THREAD_CHECKER(thread_checker_); base::WeakPtrFactory<DownloadItemImpl> weak_ptr_factory_{this};
diff --git a/components/download/public/common/download_item_impl_delegate.h b/components/download/public/common/download_item_impl_delegate.h index e4608e9..538dfac4 100644 --- a/components/download/public/common/download_item_impl_delegate.h +++ b/components/download/public/common/download_item_impl_delegate.h
@@ -7,12 +7,15 @@ #include <stdint.h> +#include <memory> + #include "base/callback.h" #include "base/files/file_path.h" #include "base/macros.h" #include "base/optional.h" #include "components/download/public/common/download_export.h" #include "components/download/public/common/download_item.h" +#include "components/download/public/common/download_item_rename_handler.h" #include "components/download/public/common/download_schedule.h" #include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/quarantine_connection.h" @@ -124,6 +127,12 @@ // Gets a callback that can connect to the Quarantine Service if available. virtual QuarantineConnectionCallback GetQuarantineConnectionCallback(); + // Gets a handler to perform the rename for a download item. If no special + // rename handling is required, this function returns null and the default + // rename handling is performed. + virtual std::unique_ptr<DownloadItemRenameHandler> + GetRenameHandlerForDownload(DownloadItemImpl* download_item); + private: // For "Outlives attached DownloadItemImpl" invariant assertion. int count_;
diff --git a/components/download/public/common/download_item_rename_handler.h b/components/download/public/common/download_item_rename_handler.h new file mode 100644 index 0000000..a55e7febd --- /dev/null +++ b/components/download/public/common/download_item_rename_handler.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 COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_ITEM_RENAME_HANDLER_H_ +#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_ITEM_RENAME_HANDLER_H_ + +#include "base/callback.h" +#include "components/download/public/common/download_interrupt_reasons.h" + +namespace base { +class FilePath; +} + +namespace download { + +class DownloadItem; + +// Interface implemented by an object that overrides the default method +// of renaming a file to its final name once the download completes. +// DownloadItemImpl attempts to retrieve the object from its delegate, and +// if valid will call the Start() method instead of using +// DownloadFile::RenameAndAnnotate(). +class COMPONENTS_DOWNLOAD_EXPORT DownloadItemRenameHandler { + public: + using Callback = base::OnceCallback<void(DownloadInterruptReason reason, + const base::FilePath& path)>; + + explicit DownloadItemRenameHandler(DownloadItem* download_item); + virtual ~DownloadItemRenameHandler(); + + // Starts the process of renaming the file and invokes |callback| when + // done. + virtual void Start(Callback callback); + + // Opens the file associated with this download. + virtual void OpenDownload(); + + // Shows the download in the context of its container. + virtual void ShowDownloadInContext(); +}; + +} // namespace download + +#endif // COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_ITEM_RENAME_HANDLER_H_
diff --git a/components/download/public/common/mock_download_item.h b/components/download/public/common/mock_download_item.h index 0160d4d4..2ca3726 100644 --- a/components/download/public/common/mock_download_item.h +++ b/components/download/public/common/mock_download_item.h
@@ -99,6 +99,7 @@ } MOCK_METHOD1(DeleteFile_, void(base::OnceCallback<void(bool)>& cb)); MOCK_METHOD0(GetDownloadFile, DownloadFile*()); + MOCK_METHOD0(GetRenameHandler, DownloadItemRenameHandler*()); MOCK_CONST_METHOD0(IsDangerous, bool()); MOCK_CONST_METHOD0(IsMixedContent, bool()); MOCK_CONST_METHOD0(GetDangerType, DownloadDangerType());
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.cc b/components/embedder_support/android/metrics/android_metrics_service_client.cc index f77781a..1b108cbe6 100644 --- a/components/embedder_support/android/metrics/android_metrics_service_client.cc +++ b/components/embedder_support/android/metrics/android_metrics_service_client.cc
@@ -248,6 +248,16 @@ base::BindRepeating(&LoadClientInfo)); init_finished_ = true; + + // Create the MetricsService immediately so that other code can make use of + // it. Chrome always creates the MetricsService as well. + metrics_service_ = std::make_unique<MetricsService>( + metrics_state_manager_.get(), this, pref_service_); + + // Registration of providers has to wait until consent is determined. To + // do otherwise means the providers would always be configured with reporting + // disabled (because when this is called in production consent hasn't been + // determined). If consent has not been determined, this does nothing. MaybeStartMetrics(); } @@ -260,8 +270,7 @@ bool user_consent_or_flag = user_consent_ || IsMetricsReportingForceEnabled(); if (IsConsentDetermined()) { if (app_consent_ && user_consent_or_flag) { - metrics_service_ = std::make_unique<MetricsService>( - metrics_state_manager_.get(), this, pref_service_); + did_start_metrics_ = true; // Make GetSampleBucketValue() work properly. metrics_state_manager_->ForceClientIdCreation(); is_client_id_forced_ = true; @@ -309,7 +318,7 @@ std::make_unique<metrics::GPUMetricsProvider>()); RegisterAdditionalMetricsProviders(metrics_service_.get()); - // The file metrics provider makes IO. + // The file metrics provider performs IO. base::ScopedAllowBlocking allow_io; metrics_service_->InitializeMetricsRecordingState(); } @@ -419,10 +428,14 @@ (EnabledStateProvider::IsReportingEnabled() && IsInSample()); } +MetricsService* AndroidMetricsServiceClient::GetMetricsServiceIfStarted() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return did_start_metrics_ ? metrics_service_.get() : nullptr; +} + MetricsService* AndroidMetricsServiceClient::GetMetricsService() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // This will be null if initialization hasn't finished, or if metrics - // collection is disabled. + // This will be null if initialization hasn't finished. return metrics_service_.get(); }
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.h b/components/embedder_support/android/metrics/android_metrics_service_client.h index 209ab1f..c4e2a8a 100644 --- a/components/embedder_support/android/metrics/android_metrics_service_client.h +++ b/components/embedder_support/android/metrics/android_metrics_service_client.h
@@ -87,6 +87,9 @@ // the client ID (generating a new ID if there was none). If this client is in // the sample, it then calls MetricsService::Start(). If consent was not // granted, MaybeStartMetrics() instead clears the client ID, if any. +// +// To match chrome on other platforms (including android), the MetricsService is +// always created. class AndroidMetricsServiceClient : public MetricsServiceClient, public EnabledStateProvider, public content::NotificationObserver { @@ -125,6 +128,10 @@ bool IsConsentGiven() const override; bool IsReportingEnabled() const override; + // Returns the MetricService only if it has been started (which means consent + // was given). + MetricsService* GetMetricsServiceIfStarted(); + // MetricsServiceClient MetricsService* GetMetricsService() override; ukm::UkmService* GetUkmService() override; @@ -247,6 +254,7 @@ bool app_consent_ = false; bool is_client_id_forced_ = false; bool fast_startup_for_testing_ = false; + bool did_start_metrics_ = false; // When non-zero, this overrides the default value in // GetStandardUploadInterval().
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc b/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc index 18bc4099..40f1a81 100644 --- a/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc +++ b/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc
@@ -427,4 +427,24 @@ EXPECT_TRUE(base::PathExists(upload_dir)); } +TEST_F(AndroidMetricsServiceClientTest, + MetricsServiceCreatedFromInitializeWithNoConsent) { + auto prefs = CreateTestPrefs(); + auto client = std::make_unique<TestClient>(); + client->Initialize(prefs.get()); + EXPECT_FALSE(client->IsReportingEnabled()); + EXPECT_TRUE(client->GetMetricsService()); +} + +TEST_F(AndroidMetricsServiceClientTest, GetMetricsServiceIfStarted) { + auto prefs = CreateTestPrefs(); + auto client = std::make_unique<TestClient>(); + client->SetInSample(true); + client->Initialize(prefs.get()); + EXPECT_EQ(nullptr, client->GetMetricsServiceIfStarted()); + client->SetHaveMetricsConsent(/* user_consent= */ true, + /* app_consent= */ true); + EXPECT_TRUE(client->GetMetricsServiceIfStarted()); +} + } // namespace metrics
diff --git a/components/handoff/handoff_manager.h b/components/handoff/handoff_manager.h index da669945..5457e67 100644 --- a/components/handoff/handoff_manager.h +++ b/components/handoff/handoff_manager.h
@@ -31,7 +31,7 @@ // The active URL is defined as the URL of the most recently accessed tab. This // method should be called any time the active URL might have changed. This // method is idempotent. -- (void)updateActiveURL:(const GURL&)url API_AVAILABLE(macos(10.10)); +- (void)updateActiveURL:(const GURL&)url; @end
diff --git a/components/history/core/browser/browsing_history_service.cc b/components/history/core/browser/browsing_history_service.cc index a3d65d9..a76ae0d 100644 --- a/components/history/core/browser/browsing_history_service.cc +++ b/components/history/core/browser/browsing_history_service.cc
@@ -203,7 +203,8 @@ if (web_history) { DCHECK(!web_history_service_observation_.IsObserving()); web_history_service_observation_.Observe(web_history); - sync_service_observation_.RemoveObservation(); + DCHECK(sync_service_observation_.IsObserving()); + sync_service_observation_.Reset(); } }
diff --git a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc index 9e3b7d7..7374b99 100644 --- a/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc +++ b/components/history/core/browser/sync/typed_url_sync_bridge_unittest.cc
@@ -313,8 +313,7 @@ mock_processor_.CreateForwardingProcessor()); typed_url_sync_bridge_ = bridge.get(); typed_url_sync_bridge_->Init(); - if (typed_url_sync_bridge_->history_backend_observation_.IsObserving()) - typed_url_sync_bridge_->history_backend_observation_.RemoveObservation(); + typed_url_sync_bridge_->history_backend_observation_.Reset(); fake_history_backend_->SetTypedURLSyncBridgeForTest(std::move(bridge)); } @@ -412,9 +411,7 @@ bridge()->history_backend_observation_.Observe(fake_history_backend_.get()); } - void RemoveObserver() { - bridge()->history_backend_observation_.RemoveObservation(); - } + void RemoveObserver() { bridge()->history_backend_observation_.Reset(); } // Fills |specifics| with the sync data for |url| and |visits|. static bool WriteToTypedUrlSpecifics(const URLRow& url,
diff --git a/components/history/core/browser/top_sites_impl.cc b/components/history/core/browser/top_sites_impl.cc index 1c47b727..8d27ae60 100644 --- a/components/history/core/browser/top_sites_impl.cc +++ b/components/history/core/browser/top_sites_impl.cc
@@ -214,8 +214,7 @@ void TopSitesImpl::ShutdownOnUIThread() { history_service_ = nullptr; - if (history_service_observation_.IsObserving()) - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); // Cancel all requests so that the service doesn't callback to us after we've // invoked Shutdown (this could happen if we have a pending request and // Shutdown is invoked).
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc index 6ad944c..2855d94 100644 --- a/components/metrics/metrics_service.cc +++ b/components/metrics/metrics_service.cc
@@ -393,6 +393,7 @@ #if defined(OS_ANDROID) || defined(OS_IOS) void MetricsService::OnAppEnterBackground(bool keep_recording_in_background) { + is_in_foreground_ = false; if (!keep_recording_in_background) { rotation_scheduler_->Stop(); reporting_service_.Stop(); @@ -419,6 +420,7 @@ } void MetricsService::OnAppEnterForeground(bool force_open_new_log) { + is_in_foreground_ = true; state_manager_->clean_exit_beacon()->WriteBeaconValue(false); StartSchedulerIfNecessary();
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h index ac02374f..596c5f1 100644 --- a/components/metrics/metrics_service.h +++ b/components/metrics/metrics_service.h
@@ -186,6 +186,10 @@ return &delegating_provider_; } +#if defined(OS_ANDROID) || defined(OS_IOS) + bool IsInForegroundForTesting() const { return is_in_foreground_; } +#endif + protected: // Sets the persistent system profile. Virtual for tests. virtual void SetPersistentSystemProfile(const std::string& serialized_proto, @@ -398,6 +402,12 @@ // Indicates if loading of independent metrics is currently active. bool independent_loader_active_ = false; +#if defined(OS_ANDROID) || defined(OS_IOS) + // Indicates whether OnAppEnterForeground() (true) or OnAppEnterBackground + // (false) was called. + bool is_in_foreground_ = false; +#endif + // Redundant marker to check that we completed our shutdown, and set the // exited-cleanly bit in the prefs. static ShutdownCleanliness clean_shutdown_status_;
diff --git a/components/ntp_snippets/content_suggestions_service.cc b/components/ntp_snippets/content_suggestions_service.cc index aff4032..4cf9417b 100644 --- a/components/ntp_snippets/content_suggestions_service.cc +++ b/components/ntp_snippets/content_suggestions_service.cc
@@ -551,7 +551,7 @@ void ContentSuggestionsService::HistoryServiceBeingDeleted( history::HistoryService* history_service) { DCHECK(history_service_observation_.IsObservingSource(history_service)); - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); } bool ContentSuggestionsService::TryRegisterProviderForCategory(
diff --git a/components/ntp_snippets/reading_list/reading_list_suggestions_provider.cc b/components/ntp_snippets/reading_list/reading_list_suggestions_provider.cc index 40408cdd..a9785cf 100644 --- a/components/ntp_snippets/reading_list/reading_list_suggestions_provider.cc +++ b/components/ntp_snippets/reading_list/reading_list_suggestions_provider.cc
@@ -161,7 +161,7 @@ const ReadingListModel* model) { DCHECK(model == reading_list_model_); DCHECK(scoped_observation_.IsObservingSource(reading_list_model_)); - scoped_observation_.RemoveObservation(); + scoped_observation_.Reset(); reading_list_model_ = nullptr; }
diff --git a/components/ntp_tiles/custom_links_manager_impl.cc b/components/ntp_tiles/custom_links_manager_impl.cc index aa7c62d3..535dc2f3 100644 --- a/components/ntp_tiles/custom_links_manager_impl.cc +++ b/components/ntp_tiles/custom_links_manager_impl.cc
@@ -226,7 +226,8 @@ void CustomLinksManagerImpl::HistoryServiceBeingDeleted( history::HistoryService* history_service) { - history_service_observation_.RemoveObservation(); + DCHECK(history_service_observation_.IsObserving()); + history_service_observation_.Reset(); } void CustomLinksManagerImpl::OnPreferenceChanged() {
diff --git a/components/ntp_tiles/most_visited_sites.cc b/components/ntp_tiles/most_visited_sites.cc index 3729ecb..a0f3bd99 100644 --- a/components/ntp_tiles/most_visited_sites.cc +++ b/components/ntp_tiles/most_visited_sites.cc
@@ -947,7 +947,8 @@ } void MostVisitedSites::OnRepeatableQueriesServiceShuttingDown() { - repeatable_queries_observation_.RemoveObservation(); + DCHECK(repeatable_queries_observation_.IsObserving()); + repeatable_queries_observation_.Reset(); } bool MostVisitedSites::ShouldAddHomeTile() const {
diff --git a/components/omnibox/browser/shortcuts_backend.cc b/components/omnibox/browser/shortcuts_backend.cc index 0b84c20..3155a01a 100644 --- a/components/omnibox/browser/shortcuts_backend.cc +++ b/components/omnibox/browser/shortcuts_backend.cc
@@ -190,8 +190,7 @@ } void ShortcutsBackend::ShutdownOnUIThread() { - if (history_service_observation_.IsObserving()) - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); } void ShortcutsBackend::OnURLsDeleted(
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc index d82de1b69..3c0bae3 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -344,13 +344,14 @@ void MetricsRenderFrameObserver::SetAdResourceTracker( subresource_filter::AdResourceTracker* ad_resource_tracker) { // Remove all sources and set a new source for the observer. - if (scoped_ad_resource_observation_.IsObserving()) - scoped_ad_resource_observation_.RemoveObservation(); + scoped_ad_resource_observation_.Reset(); scoped_ad_resource_observation_.Observe(ad_resource_tracker); } void MetricsRenderFrameObserver::OnAdResourceTrackerGoingAway() { - scoped_ad_resource_observation_.RemoveObservation(); + DCHECK(scoped_ad_resource_observation_.IsObserving()); + + scoped_ad_resource_observation_.Reset(); } void MetricsRenderFrameObserver::OnAdResourceObserved(int request_id) {
diff --git a/components/paint_preview/renderer/BUILD.gn b/components/paint_preview/renderer/BUILD.gn index f88dd6f..c02e8eb 100644 --- a/components/paint_preview/renderer/BUILD.gn +++ b/components/paint_preview/renderer/BUILD.gn
@@ -4,52 +4,52 @@ import("//testing/test.gni") -if (!is_ios) { - static_library("renderer") { - sources = [ - "paint_preview_recorder_impl.cc", - "paint_preview_recorder_impl.h", - "paint_preview_recorder_utils.cc", - "paint_preview_recorder_utils.h", - ] +assert(!is_ios, "Paint Previews are not supported on iOS.") - deps = [ - "//base", - "//cc/paint", - "//content/public/renderer", - "//mojo/public/cpp/base", - "//third_party/blink/public:blink_headers", - "//third_party/blink/public/common", - ] +source_set("renderer") { + sources = [ + "paint_preview_recorder_impl.cc", + "paint_preview_recorder_impl.h", + "paint_preview_recorder_utils.cc", + "paint_preview_recorder_utils.h", + ] - public_deps = [ - "//components/paint_preview/common", - "//components/paint_preview/common/mojom", - ] - } + deps = [ + "//base", + "//cc/paint", + "//content/public/renderer", + "//mojo/public/cpp/base", + "//third_party/blink/public:blink_headers", + "//third_party/blink/public/common", + ] - source_set("unit_tests") { - testonly = true + public_deps = [ + "//components/paint_preview/common", + "//components/paint_preview/common/mojom", + ] +} - sources = [ "paint_preview_recorder_utils_unittest.cc" ] +source_set("unit_tests") { + testonly = true - deps = [ - ":renderer", - "//base", - "//base/test:test_support", - "//cc/paint", - "//components/paint_preview/common:test_utils", - "//testing/gmock", - "//testing/gtest", - ] - } + sources = [ "paint_preview_recorder_utils_unittest.cc" ] - test("paint_preview_renderer_unit_tests") { - deps = [ - ":unit_tests", - "//base", - "//base/test:test_support", - "//components/test:run_all_unittests", - ] - } + deps = [ + ":renderer", + "//base", + "//base/test:test_support", + "//cc/paint", + "//components/paint_preview/common:test_utils", + "//testing/gmock", + "//testing/gtest", + ] +} + +test("paint_preview_renderer_unit_tests") { + deps = [ + ":unit_tests", + "//base", + "//base/test:test_support", + "//components/test:run_all_unittests", + ] }
diff --git a/components/password_manager/core/browser/well_known_change_password_util.cc b/components/password_manager/core/browser/well_known_change_password_util.cc index 4aba555..8b873280 100644 --- a/components/password_manager/core/browser/well_known_change_password_util.cc +++ b/components/password_manager/core/browser/well_known_change_password_util.cc
@@ -5,10 +5,8 @@ #include "components/password_manager/core/browser/well_known_change_password_util.h" #include "base/check.h" -#include "base/feature_list.h" #include "base/logging.h" #include "base/strings/string_util.h" -#include "components/password_manager/core/common/password_manager_features.h" #include "url/gurl.h" namespace password_manager { @@ -34,8 +32,7 @@ GURL CreateChangePasswordUrl(const GURL& url) { DCHECK(url.is_valid()); GURL::Replacements replacements; - if (base::FeatureList::IsEnabled(features::kWellKnownChangePassword)) - replacements.SetPathStr(password_manager::kWellKnownChangePasswordPath); + replacements.SetPathStr(password_manager::kWellKnownChangePasswordPath); return url.GetOrigin().ReplaceComponents(replacements); }
diff --git a/components/password_manager/core/browser/well_known_change_password_util_unittest.cc b/components/password_manager/core/browser/well_known_change_password_util_unittest.cc index edbf1b6c..e0b3b578 100644 --- a/components/password_manager/core/browser/well_known_change_password_util_unittest.cc +++ b/components/password_manager/core/browser/well_known_change_password_util_unittest.cc
@@ -4,8 +4,6 @@ #include "components/password_manager/core/browser/well_known_change_password_util.h" -#include "base/test/scoped_feature_list.h" -#include "components/password_manager/core/common/password_manager_features.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" #include "url/origin.h" @@ -29,18 +27,7 @@ EXPECT_FALSE(IsWellKnownChangePasswordUrl(GURL("mailto:?subject=test"))); } -TEST(WellKnownChangePasswordUtilTest, CreateChangePasswordUrlWithoutFeature) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndDisableFeature(features::kWellKnownChangePassword); - - EXPECT_EQ((GURL("https://example.com/")), - CreateChangePasswordUrl(GURL("https://example.com/some-path"))); -} - -TEST(WellKnownChangePasswordUtilTest, CreateChangePasswordUrlWithFeature) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature(features::kWellKnownChangePassword); - +TEST(WellKnownChangePasswordUtilTest, CreateChangePasswordUrl) { EXPECT_EQ((GURL("https://example.com/.well-known/change-password")), CreateChangePasswordUrl(GURL("https://example.com/some-path"))); }
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index ff651f2a..7bb4dd0f 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -123,10 +123,6 @@ const base::Feature kUsernameFirstFlow = {"UsernameFirstFlow", base::FEATURE_DISABLED_BY_DEFAULT}; -// Enable support for .well-known/change-password URLs. -const base::Feature kWellKnownChangePassword = { - "WellKnownChangePassword", base::FEATURE_ENABLED_BY_DEFAULT}; - // Field trial identifier for password generation requirements. const char kGenerationRequirementsFieldTrial[] = "PasswordGenerationRequirements";
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index 2eac713..40c22c4 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -40,7 +40,6 @@ extern const base::Feature kTreatNewPasswordHeuristicsAsReliable; extern const base::Feature kUseOfHashAffiliationFetcher; extern const base::Feature kUsernameFirstFlow; -extern const base::Feature kWellKnownChangePassword; // Field trial and corresponding parameters. // To manually override this, start Chrome with the following parameters:
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java index c3de041..52754b4d 100644 --- a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java +++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
@@ -12,7 +12,6 @@ import org.chromium.base.LocaleUtils; import org.chromium.base.Log; -import org.chromium.components.autofill.EditableOption; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.page_info.CertificateChainHelper; import org.chromium.components.payments.BrowserPaymentRequest.Factory; @@ -159,7 +158,7 @@ void onCanMakePaymentReturned(); void onHasEnrolledInstrumentCalled(); void onHasEnrolledInstrumentReturned(); - void onAppListReady(@Nullable List<EditableOption> paymentApps, PaymentItem total); + void onAppListReady(@Nullable List<PaymentApp> paymentApps, PaymentItem total); void onNotSupportedError(); void onConnectionTerminated(); void onAbortCalled(); @@ -773,7 +772,11 @@ PaymentNotShownError ensureError = ensureHasSupportedPaymentMethods(); if (ensureError != null) return ensureError; - + // Send AppListReady signal when all apps are created and request.show() is called. + if (sNativeObserverForTest != null) { + sNativeObserverForTest.onAppListReady( + mBrowserPaymentRequest.getPaymentApps(), mSpec.getRawTotal()); + } boolean shouldSkip = shouldSkipAppSelector(); String showError = mBrowserPaymentRequest.showOrSkipAppSelector( mIsShowWaitingForUpdatedDetails, mSpec.getRawTotal(), shouldSkip);
diff --git a/components/performance_manager/BUILD.gn b/components/performance_manager/BUILD.gn index 083e79d..bb72bf68 100644 --- a/components/performance_manager/BUILD.gn +++ b/components/performance_manager/BUILD.gn
@@ -35,6 +35,8 @@ "execution_context_priority/execution_context_priority.cc", "execution_context_priority/execution_context_priority_decorator.cc", "execution_context_priority/execution_context_priority_decorator.h", + "execution_context_priority/frame_audible_voter.cc", + "execution_context_priority/frame_audible_voter.h", "execution_context_priority/frame_visibility_voter.cc", "execution_context_priority/frame_visibility_voter.h", "execution_context_priority/max_vote_aggregator.cc", @@ -232,6 +234,7 @@ "execution_context_priority/ad_frame_voter_unittest.cc", "execution_context_priority/boosting_vote_aggregator_unittest.cc", "execution_context_priority/execution_context_priority_unittest.cc", + "execution_context_priority/frame_audible_voter_unittest.cc", "execution_context_priority/frame_visibility_voter_unittest.cc", "execution_context_priority/max_vote_aggregator_unittest.cc", "execution_context_priority/override_vote_aggregator_unittest.cc",
diff --git a/components/performance_manager/execution_context_priority/boosting_vote_aggregator.cc b/components/performance_manager/execution_context_priority/boosting_vote_aggregator.cc index 2b1e69d..111e01d 100644 --- a/components/performance_manager/execution_context_priority/boosting_vote_aggregator.cc +++ b/components/performance_manager/execution_context_priority/boosting_vote_aggregator.cc
@@ -248,7 +248,7 @@ VotingChannel BoostingVoteAggregator::GetVotingChannel() { DCHECK(nodes_.empty()); - DCHECK_EQ(voting::kInvalidVoterId<Vote>, input_voter_id_); + DCHECK(!input_voter_id_); DCHECK_GT(1u, vote_consumer_default_impl_.voting_channels_issued()); auto channel = vote_consumer_default_impl_.BuildVotingChannel(); input_voter_id_ = channel.voter_id(); @@ -260,7 +260,7 @@ } bool BoostingVoteAggregator::IsSetup() const { - return input_voter_id_ != voting::kInvalidVoterId<Vote> && channel_.IsValid(); + return input_voter_id_ && channel_.IsValid(); } void BoostingVoteAggregator::SubmitBoostingVote(
diff --git a/components/performance_manager/execution_context_priority/boosting_vote_aggregator.h b/components/performance_manager/execution_context_priority/boosting_vote_aggregator.h index 4746eb9d..6e1e9313 100644 --- a/components/performance_manager/execution_context_priority/boosting_vote_aggregator.h +++ b/components/performance_manager/execution_context_priority/boosting_vote_aggregator.h
@@ -367,7 +367,7 @@ // Our input voter. We'll only accept votes from this voter otherwise we'll // DCHECK. - voting::VoterId<Vote> input_voter_id_ = voting::kInvalidVoterId<Vote>; + voting::VoterId<Vote> input_voter_id_; // Our channel for upstreaming our votes. VotingChannelWrapper channel_;
diff --git a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc index 52c7d98..6e13480 100644 --- a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc +++ b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc
@@ -41,6 +41,8 @@ // Set up voters. frame_visibility_voter_.SetVotingChannel( max_vote_aggregator_.GetVotingChannel()); + frame_audible_voter_.SetVotingChannel( + max_vote_aggregator_.GetVotingChannel()); } ExecutionContextPriorityDecorator::~ExecutionContextPriorityDecorator() = default; @@ -49,10 +51,12 @@ // Subscribe voters to the graph. graph->AddFrameNodeObserver(&ad_frame_voter_); graph->AddFrameNodeObserver(&frame_visibility_voter_); + graph->AddFrameNodeObserver(&frame_audible_voter_); } void ExecutionContextPriorityDecorator::OnTakenFromGraph(Graph* graph) { // Unsubscribe voters from the graph. + graph->RemoveFrameNodeObserver(&frame_audible_voter_); graph->RemoveFrameNodeObserver(&frame_visibility_voter_); graph->RemoveFrameNodeObserver(&ad_frame_voter_); }
diff --git a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h index e4208ae..5a6e9f0 100644 --- a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h +++ b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h
@@ -6,6 +6,7 @@ #define COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_EXECUTION_CONTEXT_PRIORITY_DECORATOR_H_ #include "components/performance_manager/execution_context_priority/ad_frame_voter.h" +#include "components/performance_manager/execution_context_priority/frame_audible_voter.h" #include "components/performance_manager/execution_context_priority/frame_visibility_voter.h" #include "components/performance_manager/execution_context_priority/max_vote_aggregator.h" #include "components/performance_manager/execution_context_priority/override_vote_aggregator.h" @@ -52,6 +53,9 @@ // Casts a USER_VISIBLE vote when a frame is visible. FrameVisibilityVoter frame_visibility_voter_; + + // Casts a USER_VISIBLE vote when a frame is audible. + FrameAudibleVoter frame_audible_voter_; }; } // namespace execution_context_priority
diff --git a/components/performance_manager/execution_context_priority/execution_context_priority_unittest.cc b/components/performance_manager/execution_context_priority/execution_context_priority_unittest.cc index 8de808cb..890cb29 100644 --- a/components/performance_manager/execution_context_priority/execution_context_priority_unittest.cc +++ b/components/performance_manager/execution_context_priority/execution_context_priority_unittest.cc
@@ -129,7 +129,7 @@ voter.SetVotingChannel(consumer.voting_channel_factory_.BuildVotingChannel()); EXPECT_EQ(&consumer.voting_channel_factory_, voter.voting_channel_.factory_for_testing()); - EXPECT_NE(voting::kInvalidVoterId<Vote>, voter.voting_channel_.voter_id()); + EXPECT_TRUE(voter.voting_channel_.voter_id()); EXPECT_TRUE(voter.voting_channel_.IsValid()); voter.EmitVote(kDummyExecutionContext1, base::TaskPriority::LOWEST);
diff --git a/components/performance_manager/execution_context_priority/frame_audible_voter.cc b/components/performance_manager/execution_context_priority/frame_audible_voter.cc new file mode 100644 index 0000000..3de5f406f --- /dev/null +++ b/components/performance_manager/execution_context_priority/frame_audible_voter.cc
@@ -0,0 +1,59 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/performance_manager/execution_context_priority/frame_audible_voter.h" + +#include <utility> + +#include "components/performance_manager/public/execution_context/execution_context_registry.h" + +namespace performance_manager { +namespace execution_context_priority { + +namespace { + +const execution_context::ExecutionContext* GetExecutionContext( + const FrameNode* frame_node) { + return execution_context::ExecutionContextRegistry::GetFromGraph( + frame_node->GetGraph()) + ->GetExecutionContextForFrameNode(frame_node); +} + +// Returns a vote with the appropriate priority depending on if the frame is +// audible. +Vote GetVote(bool is_audible) { + base::TaskPriority priority = is_audible ? base::TaskPriority::USER_BLOCKING + : base::TaskPriority::LOWEST; + return Vote(priority, FrameAudibleVoter::kFrameAudibleReason); +} + +} // namespace + +// static +const char FrameAudibleVoter::kFrameAudibleReason[] = "Frame audible."; + +FrameAudibleVoter::FrameAudibleVoter() = default; + +FrameAudibleVoter::~FrameAudibleVoter() = default; + +void FrameAudibleVoter::SetVotingChannel(VotingChannel voting_channel) { + voting_channel_.SetVotingChannel(std::move(voting_channel)); +} + +void FrameAudibleVoter::OnFrameNodeAdded(const FrameNode* frame_node) { + const Vote vote = GetVote(frame_node->IsAudible()); + voting_channel_.SubmitVote(GetExecutionContext(frame_node), vote); +} + +void FrameAudibleVoter::OnBeforeFrameNodeRemoved(const FrameNode* frame_node) { + voting_channel_.InvalidateVote(GetExecutionContext(frame_node)); +} + +void FrameAudibleVoter::OnIsAudibleChanged(const FrameNode* frame_node) { + const Vote new_vote = GetVote(frame_node->IsAudible()); + voting_channel_.ChangeVote(GetExecutionContext(frame_node), new_vote); +} + +} // namespace execution_context_priority +} // namespace performance_manager
diff --git a/components/performance_manager/execution_context_priority/frame_audible_voter.h b/components/performance_manager/execution_context_priority/frame_audible_voter.h new file mode 100644 index 0000000..6ac3fc2 --- /dev/null +++ b/components/performance_manager/execution_context_priority/frame_audible_voter.h
@@ -0,0 +1,41 @@ +// 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 COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_AUDIBLE_VOTER_H_ +#define COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_AUDIBLE_VOTER_H_ + +#include "components/performance_manager/public/execution_context_priority/execution_context_priority.h" +#include "components/performance_manager/public/graph/frame_node.h" + +namespace performance_manager { +namespace execution_context_priority { + +// This voter casts a TaskPriority::USER_VISIBLE vote to all audible frames, and +// a TaskPriority::LOWEST vote to non-audible frames. +class FrameAudibleVoter : public FrameNode::ObserverDefaultImpl { + public: + static const char kFrameAudibleReason[]; + + FrameAudibleVoter(); + ~FrameAudibleVoter() override; + + FrameAudibleVoter(const FrameAudibleVoter&) = delete; + FrameAudibleVoter& operator=(const FrameAudibleVoter&) = delete; + + // Sets the voting channel where the votes will be cast. + void SetVotingChannel(VotingChannel voting_channel); + + // FrameNodeObserver: + void OnFrameNodeAdded(const FrameNode* frame_node) override; + void OnBeforeFrameNodeRemoved(const FrameNode* frame_node) override; + void OnIsAudibleChanged(const FrameNode* frame_node) override; + + private: + VotingChannelWrapper voting_channel_; +}; + +} // namespace execution_context_priority +} // namespace performance_manager + +#endif // COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_AUDIBLE_VOTER_H_
diff --git a/components/performance_manager/execution_context_priority/frame_audible_voter_unittest.cc b/components/performance_manager/execution_context_priority/frame_audible_voter_unittest.cc new file mode 100644 index 0000000..11efa25 --- /dev/null +++ b/components/performance_manager/execution_context_priority/frame_audible_voter_unittest.cc
@@ -0,0 +1,118 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/performance_manager/execution_context_priority/frame_audible_voter.h" + +#include "components/performance_manager/execution_context/execution_context_registry_impl.h" +#include "components/performance_manager/public/execution_context/execution_context.h" +#include "components/performance_manager/public/graph/graph.h" +#include "components/performance_manager/test_support/graph_test_harness.h" +#include "components/performance_manager/test_support/mock_graphs.h" +#include "components/performance_manager/test_support/voting.h" + +namespace performance_manager { +namespace execution_context_priority { + +using DummyVoteObserver = voting::test::DummyVoteObserver<Vote>; + +namespace { + +const execution_context::ExecutionContext* GetExecutionContext( + const FrameNode* frame_node) { + return execution_context::ExecutionContextRegistry::GetFromGraph( + frame_node->GetGraph()) + ->GetExecutionContextForFrameNode(frame_node); +} + +// Both the voting channel and the FrameAudibleVoter are expected live on the +// graph, without being actual GraphOwned objects. This class wraps both to +// allow this. +class GraphOwnedWrapper : public GraphOwned { + public: + GraphOwnedWrapper() { + VotingChannel voting_channel = observer_.BuildVotingChannel(); + voter_id_ = voting_channel.voter_id(); + frame_audible_voter_.SetVotingChannel(std::move(voting_channel)); + } + + ~GraphOwnedWrapper() override = default; + + GraphOwnedWrapper(const GraphOwnedWrapper&) = delete; + GraphOwnedWrapper& operator=(const GraphOwnedWrapper&) = delete; + + // GraphOwned: + void OnPassedToGraph(Graph* graph) override { + graph->AddFrameNodeObserver(&frame_audible_voter_); + } + void OnTakenFromGraph(Graph* graph) override { + graph->RemoveFrameNodeObserver(&frame_audible_voter_); + } + + // Exposes the DummyVoteObserver to validate expectations. + const DummyVoteObserver& observer() const { return observer_; } + + VoterId voter_id() const { return voter_id_; } + + private: + DummyVoteObserver observer_; + FrameAudibleVoter frame_audible_voter_; + VoterId voter_id_; +}; + +} // namespace + +class FrameAudibleVoterTest : public GraphTestHarness { + public: + FrameAudibleVoterTest() = default; + ~FrameAudibleVoterTest() override = default; + + FrameAudibleVoterTest(const FrameAudibleVoterTest&) = delete; + FrameAudibleVoterTest& operator=(const FrameAudibleVoterTest&) = delete; + + void SetUp() override { + graph()->PassToGraph( + std::make_unique<execution_context::ExecutionContextRegistryImpl>()); + + auto wrapper = std::make_unique<GraphOwnedWrapper>(); + wrapper_ = wrapper.get(); + graph()->PassToGraph(std::move(wrapper)); + } + + // Exposes the DummyVoteObserver to validate expectations. + const DummyVoteObserver& observer() const { return wrapper_->observer(); } + + VoterId voter_id() const { return wrapper_->voter_id(); } + + private: + GraphOwnedWrapper* wrapper_ = nullptr; +}; + +// Tests that the FrameAudibleVoter correctly casts a vote for a frame +// depending on its audible state. +TEST_F(FrameAudibleVoterTest, AudibleChanged) { + // Create a graph with a single frame page. Its initial audible state should + // be false, resulting in a low priority. + MockSinglePageInSingleProcessGraph mock_graph(graph()); + auto& frame_node = mock_graph.frame; + EXPECT_FALSE(frame_node->is_audible()); + EXPECT_EQ(observer().GetVoteCount(), 1u); + EXPECT_TRUE(observer().HasVote( + voter_id(), GetExecutionContext(frame_node.get()), + base::TaskPriority::LOWEST, FrameAudibleVoter::kFrameAudibleReason)); + + // Make the frame visible. This should increase the priority. + mock_graph.frame->SetIsAudible(true); + EXPECT_EQ(observer().GetVoteCount(), 1u); + EXPECT_TRUE(observer().HasVote(voter_id(), + GetExecutionContext(frame_node.get()), + base::TaskPriority::USER_BLOCKING, + FrameAudibleVoter::kFrameAudibleReason)); + + // Deleting the frame should invalidate the vote. + frame_node.reset(); + EXPECT_EQ(observer().GetVoteCount(), 0u); +} + +} // namespace execution_context_priority +} // namespace performance_manager
diff --git a/components/performance_manager/execution_context_priority/override_vote_aggregator.cc b/components/performance_manager/execution_context_priority/override_vote_aggregator.cc index 71c501a..c6ae509 100644 --- a/components/performance_manager/execution_context_priority/override_vote_aggregator.cc +++ b/components/performance_manager/execution_context_priority/override_vote_aggregator.cc
@@ -14,7 +14,7 @@ VotingChannel OverrideVoteAggregator::GetOverrideVotingChannel() { DCHECK(vote_data_map_.empty()); - DCHECK_EQ(voting::kInvalidVoterId<Vote>, override_voter_id_); + DCHECK(!override_voter_id_); DCHECK_GT(2u, vote_consumer_default_impl_.voting_channels_issued()); auto channel = vote_consumer_default_impl_.BuildVotingChannel(); override_voter_id_ = channel.voter_id(); @@ -23,7 +23,7 @@ VotingChannel OverrideVoteAggregator::GetDefaultVotingChannel() { DCHECK(vote_data_map_.empty()); - DCHECK_EQ(voting::kInvalidVoterId<Vote>, default_voter_id_); + DCHECK(!default_voter_id_); DCHECK_GT(2u, vote_consumer_default_impl_.voting_channels_issued()); auto channel = vote_consumer_default_impl_.BuildVotingChannel(); default_voter_id_ = channel.voter_id(); @@ -35,9 +35,7 @@ } bool OverrideVoteAggregator::IsSetup() const { - return override_voter_id_ != voting::kInvalidVoterId<Vote> && - default_voter_id_ != voting::kInvalidVoterId<Vote> && - channel_.IsValid(); + return override_voter_id_ && default_voter_id_ && channel_.IsValid(); } void OverrideVoteAggregator::OnVoteSubmitted(
diff --git a/components/performance_manager/execution_context_priority/override_vote_aggregator.h b/components/performance_manager/execution_context_priority/override_vote_aggregator.h index 8fc76d4..82c79f61 100644 --- a/components/performance_manager/execution_context_priority/override_vote_aggregator.h +++ b/components/performance_manager/execution_context_priority/override_vote_aggregator.h
@@ -87,8 +87,8 @@ // Our two input voters. We'll only accept votes from these voters otherwise // we'll DCHECK. - VoterId override_voter_id_ = voting::kInvalidVoterId<Vote>; - VoterId default_voter_id_ = voting::kInvalidVoterId<Vote>; + VoterId override_voter_id_; + VoterId default_voter_id_; // Our channel for upstreaming our votes. VotingChannelWrapper channel_;
diff --git a/components/performance_manager/execution_context_priority/root_vote_observer.cc b/components/performance_manager/execution_context_priority/root_vote_observer.cc index 3331ef5..7eb7c13 100644 --- a/components/performance_manager/execution_context_priority/root_vote_observer.cc +++ b/components/performance_manager/execution_context_priority/root_vote_observer.cc
@@ -62,6 +62,7 @@ void RootVoteObserver::OnVoteInvalidated( VoterId voter_id, const ExecutionContext* execution_context) { + DCHECK_EQ(voter_id_, voter_id); SetPriorityAndReason( execution_context, PriorityAndReason(base::TaskPriority::LOWEST,
diff --git a/components/performance_manager/execution_context_priority/root_vote_observer.h b/components/performance_manager/execution_context_priority/root_vote_observer.h index 0d025e2..be174334 100644 --- a/components/performance_manager/execution_context_priority/root_vote_observer.h +++ b/components/performance_manager/execution_context_priority/root_vote_observer.h
@@ -39,7 +39,7 @@ VoteConsumerDefaultImpl vote_consumer_default_impl_; // The ID of the only voting channel we've vended. - voting::VoterId<Vote> voter_id_ = voting::kInvalidVoterId<Vote>; + VoterId voter_id_; }; } // namespace execution_context_priority
diff --git a/components/performance_manager/features.cc b/components/performance_manager/features.cc index 747889e..8c757442 100644 --- a/components/performance_manager/features.cc +++ b/components/performance_manager/features.cc
@@ -47,7 +47,7 @@ } const base::Feature kServiceWorkerRelationshipsInGraph{ - "ServiceWorkerRelationshipsInGraph", base::FEATURE_DISABLED_BY_DEFAULT}; + "ServiceWorkerRelationshipsInGraph", base::FEATURE_ENABLED_BY_DEFAULT}; } // namespace features } // namespace performance_manager
diff --git a/components/performance_manager/public/voting/voting.h b/components/performance_manager/public/voting/voting.h index d0a58dd..7e47e5c 100644 --- a/components/performance_manager/public/voting/voting.h +++ b/components/performance_manager/public/voting/voting.h
@@ -106,8 +106,6 @@ template <typename VoteImpl> using VoterId = util::IdTypeU32<VoteImpl>; -template <typename VoteImpl> -constexpr VoterId<VoteImpl> kInvalidVoterId; // A raw vote becomes an AcceptedVote once a VoteConsumer receives and stores // it, associating it with a VoterId. @@ -252,7 +250,7 @@ // The ID of the voter that submitted the vote. This is defined by the // VoteConsumer. - VoterId<VoteImpl> voter_id_ = kInvalidVoterId<VoteImpl>; + VoterId<VoteImpl> voter_id_; const ContextType* context_ = nullptr; @@ -313,7 +311,7 @@ // Used to reach back into the factory to decrement the outstanding // VotingChannel count, and for routing votes to the consumer. VotingChannelFactory<VoteImpl>* factory_ = nullptr; - VoterId<VoteImpl> voter_id_ = kInvalidVoterId<VoteImpl>; + VoterId<VoteImpl> voter_id_; }; // A helper for creating VotingChannels that binds a unique VoterId (and @@ -662,7 +660,7 @@ vote_(vote), invalidated_(false) { DCHECK(consumer_); - DCHECK_NE(voter_id_, kInvalidVoterId<VoteImpl>); + DCHECK(voter_id_); DCHECK(context_); DCHECK(vote_.IsValid()); } @@ -700,8 +698,7 @@ template <class VoteImpl> bool AcceptedVote<VoteImpl>::IsValid() const { - return consumer_ && voter_id_ != kInvalidVoterId<VoteImpl> && - vote_.IsValid() && !invalidated_; + return consumer_ && voter_id_ && vote_.IsValid() && !invalidated_; } template <class VoteImpl> @@ -776,7 +773,7 @@ DCHECK(!receipt_); consumer_ = std::exchange(rhs.consumer_, nullptr); - voter_id_ = std::exchange(rhs.voter_id_, kInvalidVoterId<VoteImpl>); + voter_id_ = std::exchange(rhs.voter_id_, VoterId<VoteImpl>()); context_ = std::exchange(rhs.context_, nullptr); vote_ = std::exchange(rhs.vote_, VoteImpl()); receipt_ = std::exchange(rhs.receipt_, nullptr); @@ -821,17 +818,17 @@ template <class VoteImpl> bool VotingChannel<VoteImpl>::IsValid() const { - return factory_ && voter_id_ != kInvalidVoterId<VoteImpl>; + return factory_ && voter_id_; } template <class VoteImpl> void VotingChannel<VoteImpl>::Reset() { if (!factory_) return; - DCHECK_NE(kInvalidVoterId<VoteImpl>, voter_id_); + DCHECK(voter_id_); factory_->OnVotingChannelDestroyed(PassKey()); factory_ = nullptr; - voter_id_ = kInvalidVoterId<VoteImpl>; + voter_id_ = VoterId<VoteImpl>(); } template <class VoteImpl> @@ -845,7 +842,7 @@ void VotingChannel<VoteImpl>::Take(VotingChannel<VoteImpl>&& rhs) { Reset(); factory_ = std::exchange(rhs.factory_, nullptr); - voter_id_ = std::exchange(rhs.voter_id_, kInvalidVoterId<VoteImpl>); + voter_id_ = std::exchange(rhs.voter_id_, VoterId<VoteImpl>()); } ///////////////////////////////////////////////////////////////////// @@ -869,8 +866,12 @@ ++voting_channels_outstanding_; // TODO(sebmarchand): Use VoterId<VoteImpl>::Generator instead of // FromUnsafeValue. + // Note: The pre-increment operator is used so that the value of the first + // voter ID is 1. This is required because 0 is the value for an invalid + // VoterId. VoterId<VoteImpl> new_voter_id = VoterId<VoteImpl>::FromUnsafeValue(++voting_channels_issued_); + DCHECK(!new_voter_id.is_null()); return VotingChannel<VoteImpl>( base::PassKey<VotingChannelFactory<VoteImpl>>(), this, new_voter_id); }
diff --git a/components/performance_manager/service_worker_context_adapter.cc b/components/performance_manager/service_worker_context_adapter.cc index efe67ead..1cf14d0 100644 --- a/components/performance_manager/service_worker_context_adapter.cc +++ b/components/performance_manager/service_worker_context_adapter.cc
@@ -62,7 +62,7 @@ void ServiceWorkerContextAdapter::RunningServiceWorker::Unsubscribe() { DCHECK(scoped_observation_.IsObserving()); - scoped_observation_.RemoveObservation(); + scoped_observation_.Reset(); } void ServiceWorkerContextAdapter::RunningServiceWorker::RenderProcessExited(
diff --git a/components/performance_manager/v8_memory/web_memory_aggregator.cc b/components/performance_manager/v8_memory/web_memory_aggregator.cc index facca5c..3b8d347 100644 --- a/components/performance_manager/v8_memory/web_memory_aggregator.cc +++ b/components/performance_manager/v8_memory/web_memory_aggregator.cc
@@ -84,23 +84,22 @@ const FrameNode* frame_node, mojom::WebMemoryMeasurement::Mode mode, base::OnceCallback<void(mojom::WebMemoryMeasurementPtr)> callback) { - auto web_memory_aggregator = std::make_unique<WebMemoryAggregator>( + auto measurer = std::make_unique<WebMemoryMeasurer>( frame_node->GetFrameToken(), WebMeasurementModeToRequestMeasurementMode(mode), std::move(callback)); - // Create a measurement complete callback to own |web_memory_aggregator|. It + // Create a measurement complete callback to own |measurer|. It // will be deleted when the callback is executed or dropped. - V8DetailedMemoryRequestOneShot* request = web_memory_aggregator->request(); - auto measurement_complete_callback = - base::BindOnce(&WebMemoryAggregator::MeasurementComplete, - std::move(web_memory_aggregator)); + V8DetailedMemoryRequestOneShot* request = measurer->request(); + auto measurement_complete_callback = base::BindOnce( + &WebMemoryMeasurer::MeasurementComplete, std::move(measurer)); // Start memory measurement for the process of the given frame. request->StartMeasurement(frame_node->GetProcessNode(), std::move(measurement_complete_callback)); } -WebMemoryAggregator::WebMemoryAggregator( +WebMemoryMeasurer::WebMemoryMeasurer( const blink::LocalFrameToken& frame_token, V8DetailedMemoryRequest::MeasurementMode mode, MeasurementCallback callback) @@ -108,9 +107,9 @@ callback_(std::move(callback)), request_(std::make_unique<V8DetailedMemoryRequestOneShot>(mode)) {} -WebMemoryAggregator::~WebMemoryAggregator() = default; +WebMemoryMeasurer::~WebMemoryMeasurer() = default; -void WebMemoryAggregator::MeasurementComplete( +void WebMemoryMeasurer::MeasurementComplete( const ProcessNode* process_node, const V8DetailedMemoryProcessData*) { std::move(callback_).Run(BuildMemoryUsageResult(frame_token_, process_node));
diff --git a/components/performance_manager/v8_memory/web_memory_aggregator.h b/components/performance_manager/v8_memory/web_memory_aggregator.h index 25ae6a0..2e7bc52 100644 --- a/components/performance_manager/v8_memory/web_memory_aggregator.h +++ b/components/performance_manager/v8_memory/web_memory_aggregator.h
@@ -18,17 +18,19 @@ namespace v8_memory { -// A helper class for implementing WebMeasureMemory(). -class WebMemoryAggregator { +// A helper class for implementing WebMeasureMemory(). This manages a request +// object that sends a V8 detailed memory request to the renderer, and formats +// the result into a mojom::WebMemoryMeasurement. +class WebMemoryMeasurer { public: using MeasurementCallback = base::OnceCallback<void(mojom::WebMemoryMeasurementPtr)>; - WebMemoryAggregator(const blink::LocalFrameToken&, - V8DetailedMemoryRequest::MeasurementMode, - MeasurementCallback); + WebMemoryMeasurer(const blink::LocalFrameToken&, + V8DetailedMemoryRequest::MeasurementMode, + MeasurementCallback); - ~WebMemoryAggregator(); + ~WebMemoryMeasurer(); V8DetailedMemoryRequestOneShot* request() const { return request_.get(); }
diff --git a/components/performance_manager/v8_memory/web_memory_aggregator_unittest.cc b/components/performance_manager/v8_memory/web_memory_aggregator_unittest.cc index 91fd047f..f185bb78 100644 --- a/components/performance_manager/v8_memory/web_memory_aggregator_unittest.cc +++ b/components/performance_manager/v8_memory/web_memory_aggregator_unittest.cc
@@ -100,7 +100,7 @@ FrameNodeImpl* frame, base::flat_map<std::string, Bytes> expected) { bool measurement_done = false; - WebMemoryAggregator web_memory( + WebMemoryMeasurer web_memory( frame->frame_token(), V8DetailedMemoryRequest::MeasurementMode::kDefault, base::BindLambdaForTesting([&measurement_done, &expected]( mojom::WebMemoryMeasurementPtr result) {
diff --git a/components/performance_manager/voting_unittest.cc b/components/performance_manager/voting_unittest.cc index 41b9588d..44b6f959 100644 --- a/components/performance_manager/voting_unittest.cc +++ b/components/performance_manager/voting_unittest.cc
@@ -71,8 +71,7 @@ voter.SetVotingChannel(consumer.voting_channel_factory_.BuildVotingChannel()); EXPECT_EQ(&consumer.voting_channel_factory_, voter.voting_channel_.factory_for_testing()); - EXPECT_NE(voting::kInvalidVoterId<TestVote>, - voter.voting_channel_.voter_id()); + EXPECT_TRUE(voter.voting_channel_.voter_id()); EXPECT_TRUE(voter.voting_channel_.IsValid()); voter.EmitVote(kDummyContext1, 0);
diff --git a/components/performance_manager/worker_watcher.cc b/components/performance_manager/worker_watcher.cc index 5fdaf90..717b8d33 100644 --- a/components/performance_manager/worker_watcher.cc +++ b/components/performance_manager/worker_watcher.cc
@@ -201,9 +201,12 @@ PerformanceManagerImpl::BatchDeleteNodes(std::move(nodes)); - dedicated_worker_service_observation_.RemoveObservation(); - shared_worker_service_observation_.RemoveObservation(); - service_worker_context_observation_.RemoveObservation(); + DCHECK(dedicated_worker_service_observation_.IsObserving()); + dedicated_worker_service_observation_.Reset(); + DCHECK(shared_worker_service_observation_.IsObserving()); + shared_worker_service_observation_.Reset(); + DCHECK(service_worker_context_observation_.IsObserving()); + service_worker_context_observation_.Reset(); } void WorkerWatcher::OnWorkerCreated(
diff --git a/components/performance_manager/worker_watcher_unittest.cc b/components/performance_manager/worker_watcher_unittest.cc index 7ca602d..91beba0 100644 --- a/components/performance_manager/worker_watcher_unittest.cc +++ b/components/performance_manager/worker_watcher_unittest.cc
@@ -1336,7 +1336,8 @@ feature_list.InitAndEnableFeature( features::kServiceWorkerRelationshipsInGraph); } else { - feature_list.Init(); + feature_list.InitAndDisableFeature( + features::kServiceWorkerRelationshipsInGraph); } int render_process_id = process_node_source()->CreateProcessNode();
diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc index c11b3c2..c930f2f 100644 --- a/components/permissions/permission_request_manager.cc +++ b/components/permissions/permission_request_manager.cc
@@ -397,7 +397,7 @@ requests_iter++) { PermissionGrantedIncludingDuplicates(*requests_iter, /*is_one_time=*/true); } - FinalizeCurrentRequests(PermissionAction::GRANTED); + FinalizeCurrentRequests(PermissionAction::GRANTED_ONCE); } void PermissionRequestManager::Deny() { @@ -608,7 +608,6 @@ void PermissionRequestManager::FinalizeCurrentRequests( PermissionAction permission_action) { DCHECK(IsRequestInProgress()); - PermissionUmaUtil::PermissionPromptResolved( requests_, web_contents(), permission_action, DetermineCurrentRequestUIDispositionForUMA(),
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc index 08f8e33..5a93b120 100644 --- a/components/permissions/permission_uma_util.cc +++ b/components/permissions/permission_uma_util.cc
@@ -108,7 +108,7 @@ type = PermissionRequestType::MULTIPLE; DCHECK(action == "Accepted" || action == "Denied" || action == "Dismissed" || - action == "Ignored"); + action == "Ignored" || action == "AcceptedOnce"); std::string name = "Permissions.Engagement." + action + '.' + GetPermissionRequestString(type); @@ -247,6 +247,12 @@ "Permissions.Prompt.Accepted.Gesture"; const char PermissionUmaUtil::kPermissionsPromptAcceptedNoGesture[] = "Permissions.Prompt.Accepted.NoGesture"; +const char PermissionUmaUtil::kPermissionsPromptAcceptedOnce[] = + "Permissions.Prompt.AcceptedOnce"; +const char PermissionUmaUtil::kPermissionsPromptAcceptedOnceGesture[] = + "Permissions.Prompt.AcceptedOnce.Gesture"; +const char PermissionUmaUtil::kPermissionsPromptAcceptedOnceNoGesture[] = + "Permissions.Prompt.AcceptedOnce.NoGesture"; const char PermissionUmaUtil::kPermissionsPromptDenied[] = "Permissions.Prompt.Denied"; const char PermissionUmaUtil::kPermissionsPromptDeniedGesture[] = @@ -366,11 +372,11 @@ switch (permission_action) { case PermissionAction::GRANTED: - RecordPromptDecided(requests, /*accepted=*/true); + RecordPromptDecided(requests, /*accepted=*/true, /*is_one_time=*/false); action_string = "Accepted"; break; case PermissionAction::DENIED: - RecordPromptDecided(requests, /*accepted=*/false); + RecordPromptDecided(requests, /*accepted=*/false, /*is_one_time*/ false); action_string = "Denied"; break; case PermissionAction::DISMISSED: @@ -379,10 +385,15 @@ case PermissionAction::IGNORED: action_string = "Ignored"; break; + case PermissionAction::GRANTED_ONCE: + RecordPromptDecided(requests, /*accepted=*/true, /*is_one_time*/ true); + action_string = "AcceptedOnce"; + break; default: NOTREACHED(); break; } + RecordEngagementMetric(requests, web_contents, action_string); PermissionDecisionAutoBlocker* autoblocker = @@ -667,7 +678,8 @@ // static void PermissionUmaUtil::RecordPromptDecided( const std::vector<PermissionRequest*>& requests, - bool accepted) { + bool accepted, + bool is_one_time) { DCHECK(!requests.empty()); PermissionRequestType request_type = PermissionRequestType::MULTIPLE; @@ -679,10 +691,17 @@ } if (accepted) { - PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, request_type); - PERMISSION_BUBBLE_GESTURE_TYPE_UMA(kPermissionsPromptAcceptedGesture, - kPermissionsPromptAcceptedNoGesture, - gesture_type, request_type); + if (is_one_time) { + PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAcceptedOnce, request_type); + PERMISSION_BUBBLE_GESTURE_TYPE_UMA( + kPermissionsPromptAcceptedOnceGesture, + kPermissionsPromptAcceptedOnceNoGesture, gesture_type, request_type); + } else { + PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted, request_type); + PERMISSION_BUBBLE_GESTURE_TYPE_UMA(kPermissionsPromptAcceptedGesture, + kPermissionsPromptAcceptedNoGesture, + gesture_type, request_type); + } } else { PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, request_type); PERMISSION_BUBBLE_GESTURE_TYPE_UMA(kPermissionsPromptDeniedGesture,
diff --git a/components/permissions/permission_uma_util.h b/components/permissions/permission_uma_util.h index 21833073..713ff60 100644 --- a/components/permissions/permission_uma_util.h +++ b/components/permissions/permission_uma_util.h
@@ -155,6 +155,9 @@ static const char kPermissionsPromptAccepted[]; static const char kPermissionsPromptAcceptedGesture[]; static const char kPermissionsPromptAcceptedNoGesture[]; + static const char kPermissionsPromptAcceptedOnce[]; + static const char kPermissionsPromptAcceptedOnceGesture[]; + static const char kPermissionsPromptAcceptedOnceNoGesture[]; static const char kPermissionsPromptDenied[]; static const char kPermissionsPromptDeniedGesture[]; static const char kPermissionsPromptDeniedNoGesture[]; @@ -270,7 +273,8 @@ static void RecordPromptDecided( const std::vector<PermissionRequest*>& requests, - bool accepted); + bool accepted, + bool is_one_time); DISALLOW_IMPLICIT_CONSTRUCTORS(PermissionUmaUtil); };
diff --git a/components/permissions/permission_util.h b/components/permissions/permission_util.h index 2cb93a4b..73c2394 100644 --- a/components/permissions/permission_util.h +++ b/components/permissions/permission_util.h
@@ -26,6 +26,7 @@ DISMISSED = 2, IGNORED = 3, REVOKED = 4, + GRANTED_ONCE = 5, // Always keep this at the end. NUM,
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 5799fed..70bea3d 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -1364,8 +1364,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -1787,8 +1787,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -2250,6 +2250,7 @@ 'per_profile': False, 'platform_only': True, # No cloud-policy support. }, + 'default': False, 'example_value': True, 'id': 344, 'caption': '''Allow remote users to interact with elevated windows in remote assistance sessions''', @@ -2269,6 +2270,7 @@ 'per_profile': False, 'platform_only': True, # No cloud-policy support. }, + 'default': True, 'example_value': False, 'id': 534, 'caption': '''Allow remote access users to transfer files to/from the host''', @@ -2304,8 +2306,12 @@ 'owners': ['file://components/policy/resources/OWNERS'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:39-'], - 'future_on': [ 'ios' ], + 'supported_on': [ + 'chrome.*:8-', + 'chrome_os:11-', + 'android:39-', + 'ios:88-', + ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -3080,8 +3086,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -3133,8 +3139,8 @@ 'chrome.*:83-', 'chrome_os:83-', 'android:87-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -3164,8 +3170,10 @@ 'owners': ['file://components/policy/resources/OWNERS'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:8-'], - 'future_on': [ 'ios' ], + 'supported_on': [ + 'chrome.*:8-', + 'ios:88-', + ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': False, @@ -3192,8 +3200,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -3295,8 +3303,8 @@ 'chrome.*:69-', 'chrome_os:69-', 'android:69-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -3319,8 +3327,8 @@ 'chrome.*:63-', 'chrome_os:63-', 'android:63-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -5100,8 +5108,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5147,8 +5155,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5170,8 +5178,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5193,8 +5201,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5216,8 +5224,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5262,8 +5270,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5288,8 +5296,8 @@ 'chrome.*:8-', 'chrome_os:11-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5314,8 +5322,8 @@ 'chrome.*:24-', 'chrome_os:24-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5358,8 +5366,8 @@ 'chrome.*:29-', 'chrome_os:29-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5381,8 +5389,8 @@ 'chrome.*:30-', 'chrome_os:30-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5404,8 +5412,8 @@ 'chrome.*:29-', 'chrome_os:29-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5427,8 +5435,8 @@ 'chrome.*:29-', 'chrome_os:29-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5471,8 +5479,8 @@ 'chrome.*:29-', 'chrome_os:29-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -5662,8 +5670,8 @@ 'chrome.*:10-', 'chrome_os:11-', 'android:33-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -6872,8 +6880,8 @@ 'chrome.*:11-', 'chrome_os:11-', 'android:34-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -6941,8 +6949,8 @@ 'chrome.*:11-', 'chrome_os:11-', 'android:34-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -7635,8 +7643,8 @@ 'chrome.*:12-', 'chrome_os:12-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'can_be_recommended': True, 'dynamic_refresh': True, @@ -7736,8 +7744,8 @@ 'chrome.*:12-', 'chrome_os:12-', 'android:30-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -9739,6 +9747,7 @@ 'features': { 'dynamic_refresh': True, }, + 'default': 1, 'example_value': 1, 'id': 757, 'caption': '''Channel downgrade behavior''', @@ -10383,9 +10392,9 @@ 'supported_on': [ 'chrome.*:22-', 'chrome_os:22-', - 'android:30-' + 'android:30-', + 'ios:88-', ], - 'future_on': ['ios'], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -13257,8 +13266,10 @@ 'caption': '''Disable all variations''', }, ], - 'supported_on': ['chrome.*:83-'], - 'future_on': ['ios'], + 'supported_on': [ + 'chrome.*:83-', + 'ios:88-', + ], 'features': { 'dynamic_refresh': True, 'per_profile': False, @@ -13528,8 +13539,8 @@ 'android:30-', 'chrome.*:37-', 'chrome_os:37-', + 'ios:88-', ], - 'future_on': [ 'ios' ], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -17141,8 +17152,10 @@ 'owners': ['zmin@chromium.org', 'pastarmovj@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean'}, - 'supported_on': ['chrome.*:75-'], - 'future_on': ['ios'], + 'supported_on': [ + 'chrome.*:75-', + 'ios:88-', + ], 'features': { 'dynamic_refresh': False, 'per_profile': False, @@ -18225,8 +18238,10 @@ 'owners': ['zmin@chromium.org', 'pastarmovj@chromium.org', 'rogerta@chromium.org'], 'type': 'string', 'schema': { 'type': 'string' }, - 'supported_on': ['chrome.*:72-'], - 'future_on': [ 'ios' ], + 'supported_on': [ + 'chrome.*:72-', + 'ios:88-', + ], 'features': { 'dynamic_refresh': False, 'per_profile': False, @@ -18547,6 +18562,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': True, 'id': 727, 'caption': '''Log events for policy based extension installs''', @@ -19427,8 +19443,11 @@ 'per_profile': False, 'cloud_only': True, }, - 'supported_on': ['chrome.*:72-', 'chrome_os:81-'], - 'future_on': [ 'ios' ], + 'supported_on': [ + 'chrome.*:72-', + 'chrome_os:81-', + 'ios:88-', + ], 'caption': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> cloud reporting''', 'example_value': True, 'desc': '''This policy controls <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> cloud reporting which uploads information about the browser operation to Google Admin console. @@ -19915,6 +19934,7 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'default': False, 'example_value': True, 'id': 705, 'caption': '''Allow users to use a <ph name="PLUGIN_VM_NAME">PluginVm</ph> on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>''', @@ -21806,6 +21826,7 @@ 'per_profile': False, 'cloud_only': True, }, + 'default': 0, 'example_value': 1, 'id': 728, 'caption': '''Check Safe Browsing status of URLs in real time''', @@ -22461,6 +22482,7 @@ 'dynamic_refresh': False, 'per_profile': False, }, + 'default': 3, 'example_value': 3, 'id': 673, 'caption': '''Limits the number of user data snapshots retained for use in case of emergency rollback.''', @@ -22586,6 +22608,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': False, 'id': 720, 'caption': '''Allow print job history to be deleted''', @@ -22880,6 +22903,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': False, 'id': 666, 'caption': '''Allow or deny screen capture''', @@ -22979,6 +23003,7 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'default':None, 'example_value': True, 'id': 676, 'caption': '''Set the state of privacy screen on the login screen''', @@ -23005,6 +23030,7 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'default': None, 'example_value': True, 'id': 677, 'caption': '''Enable privacy screen''', @@ -23029,6 +23055,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': True, 'id': 678, 'caption': '''Allows native notifications''', @@ -23153,6 +23180,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': True, 'id': 685, 'caption': '''Enable additional protections for users enrolled in the Advanced Protection program''', @@ -23169,6 +23197,7 @@ 'dynamic_refresh': False, 'per_profile': True, }, + 'default': True, 'example_value': False, 'id': 687, 'caption': '''Enable scrolling to text specified in URL fragments''', @@ -23258,6 +23287,7 @@ 'per_profile': False, 'dynamic_refresh': True, }, + 'default': None, 'example_value': True, 'id': 713, 'caption': '''Control the <ph name="PRODUCT_NAME">IntensiveWakeUpThrottling</ph> feature.''', @@ -23375,6 +23405,7 @@ 'per_profile': False, 'dynamic_refresh': True, }, + 'default': True, 'example_value': True, 'id': 725, 'caption': '''Control the <ph name="PRODUCT_NAME">User-Agent Client Hints</ph> feature.''', @@ -23420,6 +23451,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': None, 'example_value': False, 'default_for_enterprise_users': False, 'id': 739, @@ -23441,6 +23473,7 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'default': True, 'example_value': True, 'id': 748, 'caption': '''Enable warnings for insecure forms''', @@ -23536,6 +23569,7 @@ 'per_profile': False, 'platform_only': True, }, + 'default': 1, 'example_value': 2, 'id': 801, 'caption': 'Configuring the ToS behavior during first-run for CCT', @@ -23833,6 +23867,7 @@ 'features': { 'dynamic_refresh': True, }, + 'default': False, 'example_value': False, 'id': 789, 'caption': '''Allow addition of Family Link accounts to the device''',
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 44bb45f8..5ce4459 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -884,19 +884,6 @@ <translation id="2349117476121456297">Wenn Sie die Richtlinie auf "True" setzen, führt die oberste Reihe der Tastatur Funktionstastenbefehle aus. Bei gedrückter Suchtaste führt die Tastatur stattdessen wieder Medientastenbefehle aus. Wenn Sie die Richtlinie auf "False" setzen oder nicht konfigurieren, führt die Tastatur standardmäßig Medientastenbefehle aus. Bei gedrückter Suchtaste führt die Tastatur Funktionstastenbefehle aus.</translation> -<translation id="2353442107789326507">Liste der Einstellungen für Chrome Enterprise Connectors-Services für den Enterprise Connector "<ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />". Dieser wird ausgelöst, wenn eine Datei an Chrome angehängt wird. - - Mit den Feldern "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" und "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" wird ermittelt, ob der Connector eine Datei zur Analyse senden soll, wenn sie an eine bestimmte Seite angehängt wird, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem "enable"-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein "disable"-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Mit dem Feld "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" wird festgelegt, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor der Seite Zugriff auf die Datei gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome der Seite sofort Zugriff auf die Datei. - - Mit dem Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />" wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die durch ein Passwort geschützt sind. - - Mit dem Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die zu groß für die Analyse sind (50 MB oder größer). - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="2358176879566587521">Diese Richtlinie wurde entfernt. Sie ist mit dieser Version von <ph name="PRODUCT_NAME" /> nicht kompatibel. Weitere Informationen dazu finden Sie unter https://support.google.com/chrome/a/answer/7643500.</translation> <translation id="2364639863953745682">Modus für die Assistant-Einrichtung</translation> <translation id="2384233438419344179">Wenn diese Richtlinie aktiviert ist, können Websiteelemente, die nicht von der Domain in der Adressleiste des Browsers stammen, keine Cookies setzen. Wenn die Richtlinie deaktiviert ist, können diese Elemente Cookies setzen und Nutzer können diese Einstellung nicht ändern. @@ -4574,17 +4561,6 @@ <translation id="7701341006446125684">Cache-Größe für Apps und Erweiterungen in Byte festlegen</translation> <translation id="7703737669292992839">Dialogfelder zur Dateiauswahl verhindern</translation> <translation id="7709470712369261710">Google-Dienste nicht zur Bereitstellung von automatischen Bildbeschreibungen verwenden</translation> -<translation id="7710950688502974809">Liste der Einstellungen für Chrome Enterprise Connectors-Services für den Enterprise Connector "<ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />". Dieser wird ausgelöst, wenn Daten aus der Zwischenablage oder durch Drag-and-drop von Webinhalten in Chrome eingegeben werden. - - Mit den Feldern "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" und "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" wird ermittelt, ob der Connector Daten zur Analyse senden soll, wenn sie auf einer bestimmten Seite eingegeben werden, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem "enable"-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein "disable"-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Das Feld "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" legt fest, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor der Seite Zugriff auf die Daten gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome der Seite sofort Zugriff auf die Daten. - - Das Feld "<ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" />" gibt die für eine Prüfung erforderliche Mindestgröße (in Byte) für in Chrome eingegebene Daten an. Wenn der Wert nicht festgelegt ist, gilt der Standardwert von 100 Byte. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="7712109699186360774">Nachfragen, wenn eine Website auf meine Kamera bzw. mein Mikrofon zugreifen möchte</translation> <translation id="7713608076604149344">Download-Einschränkungen</translation> <translation id="7715711044277116530">Prozentsatz für die Skalierung der Spanne für die Bildschirmabdunkelung im Präsentationsmodus</translation> @@ -4774,19 +4750,6 @@ Diese Richtlinie ist nicht wirksam, wenn sie auf „True“ gesetzt, leer gelassen oder nicht konfiguriert wird.</translation> <translation id="8011935490612940798">Die Funktion <ph name="PRODUCT_NAME" /> steuern.</translation> <translation id="802147957407376460">Bildschirm um 0 Grad drehen</translation> -<translation id="8027265928215448940">Liste der Einstellungen für Chrome Enterprise-Connector-Services für den Enterprise-Connector "<ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />" – dieser wird ausgelöst, wenn eine Datei in Chrome heruntergeladen wird. - - Mit den Feldern "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" und "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" wird ermittelt, ob der Connector eine Datei zur Analyse senden soll, wenn sie von einer bestimmten Seite heruntergeladen wird, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem "enable"-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein "disable"-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Das Feld "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" legt fest, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor dem Nutzer Zugriff auf die heruntergeladene Datei gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome dem Nutzer sofort Zugriff auf die Datei. - - Das Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />" legt fest, ob Chrome den Zugriff auf Dateien blockiert, die durch ein Passwort geschützt sind. - - Das Feld "<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" />" legt fest, ob Chrome den Zugriff auf Dateien blockiert, die zu groß für die Analyse sind (50 MB oder größer). - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="8033913082323846868">Diese Richtlinie wurde in M70 eingestellt, bitte verwenden Sie stattdessen "AutofillAddressEnabled" und "AutofillCreditCardEnabled". Aktiviert die Funktion zum automatischen Ausfüllen von <ph name="PRODUCT_NAME" /> und ermöglicht es Nutzern, Webformulare mit zuvor gespeicherten Informationen wie Adresse oder Kreditkartendaten ausfüllen zu lassen.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 957d803..ea004e76 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -912,19 +912,6 @@ <translation id="2349117476121456297">Si estableces el valor "True" para la política, las teclas de la fila superior del teclado serán comandos de teclas de funciones. Si presionas la tecla de búsqueda, se restablecerá el comportamiento de las teclas multimedia. Si estableces el valor "False" para esta política o no la configuras, el teclado generará comandos de teclas de funciones de forma predeterminada. Cuando presiones la tecla de búsqueda, se cambiarán a teclas de funciones.</translation> -<translation id="2353442107789326507">Lista de configuraciones de servicios de Chrome Enterprise Connectors que se aplicarán al Enterprise Connector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se adjunta un archivo a Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para que se analice cuando se adjunta a una página específica o qué etiquetas deben incluirse en la solicitud de análisis del archivo. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta, siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si se establece el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que la página acceda al archivo. Si se indica cualquier otro valor entero, Chrome permitirá que la página acceda al archivo de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos demasiado grandes para ser analizados (más de 50 MB). - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="2358176879566587521">Se quita esta política. No es compatible con esta versión de <ph name="PRODUCT_NAME" />. Obtén más información en https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Modo de la experiencia de integración del Asistente</translation> <translation id="2384233438419344179">Si habilitas la política, los elementos de la página web que no sean del dominio especificado en la barra de direcciones del navegador no podrán establecer cookies. Si inhabilitas la política, esos elementos podrán establecer cookies y los usuarios no podrán cambiar esta configuración. @@ -4602,17 +4589,6 @@ <translation id="7701341006446125684">Establecer tamaño de caché de apps y extensiones (en bytes)</translation> <translation id="7703737669292992839">Evita que se muestren diálogos de selección de archivos</translation> <translation id="7709470712369261710">No permite que los servicios de Google proporcionen descripciones automáticas de imágenes</translation> -<translation id="7710950688502974809">Lista de opciones de configuración para los servicios de Chrome Enterprise Connectors que se aplicarán a Enterprise Connector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se ingresan datos a Chrome desde el portapapeles o se arrastra y se suelta contenido web. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar datos para que se analicen cuando se descargan de una página específica y qué etiquetas deben incluirse en la solicitud de análisis de los datos. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta, siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si estableces el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que la página acceda a los datos. Si indicas cualquier otro valor entero, Chrome permitirá que la página acceda a los datos de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica que el tamaño mínimo (expresado en bytes) de datos que se ingresen en Chrome debe ser mayor o igual para que se puedan analizar. Si no estableces el campo, el valor predeterminado es 100 bytes. - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="7712109699186360774">Preguntar siempre que un sitio quiera acceder a la cámara o al micrófono</translation> <translation id="7713608076604149344">Restricciones de descarga</translation> <translation id="7715711044277116530">Indica el porcentaje en el que debe ajustarse la demora de inactividad de la pantalla en el modo de presentación.</translation> @@ -4802,19 +4778,6 @@ Tampoco tiene efecto si la estableces como verdadera, la dejas vacía o no la estableces.</translation> <translation id="8011935490612940798">Controla la función <ph name="PRODUCT_NAME" /></translation> <translation id="802147957407376460">Rotar la pantalla 0 grados</translation> -<translation id="8027265928215448940">Lista de configuraciones para los servicios de Conectores de Chrome Enterprise que se aplicarán al Conector de Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se descarga un archivo en Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para que se analice cuando se descarga de una página específica y qué etiquetas deben incluirse en la solicitud de análisis del archivo. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si se establece el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que el usuario acceda al archivo descargado. Si se indica cualquier otro valor entero, Chrome permitirá que el usuario acceda al archivo de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos demasiado grandes para ser analizados (más de 50 MB). - - Esta política solo se puede configurar en la Consola del administrador de Google.</translation> <translation id="8033913082323846868">Esta política deja de estar disponible en M70. En su lugar, utiliza AutofillAddressEnabled y AutofillCreditCardEnabled. Habilita la función de "Autocompletar" de <ph name="PRODUCT_NAME" /> y permite que los usuarios completen automáticamente los formularios web con la información que se haya almacenado, como la dirección o información de la tarjeta de crédito.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index add5e91..ab3774e 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -916,19 +916,6 @@ <translation id="2349117476121456297">Si se asigna el valor "true" a esta política, las teclas de la fila superior del teclado actúan como comandos de teclas de funciones. Cuando se pulsa la tecla de búsqueda, su comportamiento cambia al de teclas multimedia. Si se le asigna el valor "false" o no se le asigna ningún valor, las teclas del teclado vuelven a producir comandos de teclas multimedia. Cuando se pulsa la tecla de búsqueda, su comportamiento cambia al de teclas de funciones.</translation> -<translation id="2353442107789326507">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que van a aplicarse al conector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se adjunta un archivo a Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para su análisis cuando se adjunte a una página específica y qué etiquetas se van a incluir en la solicitud de análisis del archivo. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir a la página acceder al archivo. Si se establece cualquier otro valor entero, Chrome permitirá a la página acceder de forma inmediata al archivo. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite archivos que sean demasiado grandes para poder analizarse (más de 50 MB). - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="2358176879566587521">Se ha retirado esta política. No es compatible con esta versión de <ph name="PRODUCT_NAME" />. Consulta https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Modo de la experiencia de incorporación del Asistente</translation> <translation id="2384233438419344179">Si se habilita esta política, los elementos de sitios web que no pertenezcan al dominio que aparece en la barra de direcciones del navegador no podrán establecer cookies. Si se inhabilita esta política, estos elementos podrán establecer cookies y los usuarios no podrán cambiar esta opción. @@ -4622,17 +4609,6 @@ <translation id="7701341006446125684">Establecer el tamaño de caché de aplicaciones y extensiones (en bytes)</translation> <translation id="7703737669292992839">Evitar los cuadros de diálogo de selección de archivos</translation> <translation id="7709470712369261710">No usar los servicios de Google para proporcionar descripciones de imágenes de forma automática</translation> -<translation id="7710950688502974809">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que se van a aplicar al conector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se introducen datos en Chrome desde el portapapeles o arrastrando y soltando contenido web. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar datos para su análisis cuando se introduzcan en una página específica y qué etiquetas se van a incluir en la solicitud de análisis de esos datos. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir a la página acceder a los datos. Si se establece cualquier otro valor entero, Chrome permitirá a la página acceder de forma inmediata a los datos. - - El campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica el tamaño mínimo (en bytes) que los datos introducidos en Chrome deben igualar o superar para analizarse. El valor predeterminado es 100 bytes si el campo se deja sin establecer. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="7712109699186360774">Preguntar siempre que un sitio quiera acceder a mi cámara o a mi micrófono</translation> <translation id="7713608076604149344">Restricciones de descarga</translation> <translation id="7715711044277116530">Porcentaje que permite ajustar el retraso de inactividad de la pantalla en el modo de presentación</translation> @@ -4827,19 +4803,6 @@ Esta política no tendrá efecto si se le asigna el valor "True", se deja vacía o no se le asigna ningún valor.</translation> <translation id="8011935490612940798">Controlar la función <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Girar la pantalla 0 grados</translation> -<translation id="8027265928215448940">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que se van a aplicar al conector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se descarga un archivo en Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para su análisis cuando se descargue de una página específica y qué etiquetas se van a incluir en la solicitud de análisis del archivo. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir al usuario acceder al archivo descargado. Si se establece cualquier otro valor entero, Chrome permitirá al usuario acceder de forma inmediata al archivo. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite archivos que sean demasiado grandes para poder analizarse (más de 50 MB). - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="8033913082323846868">Esta política está obsoleta en M70. Utiliza en su lugar AutofillAddressEnabled y AutofillCreditCardEnabled. Habilita la función Autocompletar de <ph name="PRODUCT_NAME" /> y permite que los usuarios rellenen formularios web automáticamente con información almacenada anteriormente, como la dirección o la tarjeta de crédito.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index b5111ec5..87cb73b 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -918,19 +918,6 @@ <translation id="2349117476121456297">Si vous définissez cette règle sur "True", les touches de la première rangée du clavier deviennent des touches de fonction. Le comportement d'origine des touches multimédias est rétabli en appuyant sur la touche de recherche. Si cette règle est définie sur "False" ou n'est pas configurée, les touches sont des touches multimédias par défaut. Elles deviennent des touches de fonction lorsque la touche de recherche est maintenue enfoncée.</translation> -<translation id="2353442107789326507">Liste des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsqu'un fichier est ajouté en pièce jointe dans Chrome. - - Les champs <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> et <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> permettent de déterminer si le connecteur doit envoyer un fichier en vue d'une analyse lorsqu'il est joint à une page spécifique, ainsi que les tags à inclure dans la demande d'analyse pour ce fichier. Un tag correspondant à un format "activer" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "désactiver" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> permet de savoir à quel fournisseur de services d'analyse les paramètres correspondent. - - Si la valeur du champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser la page accéder au fichier. Pour toute autre valeur entière, Chrome laisse la page accéder immédiatement au fichier. - - Le champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers protégés par un mot de passe. - - Le champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers trop volumineux pour être analysés (plus de 50 Mo). - - Cette règle ne peut être définie que dans la Console d'administration Google.</translation> <translation id="2358176879566587521">Cette règle est supprimée. Elle n'est pas compatible avec cette version de <ph name="PRODUCT_NAME" />. Pour en savoir plus, rendez-vous sur https://support.google.com/chrome/a/answer/7643500.</translation> <translation id="2364639863953745682">Mode du processus de prise en main de l'Assistant</translation> <translation id="2384233438419344179">Si cette règle est activée, les éléments de page Web qui ne font pas partie du domaine indiqué dans la barre d'adresse du navigateur ne peuvent pas placer de cookies. Si cette règle est désactivée, ces éléments sont autorisés à placer des cookies, et les utilisateurs ne peuvent pas modifier ce paramètre. @@ -4609,17 +4596,6 @@ <translation id="7701341006446125684">Régler la taille du cache pour les applications et les extensions (en octets)</translation> <translation id="7703737669292992839">Empêcher l'affichage de boîtes de dialogue de sélection de fichiers</translation> <translation id="7709470712369261710">Ne pas utiliser les services Google pour qu'une description soit ajoutée automatiquement aux images</translation> -<translation id="7710950688502974809">Liste des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsque des données sont collées dans Chrome depuis le presse-papiers ou lorsque du contenu Web est ajouté par glisser-déposer. - - Les champs <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> et <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> permettent de déterminer si le connecteur doit envoyer des données en vue d'une analyse lorsque celles-ci sont saisies dans une page spécifique, ainsi que les tags à inclure dans la demande d'analyse de ces données. Un tag correspondant à un format "enable" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "disable" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> permet de savoir à quel fournisseur de services d'analyse les paramètres correspondent. - - Si la valeur du champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser la page accéder aux données. Pour toute autre valeur entière, Chrome laisse la page accéder immédiatement aux données. - - Le champ <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indique la taille minimale (en octets) que les données saisies dans Chrome doivent atteindre ou dépasser pour être analysées. Si ce champ n'est pas renseigné, la valeur par défaut est de 100 octets. - - Cette règle ne peut être définie que dans la Console d'administration Google.</translation> <translation id="7712109699186360774">Demander chaque fois qu'un site essaie d'accéder à la caméra et/ou au microphone</translation> <translation id="7713608076604149344">Restrictions de téléchargement</translation> <translation id="7715711044277116530">Pourcentage d'adaptation du délai d'assombrissement de l'écran en mode Présentation</translation> @@ -4814,19 +4790,6 @@ Elle n'a aucune incidence non plus si elle est définie sur "True", qu'elle n'est pas configurée ou que la liste est vide.</translation> <translation id="8011935490612940798">Contrôler la fonctionnalité <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Faire pivoter l'écran de 0 degré</translation> -<translation id="8027265928215448940">Liste des services des connecteurs Chrome Enterprise à appliquer au connecteur <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise, qui se déclenche lorsqu'un fichier est téléchargé dans Chrome. - - Les champs <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> et <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> permettent de déterminer si le connecteur doit envoyer un fichier en vue d'une analyse lorsqu'il est téléchargé à partir d'une page spécifique, ainsi que les tags à inclure dans la demande d'analyse pour ce fichier. Un tag correspondant à un format "activer" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "désactiver" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> permet de savoir à quel fournisseur de services d'analyse correspondent les paramètres. - - Si la valeur du champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser l'utilisateur accéder au fichier téléchargé. Pour toute autre valeur entière, Chrome laisse l'utilisateur accéder immédiatement au fichier. - - Le champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers protégés par un mot de passe. - - Le champ <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers trop volumineux pour être analysés (plus de 50 Mo). - - Cette règle ne peut être définie que dans la Console d'administration Google.</translation> <translation id="8033913082323846868">Cette règle a été abandonnée dans la version M70. Veuillez utiliser les règles AutofillAddressEnabled et AutofillCreditCardEnabled à la place. Active la fonctionnalité de saisie automatique de <ph name="PRODUCT_NAME" />, qui permet à l'utilisateur de remplir automatiquement des formulaires Web à partir de données stockées précédemment, telles qu'une adresse et des informations relatives à sa carte de crédit.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index a132723..b3d8421 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -916,19 +916,6 @@ <translation id="2349117476121456297">Jika kebijakan ditetapkan ke Benar (True), tombol baris teratas pada keyboard akan bertindak sebagai perintah tombol fungsi. Jika menekan tombol Penelusuran, perilaku tombol tersebut akan kembali menjadi tombol media. Jika ditetapkan ke Salah (False) atau tidak ditetapkan, default keyboard adalah membuat perintah tombol media. Jika menekan tombol Penelusuran, tombol tersebut akan berubah menjadi tombol fungsi.</translation> -<translation id="2353442107789326507">Daftar setelan layanan Konektor Chrome Enterprise yang akan diterapkan ke Konektor Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, yang terpicu saat file dilampirkan ke Chrome. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan file untuk dianalisis saat dilampirkan ke halaman tertentu, dan jenis tag yang perlu disertakan dalam permintaan analisis untuk file tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' yang memiliki tag sama yang cocok dengan URL halaman itu. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ditetapkan ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses halaman ke file tersebut. Jika nilai berupa bilangan bulat lainnya, Chrome akan memberikan akses halaman ke file secara langsung. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang dilindungi sandi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang berukuran terlalu besar untuk dianalisis (lebih dari 50 MB). - - Kebijakan ini hanya dapat ditetapkan dari konsol Google Admin.</translation> <translation id="2358176879566587521">Kebijakan ini dihapus. Kebijakan ini tidak kompatibel dengan versi <ph name="PRODUCT_NAME" /> ini. Baca selengkapnya di https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Mode pengalaman aktivasi Asisten</translation> <translation id="2384233438419344179">Jika kebijakan disetel ke Aktif, elemen halaman web yang tidak berasal dari domain di kolom URL browser tidak dapat menyetel cookie. Jika kebijakan disetel ke Nonaktif, elemen tersebut akan dapat menyetel cookie dan pengguna tidak dapat mengubah setelan ini. @@ -4616,17 +4603,6 @@ <translation id="7701341006446125684">Menyetel ukuran cache Ekstensi dan Aplikasi (dalam byte)</translation> <translation id="7703737669292992839">Cegah dialog pemilihan file</translation> <translation id="7709470712369261710">Jangan gunakan layanan Google untuk memberikan deskripsi gambar otomatis</translation> -<translation id="7710950688502974809">Daftar setelan layanan Konektor Chrome Enterprise yang akan diterapkan ke Konektor Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, yang terpicu saat data dimasukkan ke Chrome dari papan klip atau dengan menarik lalu melepas konten web. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan data untuk dianalisis saat dimasukkan ke halaman tertentu, dan jenis tag yang perlu disertakan dalam permintaan analisis untuk data tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' yang memiliki tag sama yang cocok dengan URL halaman itu. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> disetel ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses halaman ke data tersebut. Jika nilai berupa bilangan bulat lainnya, Chrome akan memberikan akses halaman ke data secara langsung. - - Kolom <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> menunjukkan bahwa ukuran minimum data (dalam byte) yang dimasukkan di Chrome harus sama atau lebih besar agar dapat dipindai. Nilai defaultnya adalah 100 byte jika kolom tidak disetel. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="7712109699186360774">Tanyakan setiap kali situs ingin mengakses kamera dan/atau mikrofon</translation> <translation id="7713608076604149344">Batasan download</translation> <translation id="7715711044277116530">Persentase yang digunakan untuk menskalakan penundaan layar redup dalam mode presentasi</translation> @@ -4816,19 +4792,6 @@ Kebijakan ini tidak berpengaruh jika disetel ke benar (true), dibiarkan kosong, atau tidak disetel.</translation> <translation id="8011935490612940798">Mengontrol fitur <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Putar layar sebesar 0 derajat</translation> -<translation id="8027265928215448940">Daftar setelan layanan Konektor Chrome Enterprise yang akan diterapkan ke Konektor Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, yang memicu saat file didownload di Chrome. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan file untuk dianalisis saat didownload dari halaman tertentu dan tag yang perlu disertakan dalam permintaan analisis untuk file tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' yang memiliki tag sama yang cocok dengan URL halaman itu. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ditetapkan ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses pengguna ke file yang didownload. Jika nilai berupa bilangan bulat lainnya, Chrome akan memberikan akses pengguna ke file secara langsung. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang dilindungi sandi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang berukuran terlalu besar untuk dianalisis (lebih dari 50 MB). - - Kebijakan ini hanya dapat ditetapkan dari konsol Google Admin.</translation> <translation id="8033913082323846868">Kebijakan ini tidak digunakan lagi di M70. Sebagai gantinya, gunakan AutofillAddressEnabled dan AutofillCreditCardEnabled. Mengaktifkan fitur IsiOtomatis <ph name="PRODUCT_NAME" /> dan mengizinkan pengguna untuk melengkapi formulir web secara otomatis menggunakan informasi yang tersimpan sebelumnya, seperti alamat atau informasi kartu kredit.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 75c6fbd..410c1f51 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -897,19 +897,6 @@ <translation id="2349117476121456297">Se il criterio è impostato su True, i tasti della fila superiore della tastiera riprodurranno i comandi dei tasti funzione. Per ripristinare il comportamento dei tasti multimediali, è necessario premere il tasto per la ricerca. Se il criterio è impostato su False o non è impostato, la tastiera riprodurrà i comandi dei tasti multimediali per impostazione predefinita. Per ripristinare il comportamento dei tasti funzione, è necessario premere il tasto per la ricerca.</translation> -<translation id="2353442107789326507">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, che si attiva quando un file viene allegato a Chrome. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per stabilire se il connettore deve inviare un file per l'analisi quando viene allegato a una pagina specifica e quali tag includere nella richiesta di analisi di tale file. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag finché nessun pattern "disable" con lo stesso tag corrisponde all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di analisi a cui corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> viene impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere alla pagina l'accesso al file. Con qualsiasi altro valore intero, Chrome concede immediatamente l'accesso al file. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> consente di stabilire se Chrome blocca o autorizza i file protetti tramite password. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> consente di stabilire se Chrome blocca o autorizza i file troppo grandi per essere analizzati (dimensioni superiori a 50 MB). - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="2358176879566587521">Il criterio è rimosso. Non è compatibile con questa versione di <ph name="PRODUCT_NAME" />. Leggi ulteriori informazioni all'indirizzo https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Modalità dell'esperienza di onboarding dell'assistente</translation> <translation id="2384233438419344179">Se il criterio è impostato su Attivato, gli elementi della pagina web che non provengono dal dominio presente nella barra degli indirizzi del browser non possono impostare i cookie. Se il criterio è impostato su Disattivato, tali elementi possono impostare i cookie e gli utenti non possono modificare l'impostazione. @@ -4594,17 +4581,6 @@ <translation id="7701341006446125684">Imposta le dimensioni della cache di app ed estensioni (in byte)</translation> <translation id="7703737669292992839">Blocca finestre di dialogo per la selezione di file</translation> <translation id="7709470712369261710">Non usare i servizi Google per fornire le descrizioni immagini automatiche</translation> -<translation id="7710950688502974809">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, che si attiva quando vengono inseriti dati in Chrome dagli appunti o tramite trascinamento di contenuti web. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per stabilire se il connettore deve inviare dati per l'analisi quando viene inserito in una pagina specifica e quali tag includere nella richiesta di analisi di tali dati. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag purché nessun pattern "disable" con lo stesso tag corrisponda all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di analisi cui corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> viene impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere alla pagina l'accesso ai dati. Con qualsiasi altro valore intero, Chrome concede immediatamente alla pagina l'accesso ai dati. - - Il campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica le dimensioni minime (in byte) che devono avere i dati inseriti in Chrome per poter essere analizzati. Se il campo non viene impostato, il valore predefinito è 100 byte. - - Questo criterio può essere impostato soltanto dalla Console di amministrazione Google.</translation> <translation id="7712109699186360774">Chiedi ogni volta che un sito vuole accedere alla fotocamera e/o al microfono</translation> <translation id="7713608076604149344">Limitazioni dei download</translation> <translation id="7715711044277116530">Percentuale di regolazione del ritardo di oscuramento dello schermo in modalità di presentazione</translation> @@ -4794,19 +4770,6 @@ Il criterio non ha effetto se impostato su True, se non viene impostato o se viene lasciato vuoto.</translation> <translation id="8011935490612940798">Controlla la funzionalità di <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Ruota lo schermo di 0°</translation> -<translation id="8027265928215448940">Elenco di impostazioni per i servizi dei connettori di Chrome Enterprise da applicare al connettore di Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, che si attiva quando un file viene scaricato in Chrome. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per determinare se il connettore deve inviare un file per l'analisi quando viene scaricato da una pagina specifica e quali tag includere nella richiesta di analisi per quel file. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag finché nessun pattern "disable" con lo stesso tag corrisponde all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a quali fornitori di servizi di analisi corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> è impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere l'accesso all'utente al file scaricato. Con qualsiasi altro valore intero, Chrome concede all'utente l'accesso al file immediatamente. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controlla se Chrome blocca o autorizza i campi protetti da una password. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controlla se Chrome blocca o autorizza i file troppo grandi per essere analizzati (oltre i 50 MB). - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="8033913082323846868">Questa norma è stata ritirata in M70, utilizza le norme AutofillAddressEnabled e AutofillCreditCardEnabled. Consente di attivare la funzione Compilazione automatica di <ph name="PRODUCT_NAME" /> e permette agli utenti di eseguire il completamento automatico dei moduli web utilizzando informazioni memorizzate in precedenza, come l'indirizzo o i dati della carta di credito.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 3c1da3f..f87207a 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -895,19 +895,6 @@ <translation id="2349117476121456297">このポリシーを True に設定した場合、キーボードの最上段のキーがファンクション キーのコマンドとして機能します。検索キーを押すと、メディアキーの動作に戻ります。 このポリシーを False に設定するか設定しない場合、最上段のキーを押すとデフォルトでメディアキーのコマンドが実行されます。検索キーを押すと、これらのキーはファンクション キーに変わります。</translation> -<translation id="2353442107789326507"><ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome にファイルが添付されている場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> のフィールドは、特定のページに添付されているファイルをコネクタで分析のため送信すべきかどうかと、そのファイルの分析リクエストにどのタグを含めるかを判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> では、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> を 1 に設定した場合、Chrome では分析サービスからの応答を待ってから、ページにファイルへのアクセスを許可します。その他の整数値を設定した場合、Chrome ではページにファイルへのアクセスをただちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> では、パスワードで保護されているファイルをブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> では、分析可能なサイズより大きいファイル(50 MB 以上)をブロックするか許可するかを指定します。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="2358176879566587521">このポリシーは削除されました。このバージョンの <ph name="PRODUCT_NAME" /> には対応していません。詳しくは、https://support.google.com/chrome/a/answer/7643500 をご覧ください。</translation> <translation id="2364639863953745682">アシスタントのオンボーディング エクスペリエンスのモード</translation> <translation id="2384233438419344179">このポリシーを有効に設定した場合、ブラウザのアドレスバーに表示されているドメイン以外のウェブページ要素からは、Cookie を設定できなくなります。このポリシーを無効に設定した場合、これらの要素による Cookie の設定が許可され、ユーザーはこの設定を変更できません。 @@ -4502,17 +4489,6 @@ <translation id="7701341006446125684">アプリと拡張機能のキャッシュ サイズを設定する(バイト単位)</translation> <translation id="7703737669292992839">ファイル選択ダイアログを表示しない</translation> <translation id="7709470712369261710">Google サービスを使用して画像の説明を自動的に取得しない</translation> -<translation id="7710950688502974809"><ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise Connectors サービス設定のリストで、Chrome でクリップボードからデータが入力された場合、またはウェブ コンテンツがドラッグ&ドロップされた場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> のフィールドは、特定のページに入力されたデータをコネクタで分析のため送信すべきかどうかと、そのデータの分析リクエストにどのタグを含めるかを判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> では、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> を 1 に設定した場合、Chrome では分析サービスからの応答を待ってから、ページにデータへのアクセスを許可します。その他の整数値を設定した場合、Chrome ではページにデータへのアクセスをただちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> フィールドは、Chrome に入力されたデータの最小サイズ(バイト数)がこの値以上でないとスキャンできないことを示します。このフィールドを未設定のままにした場合は、デフォルト値の 100 バイトが使用されます。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="7712109699186360774">カメラやマイクへのアクセスをサイトが要求するたびに確認する</translation> <translation id="7713608076604149344">ダウンロードの制限</translation> <translation id="7715711044277116530">プレゼンテーション モードで画面を暗くするまでの時間に掛ける倍率</translation> @@ -4702,19 +4678,6 @@ このポリシーが true、空白のまま、または未設定の場合、ポリシーは無視されます。</translation> <translation id="8011935490612940798"><ph name="PRODUCT_NAME" /> の機能を制御する。</translation> <translation id="802147957407376460">画面を 0 度回転(回転なし)</translation> -<translation id="8027265928215448940"><ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome でファイルがダウンロードされた場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> のフィールドは、特定のページからダウンロードされたファイルを分析のためコネクタが送信すべきかどうかと、そのファイルの分析リクエストにどのタグを含めるかをコネクタで判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> では、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> を 1 に設定した場合、Chrome では分析サービスからの応答を待ってから、ダウンロードされたファイルへのユーザーのアクセスを許可します。その他の整数値を設定した場合、Chrome ではユーザーにファイルへのアクセスを直ちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> では、パスワードで保護されているファイルをブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> では、分析可能なサイズより大きいファイル(50 MB 以上)をブロックするか許可するかを指定します。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="8033913082323846868">このポリシーは M70 でサポート終了となりました。代わりに AutofillAddressEnabled と AutofillCreditCardEnabled を使用してください。 <ph name="PRODUCT_NAME" /> の自動入力機能を有効にし、ユーザーが以前に保存した情報(住所やクレジット カード情報など)を使用してウェブフォームに自動入力できるようにします。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index d223a4c5..850a5d9a 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -913,19 +913,6 @@ <translation id="2349117476121456297">이 정책을 True로 설정하면 맨 윗줄에 있는 키의 동작을 기능 키 명령어로 변경합니다 검색 키를 누르면 다시 미디어 키 동작으로 돌아옵니다. 정책을 False로 설정하거나 설정하지 않으면 키보드는 기본적으로 미디어 키 명령어를 만듭니다. 검색 키를 누르면 기능 키로 변경됩니다.</translation> -<translation id="2353442107789326507"><ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, 파일이 Chrome에 첨부될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 파일이 특정 페이지에 첨부되었을 때 커넥터가 분석을 위해 파일을 전송할지 여부와 파일 분석 요청에 어떤 태그를 포함할지 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정에 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 페이지에 파일 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 페이지에 파일 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 필드는 Chrome에서 비밀번호로 보호된 파일을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 필드는 Chrome에서 크기가 커서 분석하기 어려운 파일(50MB 이상)을 차단 또는 허용할지 결정합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="2358176879566587521">이 정책은 삭제되었습니다. 이 <ph name="PRODUCT_NAME" /> 버전과 호환되지 않습니다 . 자세한 내용은 https://support.google.com/chrome/a/answer/7643500을 참조하세요.</translation> <translation id="2364639863953745682">어시스턴트 온보딩 환경 모드</translation> <translation id="2384233438419344179">정책을 사용으로 설정하면 브라우저의 주소 표시줄에 있는 도메인이 출처가 아닌 웹페이지 요소가 쿠키를 설정할 수 없습니다. 사용 안함으로 설정하면 이러한 요소가 쿠키를 설정하도록 허용하고 사용자가 설정을 변경할 수 없습니다. @@ -4616,17 +4603,6 @@ <translation id="7701341006446125684">앱 및 확장 프로그램 캐시 크기 설정(단위: 바이트)</translation> <translation id="7703737669292992839">파일 선택 대화상자 차단</translation> <translation id="7709470712369261710">자동 생성된 이미지 설명을 제공하는 Google 서비스를 사용하지 않음</translation> -<translation id="7710950688502974809"><ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, 클립보드에서 Chrome으로 데이터가 입력되거나 웹 콘텐츠가 드래그 앤 드롭으로 Chrome에 입력될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 데이터가 특정 페이지에서 입력되었을 때 커넥터가 분석을 위해 데이터를 전송할지 여부와 데이터 분석 요청에 어떤 태그를 포함할지를 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정에 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 페이지에 데이터 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 페이지에 데이터 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 필드는 Chrome에 입력된 데이터가 검사되기 위해 같거나 초과해야 하는 최소 크기(바이트)를 나타냅니다. 필드가 설정되지 않을 경우 기본값은 100바이트입니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="7712109699186360774">사이트가 카메라 또는 마이크에 액세스하려고 할 때마다 확인함</translation> <translation id="7713608076604149344">다운로드 제한</translation> <translation id="7715711044277116530">프레젠테이션 모드에서 화면 어둡게 하기 지연 시간이 조정되는 비율</translation> @@ -4821,19 +4797,6 @@ 정책은 True로 설정되거나, 비어 있거나, 설정되지 않을 경우 아무런 영향을 미치지 않습니다.</translation> <translation id="8011935490612940798"><ph name="PRODUCT_NAME" /> 기능을 제어합니다.</translation> <translation id="802147957407376460">화면을 0도 회전</translation> -<translation id="8027265928215448940"><ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Connector에 적용할 Chrome Enterprise Connector 서비스 설정의 목록으로, 파일이 Chrome에서 다운로드될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 파일이 특정 페이지에서 다운로드되었을 때 Connector가 분석을 위해 파일을 전송할지 여부와 파일 분석 요청에 어떤 태그를 포함할지를 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정에 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 사용자에게 다운로드된 파일 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 사용자에게 파일 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 필드는 Chrome에서 비밀번호로 보호된 파일을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 필드는 Chrome에서 크기가 커서 분석하기 어려운 파일(50MB 이상)을 차단 또는 허용할지 결정합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="8033913082323846868">이 정책은 M70에서 지원이 중단되었습니다. 대신 AutofillAddressEnabled 및 AutofillCreditCardEnabled를 사용하시기 바랍니다. <ph name="PRODUCT_NAME" />의 자동 완성 기능을 사용 설정하여 사용자가 주소나 신용카드 정보와 같이 이전에 저장한 정보를 이용하여 웹 양식을 자동으로 완성할 수 있습니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index a45cd2bf..3c87896 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -894,19 +894,6 @@ <translation id="2349117476121456297">Als dit beleid wordt ingesteld op True, fungeert de bovenste rij toetsen van het toetsenbord als functietoetsopdrachten. De zoektoets moet worden ingedrukt om het gedrag terug te zetten naar mediatoetsen. Als dit beleid wordt ingesteld op False of niet wordt ingesteld, voert het toetsenbord standaard mediatoetsopdrachten uit. De zoektoets moet worden ingedrukt om ze te wijzigen in functietoetsen.</translation> -<translation id="2353442107789326507">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als een bestand wordt bijgevoegd in Chrome. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector een bestand voor analyse moet sturen als het is bijgevoegd bij een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor dat bestand. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste één tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> wordt ingesteld op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de pagina toegang tot het bestand geeft. Elke andere waarde met een geheel getal betekent dat Chrome de pagina onmiddellijk toegang tot het bestand geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> bepaalt of Chrome bestanden die zijn beveiligd met een wachtwoord blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> bepaalt of Chrome bestanden die te groot zijn om te worden geanalyseerd (meer dan 50 MB) blokkeert of toestaat. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="2358176879566587521">Dit beleid is verwijderd. Het werkt niet met deze versie van <ph name="PRODUCT_NAME" />. Ga naar https://support.google.com/chrome/a/answer/7643500 voor meer informatie</translation> <translation id="2364639863953745682">Modus voor introductie van de Assistent</translation> <translation id="2384233438419344179">Als je het beleid inschakelt, kunnen webpagina-elementen die niet afkomstig zijn van het domein dat in de adresbalk van de browser staat, geen cookies instellen. Als je het beleid uitschakelt, kunnen die elementen cookies instellen en kunnen gebruikers deze instelling niet wijzigen. @@ -4580,17 +4567,6 @@ <translation id="7701341006446125684">Formaat van cache voor apps en extensies instellen (in bytes)</translation> <translation id="7703737669292992839">Dialoogvensters voor bestandsselectie niet toestaan</translation> <translation id="7709470712369261710">Google-services niet gebruiken om automatische beschrijvingen van afbeeldingen te leveren</translation> -<translation id="7710950688502974809">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als gegevens in Chrome worden ingevoerd vanaf het klembord of door slepen en neerzetten van webcontent. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector gegevens voor analyse moet sturen als ze worden ingevoerd op een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor die gegevens. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste één tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> wordt ingesteld op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de pagina toegang tot de gegevens geeft. Elke andere waarde met een geheel getal betekent dat Chrome de pagina onmiddellijk toegang tot de gegevens geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> geeft de minimum grootte (in bytes) aan die in Chrome ingevoerde gegevens ten minste moeten hebben om te worden gescand. De standaard waarde is 100 bytes als het veld niet is ingesteld. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="7712109699186360774">Altijd goedkeuring vragen wanneer een site toegang wil hebben tot de camera en/of microfoon</translation> <translation id="7713608076604149344">Downloadbeperkingen</translation> <translation id="7715711044277116530">Percentage waarmee de dimvertraging van het scherm in de presentatiemodus wordt geschaald</translation> @@ -4785,19 +4761,6 @@ Dit beleid is niet geldig als het is ingesteld op True, leeg wordt gelaten of niet wordt ingesteld.</translation> <translation id="8011935490612940798">De functie <ph name="PRODUCT_NAME" /> beheren.</translation> <translation id="802147957407376460">Scherm 0 graden draaien</translation> -<translation id="8027265928215448940">Lijst met instellingen voor Chrome Enterprise-connectorservices die moeten worden toegepast op de Enterprise-connector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als een bestand wordt gedownload in Chrome. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector een bestand voor analyse moet sturen als het wordt gedownload vanaf een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor dat bestand. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste één tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> wordt ingesteld op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de gebruiker toegang tot het gedownloade bestand geeft. Elke andere waarde met een geheel getal betekent dat Chrome de gebruiker onmiddellijk toegang tot het bestand geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> bepaalt of Chrome bestanden die zijn beveiligd met een wachtwoord blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> bepaalt of Chrome bestanden die te groot zijn om te worden geanalyseerd (meer dan 50 MB) blokkeert of toestaat. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="8033913082323846868">Dit beleid is beëindigd in M70. Gebruik in plaats hiervan AutofillAddressEnabled en AutofillCreditCardEnabled. Hiermee wordt de functie 'Automatisch invullen' van <ph name="PRODUCT_NAME" /> ingeschakeld en wordt gebruikers toegestaan webformulieren automatisch in te vullen met eerder opgeslagen informatie zoals adres- of creditcardgegevens.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 61af764..3f871f5 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -899,19 +899,6 @@ <translation id="2349117476121456297">Se esta política for definida como verdadeira, a primeira linha de teclas do teclado funcionará como comandos de teclas de função. Pressionar a tecla de pesquisa faz com que elas voltem a funcionar como teclas de mídia. Se esta política for definida como falsa, as teclas funcionarão como comandos de teclas de mídia por padrão. Pressionar a tecla de pesquisa faz com que elas funcionem como teclas de função.</translation> -<translation id="2353442107789326507">Lista de configurações dos serviços do Chrome Enterprise Connectors que serão aplicadas ao <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, que é ativado quando um arquivo é anexado ao Chrome. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará um arquivo para análise quando for anexado a uma página específica e quais tags serão incluídas na solicitação de análise do arquivo. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar à página acesso ao arquivo. Qualquer outro valor inteiro dará à página acesso imediato ao arquivo. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla se o Chrome bloqueia ou permite arquivos protegidos por senha. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla se o Chrome bloqueia ou permite arquivos grandes demais para serem analisados (50 MB ou mais). - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="2358176879566587521">Esta política foi removida. Ela não é compatível com esta versão do <ph name="PRODUCT_NAME" />. Leia mais em https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Modo da experiência de integração do Assistente</translation> <translation id="2384233438419344179">Se a política for definida como "Ativada", os cookies não poderão ser definidos por elementos de página da Web que não sejam do domínio que está na barra de endereço do navegador. Se a política for definida como "Desativada", os cookies poderão ser definidos por esses elementos e os usuários serão impedidos de mudar essa configuração. @@ -4579,17 +4566,6 @@ <translation id="7701341006446125684">Definir o tamanho do cache de aplicativos e extensões (em bytes)</translation> <translation id="7703737669292992839">Impedir caixas de diálogo para seleção de arquivo</translation> <translation id="7709470712369261710">Não permitir que os Serviços do Google forneçam descrições automáticas de imagens</translation> -<translation id="7710950688502974809">Lista de configurações para os serviços do Chrome Enterprise Connectors que serão aplicadas ao conector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, que é acionado quando dados são inseridos no Chrome pela área de transferência ou arrastando e soltando conteúdos da Web. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará dados para análise quando eles forem inseridos em uma página específica e quais tags serão incluídas na solicitação de análise desses dados. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar à página acesso aos dados. Qualquer outro valor inteiro dará à página acesso imediato aos dados. - - O campo "<ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" />" indica que o tamanho mínimo (em bytes) dos dados inseridos no Chrome precisa ser igual ou maior para ser verificado. Se o campo não for definido, o valor padrão será de 100 bytes. - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="7712109699186360774">Perguntar toda vez que um site quiser acessar minha câmera e/ou meu microfone</translation> <translation id="7713608076604149344">Restrições de downloads</translation> <translation id="7715711044277116530">Percentual pelo qual calcular o intervalo de escurecimento da tela no modo de apresentação</translation> @@ -4779,19 +4755,6 @@ Esta política não terá efeito se for definida como verdadeira, deixada vazia ou sem definição.</translation> <translation id="8011935490612940798">Controlar o recurso de <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Girar tela em 0 graus</translation> -<translation id="8027265928215448940">Lista de configurações para os serviços de conectores do Chrome Enterprise que serão aplicadas ao conector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, que é acionado quando o download de um arquivo é feito no Chrome. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará um arquivo para análise quando o download for feito de uma página específica e quais tags serão incluídas na solicitação de análise do arquivo. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar ao usuário acesso ao arquivo. Qualquer outro valor inteiro dará ao usuário acesso imediato ao arquivo. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla se o Chrome bloqueia ou permite arquivos protegidos por senha. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla se o Chrome bloqueia ou permite arquivos grandes demais para serem analisados (50 MB ou mais). - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="8033913082323846868">O uso desta política foi suspenso no M70. Em vez dela, use AutofillAddressEnabled e AutofillCreditCardEnabled. Ativa o recurso Preenchimento automático do <ph name="PRODUCT_NAME" /> e permite que os usuários preencham formulários da Web automaticamente usando informações previamente armazenadas, como dados de endereço ou cartão de crédito.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 55a58ff..2a75e04 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -904,19 +904,6 @@ <translation id="2349117476121456297">Если для правила задано значение True, клавиши верхнего ряда будут выполнять роль функциональных. При нажатии клавиши поиска они будут использоваться как мультимедийные клавиши. Если правило не настроено или для него задано значение False, клавиши будут использоваться для управления мультимедиа. При нажатии клавиши поиска они будут выполнять роль функциональных.</translation> -<translation id="2353442107789326507">Список настроек, применяемых к коннектору <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается, когда к Chrome прикрепляется файл. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ файл, который прикрепляется к определенной странице, и какие теги необходимо добавить в запрос на анализ этого файла. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Файл будет отправлен на анализ, если хотя бы один тег соответствует шаблону для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять странице доступ к файлу. Любое другое целое число в этом поле означает, что страница получит доступ к файлу сразу. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> определяет, будет ли Chrome блокировать или разрешать файлы, защищенные паролем. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> определяет, будет ли Chrome блокировать или разрешать прикрепление файлов, слишком больших для анализа (более 50 МБ). - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="2358176879566587521">Это правило удалено. Оно несовместимо с данной версией<ph name="PRODUCT_NAME" />. Подробная информация доступна на странице https://support.google.com/chrome/a/answer/7643500.</translation> <translation id="2364639863953745682">Режим знакомства с Ассистентом</translation> <translation id="2384233438419344179">Если правило включено, элементам веб-страниц из других доменов (то есть любых доменов, кроме указанного в адресной строке) запрещается сохранять файлы cookie. Если правило отключено, таким элементам разрешено сохранять файлы cookie, а пользователи не могут менять эту настройку. @@ -4588,17 +4575,6 @@ <translation id="7701341006446125684">Задать размер кеша для приложений и расширений (в байтах)</translation> <translation id="7703737669292992839">Запретить использование диалоговых окон для выбора файлов</translation> <translation id="7709470712369261710">Не использовать сервисы Google для автоматического создания описаний к изображениям</translation> -<translation id="7710950688502974809">Список настроек, применяемых к коннектору <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается при вставке в Chrome данных из буфера обмена или перетаскивании веб-контента. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ данные, которые вставляются на определенной странице, и какие теги необходимо добавить в запрос на анализ этих данных. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Данные отправляются на анализ, если хотя бы один тег подходит для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять странице доступ к данным. Любое другое целое число в этом поле означает, что страница получит доступ к данным сразу. - - В поле <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> вводится минимальное количество байтов, которое должны включать вставленные в Chrome данные, чтобы был выполнен их анализ. Если не указать собственное значение, минимальное количество по умолчанию будет равно 100 байтам. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="7712109699186360774">Предупреждать, что сайт пытается получить доступ к камере или микрофону</translation> <translation id="7713608076604149344">Ограничения скачивания</translation> <translation id="7715711044277116530">Коэффициент увеличения задержки затемнения экрана в режиме презентации</translation> @@ -4788,19 +4764,6 @@ Если указано значение True или пустое значение либо правило не настроено, правило не действует.</translation> <translation id="8011935490612940798">Управление функцией <ph name="PRODUCT_NAME" /></translation> <translation id="802147957407376460">Повернуть экран на 0 градусов</translation> -<translation id="8027265928215448940">Список настроек, применяемых к коннектору <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается при скачивании файлов из Chrome. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ файл, который скачивается с определенной страницы, и какие теги необходимо добавить в запрос на анализ этого файла. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Файл будет отправлен на анализ, если хотя бы один тег соответствует шаблону для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять пользователю доступ к скачанному файлу. Любое другое целое число в этом поле означает, что пользователь получит доступ к файлу сразу. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> определяет, будет ли Chrome блокировать или разрешать файлы, защищенные паролем. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> определяет, будет ли Chrome блокировать или разрешать слишком большие для анализа файлы (более 50 МБ). - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="8033913082323846868">Не поддерживается в M70. Используйте правила AutofillAddressEnabled и AutofillCreditCardEnabled. Включает функцию автозаполнения в <ph name="PRODUCT_NAME" /> и разрешает автоматически заполнять веб-формы, например адреса или номера банковских карт.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 00a05c3..e70bdac 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -892,19 +892,6 @@ <translation id="2349117476121456297">การตั้งค่านโยบายเป็น "จริง" จะทำให้แป้นแถวบนสุดบนแป้นพิมพ์ทำหน้าที่เป็นคำสั่งแป้นฟังก์ชัน การกดแป้นค้นหาจะเปลี่ยนลักษณะการทำงานของแป้นดังกล่าวกลับไปเป็นแป้นสื่อ หากตั้งค่านโยบายเป็น "เท็จ" หรือไม่ได้ตั้งค่า แป้นพิมพ์จะมีค่าเริ่มต้นเป็นส่งคำสั่งแป้นสื่อ การกดแป้นค้นหาจะเปลี่ยนลักษณะการทำงานเป็นแป้นฟังก์ชัน</translation> -<translation id="2353442107789326507">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีไฟล์แนบไปกับ Chrome - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งไฟล์สำหรับการวิเคราะห์หรือไม่เมื่อมีการแนบไฟล์มากับหน้าที่เฉพาะเจาะจง และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับไฟล์นั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์หน้าในการเข้าถึงไฟล์ ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์หน้าในการเข้าถึงไฟล์โดยทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตไฟล์ที่มีการป้องกันด้วยรหัสผ่าน - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตให้วิเคราะห์ไฟล์ที่มีขนาดใหญ่เกินไป (50 MB ขึ้นไป) - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="2358176879566587521">เรานำนโยบายนี้ออกแล้ว เพราะใช้กับ <ph name="PRODUCT_NAME" /> เวอร์ชันนี้ไม่ได้ อ่านเพิ่มเติมที่ https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">โหมดของการเริ่มต้นใช้งาน Assistant</translation> <translation id="2384233438419344179">การตั้งค่านโยบายเป็น "เปิดใช้" จะป้องกันไม่ให้องค์ประกอบหน้าเว็บที่ไม่ได้มาจากโดเมนในแถบที่อยู่ของเบราว์เซอร์ตั้งค่าคุกกี้ การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้องค์ประกอบเหล่านั้นตั้งค่าคุกกี้ได้และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้ @@ -4568,17 +4555,6 @@ <translation id="7701341006446125684">ตั้งค่าขนาดแคชของแอปและส่วนขยาย (เป็นไบต์)</translation> <translation id="7703737669292992839">ป้องกันกล่องโต้ตอบการเลือกไฟล์</translation> <translation id="7709470712369261710">ไม่ใช้บริการของ Google เพื่อให้คำอธิบายรูปภาพอัตโนมัติ</translation> -<translation id="7710950688502974809">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการป้อนข้อมูลใน Chrome จากคลิปบอร์ดหรือผ่านการลากและวางเนื้อหาเว็บ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งข้อมูลสำหรับการวิเคราะห์หรือไม่เมื่อมีการป้อนข้อมูลจากหน้าหนึ่งๆ และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับข้อมูลนั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์หน้าในการเข้าถึงข้อมูล ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์หน้าในการเข้าถึงข้อมูลโดยทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> ระบุขนาดขั้นต่ำ (หน่วยเป็นไบต์) ข้อมูลที่ป้อนใน Chrome ต้องเท่ากับหรือเกินค่านี้จึงจะได้รับการสแกน ค่าเริ่มต้นคือ 100 ไบต์หากไม่ได้ตั้งค่าช่องนี้ - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="7712109699186360774">ถามทุกครั้งที่ไซต์ต้องการเข้าถึงกล้องและ/หรือไมโครโฟน</translation> <translation id="7713608076604149344">ข้อจำกัดในการดาวน์โหลด</translation> <translation id="7715711044277116530">เปอร์เซ็นต์ของระดับการปรับการหน่วงเวลาการสลัวหน้าจอในโหมดการนำเสนอ</translation> @@ -4768,19 +4744,6 @@ นโยบายนี้จะไม่มีผลหากตั้งค่าเป็น "จริง" ปล่อยว่างไว้ หรือไม่ได้ตั้งค่า</translation> <translation id="8011935490612940798">ควบคุมฟีเจอร์ <ph name="PRODUCT_NAME" /></translation> <translation id="802147957407376460">หมุนหน้าจอ 0 องศา</translation> -<translation id="8027265928215448940">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการดาวน์โหลดไฟล์ใน Chrome - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งไฟล์สำหรับการวิเคราะห์หรือไม่เมื่อมีการดาวน์โหลดไฟล์จากหน้าหนึ่งๆ และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับไฟล์นั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์ผู้ใช้เข้าถึงไฟล์ที่ดาวน์โหลด ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์ผู้ใช้เข้าถึงไฟล์นั้นทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตไฟล์ที่มีการป้องกันด้วยรหัสผ่าน - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตให้วิเคราะห์ไฟล์ที่มีขนาดใหญ่เกินไป (50 MB ขึ้นไป) - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="8033913082323846868">นโยบายนี้เลิกใช้งานไปแล้วใน M70 โปรดใช้ AutofillAddressEnabled และ AutofillCreditCardEnabled แทน เปิดใช้ฟีเจอร์ป้อนอัตโนมัติของ <ph name="PRODUCT_NAME" /> และอนุญาตให้ผู้ใช้เติมคำอัตโนมัติในเว็บฟอร์มโดยใช้ข้อมูลที่เก็บไว้ก่อนหน้านี้ เช่น ที่อยู่หรือข้อมูลบัตรเครดิต
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 78585b5..a84d5ba 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -896,19 +896,6 @@ <translation id="2349117476121456297">Politikayı True (Doğru) değerine ayarlamak, klavyenin en üst sırasındaki tuşların işlev tuşu komutları olarak davranmasını sağlar. Arama tuşuna basmak, bunların davranışını tekrar medya tuşu olarak değiştirir. False (Yanlış) değerine ayarlanırsa veya ayarlanmazsa klavye varsayılan olarak medya tuşu komutları oluşturur. Arama tuşuna basmak, bunları işlev tuşu olarak değiştirir.</translation> -<translation id="2353442107789326507">Chrome'a bir dosya eklendiğinde tetiklenen <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Bağlayıcılar hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfaya eklendiğinde analiz için dosya gönderip göndermemesi gerektiğini ve bu dosyanın analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Bu, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse gerçekleşmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un dosyaya sayfaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un dosyaya sayfaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> alanı, Chrome'un şifre korumalı dosyaları engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> alanı, Chrome'un analiz edilemeyecek kadar büyük dosyaları (50 MB'tan büyük) engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="2358176879566587521">Bu politika kullanımdan kaldırılmıştır. <ph name="PRODUCT_NAME" /> ürününün bu versiyonuyla uyumlu değildir. Daha fazla bilgiyi https://support.google.com/chrome/a/answer/7643500 adresinde bulabilirsiniz</translation> <translation id="2364639863953745682">Asistan ilk katılım deneyimi modu</translation> <translation id="2384233438419344179">Politikanın Etkin değerine ayarlanması tarayıcının adres çubuğundaki alan adına ait olmayan web sayfası öğelerinin çerez yerleştirmesini engeller. Politikanın Devre Dışı değerine ayarlanması bu öğelerin çerez yerleştirmesine izin verir ve kullanıcıların bu ayarı değiştirmelerini önler. @@ -4585,17 +4572,6 @@ <translation id="7701341006446125684">Uygulamalar ve Uzantılar için önbellek boyutunu ayarla (bayt olarak)</translation> <translation id="7703737669292992839">Dosya seçimi iletişim kutularını engelle</translation> <translation id="7709470712369261710">Otomatik resim açıklamaları sağlamak için Google hizmetlerini kullanma</translation> -<translation id="7710950688502974809">Chrome'da panodan veri girildiğinde veya web içeriği sürüklenip bırakıldığında tetiklenen <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Bağlayıcılar hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfada girildiğinde analiz için veri gönderip göndermemesi gerektiğini ve bu veri analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Bu, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse gerçekleşmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un verilere sayfaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un verilere sayfaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> alanı, Chrome'a girilen verilerin taranabilmesi için eşit olması veya aşması gereken minimum boyutu (bayt cinsinden) belirtir. Alan ayarlanmadan bırakılırsa varsayılan değer 100 bayttır. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="7712109699186360774">Bir site kamera ve/veya mikrofona erişmek istediğinde her zaman sor</translation> <translation id="7713608076604149344">İndirme kısıtlamaları</translation> <translation id="7715711044277116530">Sunum modunda ekranın kararma gecikmesinin ölçekleneceği yüzde</translation> @@ -4790,19 +4766,6 @@ Doğru değerine ayarlanırsa, boş bırakılırsa veya ayarlanmazsa bu politikanın hiçbir etkisi olmaz.</translation> <translation id="8011935490612940798"><ph name="PRODUCT_NAME" /> özelliğini kontrol eder.</translation> <translation id="802147957407376460">Ekranı 0 derece döndür</translation> -<translation id="8027265928215448940">Chrome'da bir dosya indirildiğinde tetiklenen <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Bağlayıcılar hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfayadan indirildiğinde analiz için dosya gönderip göndermemesi gerektiğini ve bu dosyanın analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Bu, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse gerçekleşmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un kullanıcıya indirilen dosyaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un, kullanıcının dosyaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> alanı, Chrome'un şifre korumalı dosyaları engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> alanı, Chrome'un analiz edilemeyecek kadar büyük dosyaları (50 MB'tan büyük) engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="8033913082323846868">Bu politika M70 sürümünde kullanımdan kaldırılmıştır. Lütfen bunun yerine AutofillAddressEnabled ve AutofillCreditCardEnabled politikalarını kullanın. <ph name="PRODUCT_NAME" /> içinde bulunan Otomatik Doldurma özelliğini etkinleştirir ve kullanıcıların adresler ve kredi kartı bilgileri gibi önceden saklanmış bilgileri kullanarak web formlarını otomatik bir şekilde doldurmalarına olanak sağlar.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 9190f1c..ebb66d3 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -916,19 +916,6 @@ <translation id="2349117476121456297">Якщо для цього правила вибрано значення True, клавіші у верхньому ряді клавіатури за умовчанням працюватимуть як функціональні. Якщо натиснути клавішу пошуку, вони знову працюватимуть як медіа-клавіші. Якщо для цього правила вибрано значення False або воно не налаштовано, медіа-клавіші клавіатури збережуть свою функціональність за умовчанням. Якщо натиснути клавішу пошуку, вони стануть функціональними.</translation> -<translation id="2353442107789326507">Список налаштувань сервісів конекторів Chrome Enterprise, які застосовуються до конектора Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, що активується, коли до сторінки в Chrome долучено файл. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз файл, який долучено до певної сторінки, а також які теги додавати в запит на аналіз цього файлу. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Дані буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає сторінці доступ до файлу, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає сторінці доступ до файлу. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> контролює, чи блокуватиме Chrome захищені паролем файли. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> контролює, чи блокуватиме Chrome файли, які є завеликими для аналізу (понад 50 МБ). - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="2358176879566587521">Це правило видалено. Воно несумісне з цією версією <ph name="PRODUCT_NAME" />. Докладніше читайте на сторінці https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Режим реєстрації в Асистенті</translation> <translation id="2384233438419344179">Якщо ввімкнути це правило, елементи веб-сторінок за межами домену, указаного в адресному рядку веб-переглядача, не зможуть встановлювати файли cookie. Якщо вимкнути це правило, такі елементи зможуть встановлювати файли cookie, а користувачі не матимуть можливості змінити цей параметр. @@ -4613,17 +4600,6 @@ <translation id="7701341006446125684">Указати розмір кеш-пам’яті для додатків і розширень (у байтах)</translation> <translation id="7703737669292992839">Заборонити вікна вибору файлів</translation> <translation id="7709470712369261710">Не використовувати сервіси Google для автоматичних описів зображень</translation> -<translation id="7710950688502974809">Список налаштувань сервісів Chrome Enterprise Connectors, які застосовуються до конектора Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, що активується, коли у веб-переглядачі Chrome вставляють дані з буферу обміну або перетягують веб-контент. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз дані, які внесено на певній сторінці, а також які теги додавати в запит на аналіз цих даних. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Дані буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає сторінці доступ до даних, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає сторінці доступ до даних. - - Поле <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> визначає мінімальний розмір (у байтах) введених у Chrome даних, які скануються. Якщо це поле не налаштовано, використовується значення за умовчанням 100 байт. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="7712109699186360774">Запитувати щоразу, коли сайту потрібен доступ до камери та/чи мікрофона</translation> <translation id="7713608076604149344">Обмеження завантажень</translation> <translation id="7715711044277116530">Відсоток, за яким масштабують затримку затемнення екрана в режимі презентації</translation> @@ -4813,19 +4789,6 @@ Це правило не діє, якщо не налаштувати його або вибрати для нього пусте значення чи True.</translation> <translation id="8011935490612940798">Керування функцією <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Обернути екран на 0 градусів</translation> -<translation id="8027265928215448940">Список налаштувань сервісів конекторів Chrome Enterprise, які застосовуються до конектора Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, що активується, коли в браузері Chrome завантажується файл. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз файл, який завантажено з певної сторінки, а також які теги додавати в запит на аналіз цього файлу. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Файл буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає користувачу доступ до завантаженого файлу, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає користувачу доступ до файлу. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> контролює, чи блокуватиме Chrome захищені паролем файли. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> контролює, чи блокуватиме Chrome файли, які є завеликими для аналізу (понад 50 МБ). - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="8033913082323846868">Це правило більше не підтримується у версії M70. Натомість використовуйте правила AutofillAddressEnabled і AutofillCreditCardEnabled. Вмикає функцію автозаповнення в <ph name="PRODUCT_NAME" /> і дає змогу користувачам автоматично заповнювати веб-форми, використовуючи раніше збережену інформацію, як-от адресу або дані кредитної картки.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index e83dd03ab..46fd0c7 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -917,19 +917,6 @@ <translation id="2349117476121456297">Khi bạn đặt chính sách này thành True, hàng phím trên cùng của bàn phím sẽ đóng vai trò là các lệnh phím chức năng. Khi bạn nhấn phím Tìm kiếm, các phím này sẽ trở về chế độ phím phương tiện. Nếu bạn đặt chính sách này thành False hoặc không đặt chính sách này, thì bàn phím sẽ mặc định tạo ra các lệnh phím phương tiện. Khi bạn nhấn phím Tìm kiếm, các phím sẽ thay đổi thành phím chức năng.</translation> -<translation id="2353442107789326507">Danh sách các tùy chọn cài đặt dịch vụ Trình kết nối của Chrome Enterprise sẽ áp dụng cho Trình kết nối <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> của Chrome Enterprise. Trình kết nối này sẽ chạy khi có tệp được đính kèm vào Chrome. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi tệp đi để phân tích hay không khi tệp được đính kèm vào một trang cụ thể, cũng như thẻ nào cần thêm vào yêu cầu phân tích cho tệp đó. Nếu URL của trang khớp với mẫu liên kết với một thẻ tương ứng với một mẫu 'enable', thì hệ thống sẽ thêm thẻ đó vào yêu cầu phân tích chừng nào không còn mẫu 'disable' có cùng thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép trang này truy cập vào tệp đó. Nếu bạn đặt trường đó thành bất kỳ giá trị số nguyên nào khác, thì Chrome sẽ cho phép trang này truy cập vào tệp đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép tệp được bảo vệ bằng mật khẩu. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép phân tích những tệp quá lớn (trên 50 MB). - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="2358176879566587521">Chính sách này đã bị xóa vì không tương thích với phiên bản <ph name="PRODUCT_NAME" /> này. Hãy đọc thêm tại https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Chế độ của trải nghiệm làm quen với Trợ lý</translation> <translation id="2384233438419344179">Nếu bạn đặt chính sách này thành Bật, thì các phần tử trang web không thuộc miền trong thanh địa chỉ của trình duyệt sẽ không thể đặt cookie. Nếu bạn đặt chính sách này thành Tắt, thì các phần tử trang web đó có thể đặt cookie và người dùng không thể thay đổi tùy chọn cài đặt này. @@ -4620,17 +4607,6 @@ <translation id="7701341006446125684">Đặt kích thước bộ nhớ đệm của tiện ích và ứng dụng (bằng byte)</translation> <translation id="7703737669292992839">Ngăn hộp thoại chọn tệp</translation> <translation id="7709470712369261710">Không sử dụng các dịch vụ của Google để cung cấp nội dung mô tả hình ảnh tự động</translation> -<translation id="7710950688502974809">Danh sách các tùy chọn cài đặt dịch vụ Chrome Enterprise Connectors sẽ áp dụng cho Trình kết nối <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> của Enterprise. Trình kết nối này sẽ chạy khi người dùng nhập dữ liệu vào Chrome từ khay nhớ tạm hoặc bằng cách kéo và thả nội dung trên web. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi dữ liệu đi để phân tích hay không khi người dùng nhập dữ liệu vào một trang cụ thể và thẻ nào cần thêm vào yêu cầu phân tích cho dữ liệu đó. Nếu URL của trang khớp với mẫu liên kết với thẻ đó, thì hệ thống sẽ thêm một thẻ tương ứng với mẫu 'enable' vào yêu cầu phân tích chừng nào không còn mẫu 'disable' có thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép trang này truy cập vào dữ liệu đó. Nếu bạn đặt trường đó thành bất kỳ giá trị số nguyên nào khác, thì Chrome sẽ cho phép trang này truy cập vào dữ liệu đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> cho biết kích thước tối thiểu (tính bằng byte) mà dữ liệu nhập vào Chrome phải bằng hoặc lớn hơn thì mới quét được. Giá trị mặc định là 100 byte nếu bạn không đặt trường này. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="7712109699186360774">Hỏi mỗi lần trang web muốn truy cập vào máy ảnh và/hoặc micrô</translation> <translation id="7713608076604149344">Hạn chế tải xuống</translation> <translation id="7715711044277116530">Tỷ lệ phần trăm theo đó xác định độ trễ mờ màn hình ở chế độ bản trình bày</translation> @@ -4825,19 +4801,6 @@ Chính sách này không có hiệu lực nếu bạn đặt thành bật, để trống hoặc không đặt.</translation> <translation id="8011935490612940798">Kiểm soát tính năng <ph name="PRODUCT_NAME" />.</translation> <translation id="802147957407376460">Xoay màn hình 0 độ</translation> -<translation id="8027265928215448940">Danh sách các tùy chọn cài đặt dịch vụ Trình kết nối của Chrome Enterprise sẽ áp dụng cho Trình kết nối <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> của Enterprise. Trình kết nối này sẽ chạy khi tệp được tải xuống trong Chrome. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi tệp đi phân tích hay không khi tệp được tải xuống trên một trang cụ thể, cũng như thẻ nào cần thêm vào yêu cầu phân tích cho tệp đó. Nếu URL của trang khớp với mẫu được liên kết với thẻ đó, thì hệ thống sẽ thêm một thẻ tương ứng với mẫu 'enable' vào yêu cầu phân tích cho tới chừng nào không còn mẫu 'disable' có thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép người dùng truy cập vào tệp đã tải xuống đó. Nếu bạn đặt trường này thành một giá trị số nguyên khác bất kỳ, thì Chrome sẽ cho phép người dùng truy cập vào tệp đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép các tệp được bảo vệ bằng mật khẩu. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép những tệp có kích thước quá lớn (hơn 50 MB) nên không phân tích được. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên Google.</translation> <translation id="8033913082323846868">Chính sách này không còn dùng trong M70, thay vào đó, hãy sử dụng AutofillAddressEnabled và AutofillCreditCardEnabled. Bật tính năng Tự động điền của <ph name="PRODUCT_NAME" /> và cho phép người dùng tự động hoàn thành các biểu mẫu web bằng cách sử dụng thông tin đã lưu trữ trước đây, chẳng hạn như địa chỉ và thông tin thẻ tín dụng.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index d162a6a0..f1f2d15 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -886,19 +886,6 @@ <translation id="2349117476121456297">将此政策设为 True 时,系统会让键盘顶行中的各个键充当功能键命令。按搜索键可将这些键的行为改回媒体键。 如果此政策设为 False 或未设置,键盘会默认发出媒体键命令。按搜索键可将这些键改为功能键。</translation> -<translation id="2353442107789326507">让您能够指定应用于 <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise Connector 的 Chrome Enterprise Connector 服务设置列表,以供在有人向 Chrome 附加文件时调用。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当某个文件附加到特定网页后,该连接器是否应发送此文件进行分析,以及要将哪些标记添加到针对此文件的分析请求中。如果相应的网页网址与“enable”格式所对应的某个标记相匹配,那么只要所有包含这个标记的“disable”格式与此网页网址都不匹配,该连接器便会将这个标记添加到分析请求中。如果该连接器向分析请求中添加了至少 1 个标记,分析服务便会分析附加的文件。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要授权相应网页访问此文件。如果您将该字段设为任何其他整数值,Chrome 就会立即授权相应网页访问此文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问受密码保护的文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问因过大(超过 50 MB)而无法分析的文件。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="2358176879566587521">此政策已被移除。它与这个版本的 <ph name="PRODUCT_NAME" /> 不兼容。如需了解详情,请访问 https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Google 助理新手入门体验的模式</translation> <translation id="2384233438419344179">如果此政策已启用,系统会阻止来自浏览器地址栏所含网域之外的网页元素设置 Cookie。如果此政策已停用,系统会允许这些元素设置 Cookie,并会阻止用户更改此设置。 @@ -4561,17 +4548,6 @@ <translation id="7701341006446125684">设置应用和扩展程序缓存大小(以字节为单位)</translation> <translation id="7703737669292992839">阻止显示文件选择对话框</translation> <translation id="7709470712369261710">不使用 Google 服务提供自动图片说明</translation> -<translation id="7710950688502974809">让您能够指定一系列要应用于 <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> 企业版接口的 Chrome 企业版接口服务设置,以供系统在下述情况发生时调用:有人通过复制剪贴板内容或拖放网页内容在 Chrome 中输入数据。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当用户在特定网页中输入数据后,该接口是否应发送此数据进行分析,以及要将哪些标记添加到针对此数据的分析请求中。如果相应的网页网址与“enable”格式所对应的某个标记相匹配,那么只要所有包含这个标记的“disable”格式与此网页网址都不匹配,该接口便会将这个标记添加到分析请求中。如果该接口向分析请求中添加了至少 1 个标记,分析服务便会分析输入的数据。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要授权相应网页访问此数据。如果您将该字段设为任何其他整数值,Chrome 就会立即授权相应网页访问此数据。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 字段用于指明数据大小下限(以字节为单位)- 在 Chrome 中输入的数据必须达到或超过此限值才能被扫描。如果该字段未设置,默认值为 100 字节。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="7712109699186360774">每当有网站要使用摄像头和/或麦克风时都要询问</translation> <translation id="7713608076604149344">下载限制</translation> <translation id="7715711044277116530">演示模式下屏幕变暗延迟时间的调整幅度(百分比)</translation> @@ -4761,19 +4737,6 @@ 如果设为 true、留空或未设置,此政策将不会产生任何影响。</translation> <translation id="8011935490612940798">控制 <ph name="PRODUCT_NAME" /> 功能。</translation> <translation id="802147957407376460">将屏幕旋转 0 度</translation> -<translation id="8027265928215448940">让您能够指定适用于 <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Connector 的 Chrome Enterprise Connector 服务设置列表,以供有人在 Chrome 中下载文件时调用。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当从特定网页中下载某个文件后,该连接器是否应发送此文件进行分析,以及要将哪些标记添加到针对此文件的分析请求中。如果相应的网页网址与“enable”格式所对应的某个标记相匹配,那么只要所有包含这个标记的“disable”格式与此网页网址都不匹配,该连接器便会将这个标记添加到分析请求中。如果该连接器向分析请求中添加了至少 1 个标记,分析服务便会分析下载的文件。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要向相应用户授予对所下载文件的访问权限。如果您将该字段设为任何其他整数值,Chrome 就会立即向相应用户授予文件访问权限。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问受密码保护的文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问因过大(超过 50 MB)而无法分析的文件。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="8033913082323846868">我们在 M70 中弃用了此政策,请改用 AutofillAddressEnabled 和 AutofillCreditCardEnabled。 可用于启用 <ph name="PRODUCT_NAME" /> 的“自动填充”功能,并允许用户使用先前存储的信息(例如地址或信用卡信息)自动填写网络表单。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 2c03d49..28849cd3 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -879,19 +879,6 @@ <translation id="2349117476121456297">這項政策設為 True 時,鍵盤最上排的按鍵會做為功能鍵指令使用。按下搜尋鍵即可將按鍵行為改回媒體鍵。 設為 False 或不予設定時,鍵盤預設會產生媒體鍵指令。按下搜尋鍵即可將按鍵改為功能鍵。</translation> -<translation id="2353442107789326507">指定要套用至 <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise Connector 的 Chrome Enterprise Connectors 服務設定清單,這份清單會在檔案附加至 Chrome 時觸發。 - - 將檔案附加至特定網頁時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送檔案進行分析,以及要在該檔案的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的「啟用」模式,系統就會將該標記加入分析要求中 (但若有頁面網址與此標記中的「停用」模式符合的情況則除外)。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與這項設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回覆,再授予頁面存取檔案的權限。如果設為其他整數值,Chrome 會立即授予頁面存取檔案的權限。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許受到密碼保護的檔案。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許超過檔案大小上限而無法分析的檔案 (超過 50 MB 的檔案)。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="2358176879566587521">這項政策已遭到移除,因此與這個版本的 <ph name="PRODUCT_NAME" /> 不相容。詳情請參閱 https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2364639863953745682">Google 助理入門使用體驗的模式</translation> <translation id="2384233438419344179">如果將這項政策設為啟用,網頁元素只要不屬於瀏覽器網址列中的網域,就無法設定 Cookie。如果將這項政策設為停用,這類元素將可設定 Cookie,且使用者無法變更這項設定。 @@ -4536,17 +4523,6 @@ <translation id="7701341006446125684">設定應用程式和擴充功能快取大小 (以位元組為單位)</translation> <translation id="7703737669292992839">禁止顯示檔案選取對話方塊</translation> <translation id="7709470712369261710">不要使用 Google 服務提供自動產生的圖片說明</translation> -<translation id="7710950688502974809">指定要套用至 <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise Connector 的 Chrome Enterprise Connectors 服務設定清單,在 Chrome 中透過剪貼簿或拖曳網頁內容的方式輸入資料時會觸發這份清單。 - - 在特定網頁中輸入資料時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送資料進行分析,以及要在該資料的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的「啟用」模式,系統就會將該標記加入分析要求中 (但若有頁面網址與此標記中的「停用」模式符合的情況則除外)。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與這項設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回覆,再授予頁面存取資料的權限。如果設為其他整數值,Chrome 會立即授予頁面存取資料的權限。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 欄位代表在 Chrome 中輸入的資料大小下限 (以位元組為單位),要掃描的資料大小必須大於或等於這個值。如果不設定這個欄位,預設值為 100 個位元組。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="7712109699186360774">每當有任何網站要使用攝影機和/或麥克風時詢問我</translation> <translation id="7713608076604149344">下載限制</translation> <translation id="7715711044277116530">簡報模式中的螢幕調暗延遲時間延長百分比</translation> @@ -4736,19 +4712,6 @@ 如果設為 True、保留空白或不設定,這項政策就不會生效。</translation> <translation id="8011935490612940798">控管 <ph name="PRODUCT_NAME" /> 功能。</translation> <translation id="802147957407376460">將畫面旋轉 0 度</translation> -<translation id="8027265928215448940">指定要套用至 <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Connector 的 Chrome Enterprise Connectors 服務設定清單,在 Chrome 中下載檔案時會觸發這份清單。 - - 從特定網頁下載檔案時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送檔案進行分析,以及要在該檔案的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的「啟用」模式,系統就會將該標記加入分析要求中 (但若有頁面網址與此標記中的「停用」模式符合的情況則除外)。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回覆,再授予使用者下載檔案的存取權。如果設為其他整數值,Chrome 會立即授予使用者檔案存取權。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許受到密碼保護的檔案。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許大小過大而無法分析的檔案 (超過 50 MB 的檔案)。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="8033913082323846868">這項政策自 M70 起已淘汰,請改用 AutofillAddressEnabled 和 AutofillCreditCardEnabled。 啟用「<ph name="PRODUCT_NAME" />」的「自動填入」功能,並允許使用者使用先前儲存的地址或信用卡資料等資訊自動填寫網路表單。
diff --git a/components/query_parser/DIR_METADATA b/components/query_parser/DIR_METADATA new file mode 100644 index 0000000..14b5edb5 --- /dev/null +++ b/components/query_parser/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals" +}
diff --git a/components/query_parser/OWNERS b/components/query_parser/OWNERS index 45babcb..90b3e80 100644 --- a/components/query_parser/OWNERS +++ b/components/query_parser/OWNERS
@@ -1,2 +1 @@ sky@chromium.org -# COMPONENT: Internals
diff --git a/components/query_tiles/DIR_METADATA b/components/query_tiles/DIR_METADATA new file mode 100644 index 0000000..1a778a1 --- /dev/null +++ b/components/query_tiles/DIR_METADATA
@@ -0,0 +1,7 @@ +monorail { + component: "Upboarding>QueryTiles" +} + +team_email: "chrome-upboarding-eng@google.com" + +os: ANDROID
diff --git a/components/query_tiles/OWNERS b/components/query_tiles/OWNERS index 9e56026..61ddc267 100644 --- a/components/query_tiles/OWNERS +++ b/components/query_tiles/OWNERS
@@ -4,7 +4,3 @@ shaktisahu@chromium.org xingliu@chromium.org -# TEAM: chrome-upboarding-eng@google.com -# COMPONENT: Upboarding>QueryTiles -# OS: Android -
diff --git a/components/query_tiles/internal/tile_config.cc b/components/query_tiles/internal/tile_config.cc index 9fe5cc64..36342a4f 100644 --- a/components/query_tiles/internal/tile_config.cc +++ b/components/query_tiles/internal/tile_config.cc
@@ -53,6 +53,11 @@ constexpr char kMinimumScoreForNewFrontTilesKey[] = "min_score_for_new_front_tiles"; +constexpr char kNumTrendingTilesKey[] = "num_trending_tiles_to_display"; + +constexpr char kMaxTrendingTileImpressionsKey[] = + "max_trending_tile_impressions"; + // Default expire duration. constexpr int kDefaultExpireDurationInSeconds = 48 * 60 * 60; // 2 days. @@ -80,6 +85,12 @@ // clicked for 2 days. constexpr double kDefaultMinimumTileScoreForNewFrontTiles = 0.9; +// Default number of trending tiles to be displayed at the same time. +constexpr int kDefaultNumTrendingTilesToDisplay = 2; + +// Default number of impressions a trending tile to be displayed . +constexpr int kDefaultMaxTrendingTileImpressions = 2; + namespace { // For testing. Json string for single tier experiment tag. @@ -94,6 +105,7 @@ replacements.SetPathStr(path); return base_url.ReplaceComponents(replacements); } + } // namespace // static @@ -198,4 +210,18 @@ kDefaultMinimumTileScoreForNewFrontTiles); } +// static +int TileConfig::GetNumTrendingTilesToDisplay() { + return base::GetFieldTrialParamByFeatureAsInt( + features::kQueryTiles, kNumTrendingTilesKey, + kDefaultNumTrendingTilesToDisplay); +} + +// static +int TileConfig::GetMaxTrendingTileImpressions() { + return base::GetFieldTrialParamByFeatureAsInt( + features::kQueryTiles, kMaxTrendingTileImpressionsKey, + kDefaultMaxTrendingTileImpressions); +} + } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_config.h b/components/query_tiles/internal/tile_config.h index 5dd1816..2ed2830c4 100644 --- a/components/query_tiles/internal/tile_config.h +++ b/components/query_tiles/internal/tile_config.h
@@ -54,6 +54,12 @@ // front of others. extern const char kMinimumScoreForNewFrontTilesKey[]; +// Finch parameter key for number of trending tiles to display. +extern const char kNumTrendingTilesKey[]; + +// Finch parameter key for max number of trending tile impressions. +extern const char kMaxTrendingTileImpressionsKey[]; + class TileConfig { public: // Gets the URL for the Query Tiles server. @@ -97,6 +103,12 @@ // Get the minimum scrore for newly showing tiles that are in front of others. static double GetMinimumScoreForNewFrontTiles(); + + // Get the number of trending tiles to be displayed at the same time. + static int GetNumTrendingTilesToDisplay(); + + // Get the maximum number of impressions for a trending tile to be displayed. + static int GetMaxTrendingTileImpressions(); }; } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_group.cc b/components/query_tiles/internal/tile_group.cc index 4cbd153..99e45da3 100644 --- a/components/query_tiles/internal/tile_group.cc +++ b/components/query_tiles/internal/tile_group.cc
@@ -4,9 +4,11 @@ #include "components/query_tiles/internal/tile_group.h" +#include <set> #include <sstream> #include <utility> +#include "components/query_tiles/internal/tile_iterator.h" #include "components/query_tiles/internal/tile_utils.h" namespace query_tiles { @@ -27,6 +29,17 @@ output->tile_stats = input.tile_stats; } +// Removes |id| from |id_set|. Returns true if |id| is found, or false +// otherwise. +bool RemoveIdFromSet(std::set<std::string>* id_set, const std::string& id) { + const auto it = id_set->find(id); + if (it != id_set->end()) { + id_set->erase(it); + return true; + } + return false; +} + } // namespace TileGroup::TileGroup() = default; @@ -76,4 +89,36 @@ return out.str(); } +void TileGroup::RemoveTiles(const std::vector<std::string>& tile_ids) { + std::set<std::string> id_set(tile_ids.begin(), tile_ids.end()); + std::queue<Tile*> tile_queue; + // Check if there are top level tiles to be removed. + for (auto iter = tiles.begin(); iter != tiles.end();) { + if (RemoveIdFromSet(&id_set, (*iter)->id)) { + iter = tiles.erase(iter); + if (id_set.empty()) + return; + } else { + tile_queue.push(iter->get()); + ++iter; + } + } + + // Recursively check if there are sub tiles to be removed. + while (!tile_queue.empty()) { + Tile* tile = tile_queue.front(); + tile_queue.pop(); + for (auto it = tile->sub_tiles.begin(); it != tile->sub_tiles.end();) { + if (RemoveIdFromSet(&id_set, (*it)->id)) { + it = tile->sub_tiles.erase(it); + if (id_set.empty()) + return; + } else { + tile_queue.push(it->get()); + ++it; + } + } + } +} + } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_group.h b/components/query_tiles/internal/tile_group.h index 10ce357..5c4a2b060 100644 --- a/components/query_tiles/internal/tile_group.h +++ b/components/query_tiles/internal/tile_group.h
@@ -32,6 +32,9 @@ // Called when a tile was clicked, need to recalculate |tile_stats|. void OnTileClicked(const std::string& tile_id); + // Remove a tile from |tiles| given by its ID. + void RemoveTiles(const std::vector<std::string>& tile_ids); + // Unique id for the group. std::string id;
diff --git a/components/query_tiles/internal/tile_group_unittest.cc b/components/query_tiles/internal/tile_group_unittest.cc index 5e0dbab..d1bf8b9d 100644 --- a/components/query_tiles/internal/tile_group_unittest.cc +++ b/components/query_tiles/internal/tile_group_unittest.cc
@@ -81,6 +81,38 @@ EXPECT_EQ(group.tile_stats["guid-1-2"].score, 1.5); } +TEST(TileGroupTest, RemoveTiles) { + TileGroup group; + test::ResetTestGroup(&group); + EXPECT_EQ(group.tiles.size(), 3u); + EXPECT_EQ(group.tiles[2]->id, "guid-1-3"); + EXPECT_FALSE(group.tiles[2]->sub_tiles.empty()); + + std::vector<std::string> tiles_to_remove; + tiles_to_remove.emplace_back("guid-1-1"); + group.RemoveTiles(tiles_to_remove); + EXPECT_EQ(group.tiles.size(), 2u); + EXPECT_EQ(group.tiles[0]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-3"); + + test::ResetTestGroup(&group); + tiles_to_remove.clear(); + tiles_to_remove.emplace_back("guid-1-4"); + group.RemoveTiles(tiles_to_remove); + EXPECT_EQ(group.tiles.size(), 3u); + EXPECT_EQ(group.tiles[2]->id, "guid-1-3"); + EXPECT_TRUE(group.tiles[2]->sub_tiles.empty()); + + // Remove 2 tiles. + test::ResetTestGroup(&group); + tiles_to_remove.emplace_back("guid-1-1"); + group.RemoveTiles(tiles_to_remove); + EXPECT_EQ(group.tiles.size(), 2u); + EXPECT_EQ(group.tiles[0]->id, "guid-1-2"); + EXPECT_EQ(group.tiles[1]->id, "guid-1-3"); + EXPECT_TRUE(group.tiles[1]->sub_tiles.empty()); +} + } // namespace } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_manager.cc b/components/query_tiles/internal/tile_manager.cc index 4332050..4c71bcd 100644 --- a/components/query_tiles/internal/tile_manager.cc +++ b/components/query_tiles/internal/tile_manager.cc
@@ -28,6 +28,45 @@ // A special tile group for tile stats. constexpr char kTileStatsGroup[] = "tile_stats"; +// Class for handling trending tiles. It checks whether a +// trending tile should be displayed, or removed. Construct +// a new instance each time when the caller has a list of +// trending tiles to be displayed. +class TrendingTilesHandler { + public: + // Map between tile ID and tile impression. + using ImpressionMap = std::map<std::string, int>; + explicit TrendingTilesHandler(ImpressionMap* impression_map) + : impression_map_(impression_map) {} + + // Add a new trending tile for display, returns true if + // allowed, or returns false otherwise. + bool AddTrendingTileForDisplay(const std::string& tile_id) { + if (base::FeatureList::IsEnabled( + features::kQueryTilesRemoveTrendingTilesAfterInactivity) && + (*impression_map_)[tile_id] >= + TileConfig::GetMaxTrendingTileImpressions()) { + tiles_to_remove_.push_back(tile_id); + return false; + } + + if (++trending_tiles_count_ > TileConfig::GetNumTrendingTilesToDisplay()) + return false; + + ++(*impression_map_)[tile_id]; + return true; + } + + const std::vector<std::string>& tiles_to_remove() const { + return tiles_to_remove_; + } + + private: + std::vector<std::string> tiles_to_remove_; + int trending_tiles_count_ = 0; + ImpressionMap* impression_map_; +}; + class TileManagerImpl : public TileManager { public: TileManagerImpl(std::unique_ptr<TileStore> store, @@ -68,10 +107,19 @@ } std::vector<Tile> tiles; - for (const auto& tile : tile_group_->tiles) + TrendingTilesHandler handler(&tile_impressions_); + for (const auto& tile : tile_group_->tiles) { + if (IsTrendingTile(tile->id)) { + // Return a limited number of trending tiles, filter out the rest. + if (!handler.AddTrendingTileForDisplay(tile->id)) + continue; + } tiles.emplace_back(*tile.get()); + } + base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), std::move(tiles))); + RemoveTiles(handler.tiles_to_remove()); } void GetTile(const std::string& tile_id, TileCallback callback) override { @@ -87,10 +135,26 @@ } } } - auto result_tile = result ? base::make_optional(*result) : base::nullopt; + TrendingTilesHandler handler(&tile_impressions_); + if (result_tile.has_value()) { + std::vector<std::unique_ptr<Tile>> tiles_to_display; + for (auto& tile : result_tile->sub_tiles) { + if (IsTrendingTile(tile->id)) { + // Return a limited number of trending subtiles, filter out the rest. + if (!handler.AddTrendingTileForDisplay(tile->id)) + continue; + } + // Moving the tile to a temporary vector first, and will then + // use the temporary vector to replace |result_tile->sub_tiles|. + tiles_to_display.emplace_back(std::move(tile)); + } + result_tile->sub_tiles = std::move(tiles_to_display); + } + + RemoveTiles(handler.tiles_to_remove()); base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), result_tile)); + FROM_HERE, base::BindOnce(std::move(callback), std::move(result_tile))); } TileGroupStatus PurgeDb() override { @@ -245,6 +309,8 @@ // It's fine if |tile_stats_group_| is not saved, so no callback needs to // be passed to Update(). store_->Update(kTileStatsGroup, *tile_stats_group_, base::DoNothing()); + + tile_impressions_.erase(tile_id); } void OnQuerySelected(const base::Optional<std::string>& parent_tile_id, @@ -272,6 +338,17 @@ } } + void RemoveTiles(const std::vector<std::string>& tile_ids) { + if (!tile_group_) + return; + + if (tile_ids.empty()) + return; + + tile_group_->RemoveTiles(tile_ids); + store_->Update(tile_group_->id, *tile_group_, base::DoNothing()); + } + // Indicates if the db is fully initialized, rejects calls if not. bool initialized_; @@ -293,6 +370,10 @@ // the same language. std::string accept_languages_; + // Map tracking how many times tiles are requested. + // TODO(qinmin): move this to |tile_stats_group_|. + std::map<std::string, int> tile_impressions_; + base::WeakPtrFactory<TileManagerImpl> weak_ptr_factory_{this}; };
diff --git a/components/query_tiles/internal/tile_manager_unittest.cc b/components/query_tiles/internal/tile_manager_unittest.cc index 51a328c..6dc4661 100644 --- a/components/query_tiles/internal/tile_manager_unittest.cc +++ b/components/query_tiles/internal/tile_manager_unittest.cc
@@ -8,10 +8,12 @@ #include "base/bind.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h" #include "base/test/task_environment.h" #include "components/query_tiles/internal/tile_config.h" #include "components/query_tiles/internal/tile_store.h" +#include "components/query_tiles/switches.h" #include "components/query_tiles/test/test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -166,6 +168,15 @@ std::move(closure).Run(); } + void OnTileClicked(const std::string& tile_id) { + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + manager()->OnTileClicked(tile_id); + } + protected: TileManager* manager() { return manager_.get(); } MockTileStore* tile_store() { return tile_store_; } @@ -346,6 +357,101 @@ EXPECT_TRUE(test::AreTileGroupsIdentical(*actual, expected)); } +// Check that the right number of trending tiles are returned. +TEST_F(TileManagerTest, GetTilesWithTrendingTiles) { + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + EXPECT_CALL(*tile_store(), Delete(_, _)).Times(0); + Init(TileGroupStatus::kNoTiles); + + std::vector<std::unique_ptr<Tile>> tiles_to_save = + test::GetTestTrendingTileList(); + + std::vector<Tile> expected; + expected.emplace_back(*tiles_to_save[0].get()); + expected.emplace_back(*tiles_to_save[1].get()); + + SaveTiles(std::move(tiles_to_save), TileGroupStatus::kSuccess); + GetTiles(std::move(expected)); +} + +// Check that the right number of trending subtiles are returned. +TEST_F(TileManagerTest, GetSingleTileWithTrendingSubTiles) { + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + EXPECT_CALL(*tile_store(), Delete(_, _)).Times(0); + Init(TileGroupStatus::kNoTiles); + + auto parent_tile = std::make_unique<Tile>(); + parent_tile->id = "parent"; + + parent_tile->sub_tiles = test::GetTestTrendingTileList(); + + base::Optional<Tile> parent_tile2 = base::make_optional(*parent_tile.get()); + parent_tile2->sub_tiles.pop_back(); + + std::vector<std::unique_ptr<Tile>> tiles_to_save; + tiles_to_save.emplace_back(std::move(parent_tile)); + + SaveTiles(std::move(tiles_to_save), TileGroupStatus::kSuccess); + GetSingleTile("parent", std::move(parent_tile2)); +} + +// Check that trending tiles get removed after inactivity. +TEST_F(TileManagerTest, TrendingTilesRemovedAfterInactivity) { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kQueryTilesRemoveTrendingTilesAfterInactivity); + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + EXPECT_CALL(*tile_store(), Delete(_, _)).Times(0); + Init(TileGroupStatus::kNoTiles); + + std::vector<std::unique_ptr<Tile>> tiles_to_save = + test::GetTestTrendingTileList(); + + std::vector<Tile> expected; + expected.emplace_back(*tiles_to_save[0].get()); + expected.emplace_back(*tiles_to_save[1].get()); + Tile trending_3 = *tiles_to_save[2].get(); + + SaveTiles(std::move(tiles_to_save), TileGroupStatus::kSuccess); + GetTiles(expected); + + // Click the 2nd tile. + OnTileClicked("trending_2"); + GetTiles(expected); + + // The first tile will be removed due to inactivity and the third tile + // will be returned. + expected.erase(expected.begin()); + expected.emplace_back(std::move(trending_3)); + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + GetTiles(expected); + + // The 2nd tile will be removed due to inactivity. + expected.erase(expected.begin()); + EXPECT_CALL(*tile_store(), Update(_, _, _)) + .WillOnce(Invoke([](const std::string& id, const TileGroup& group, + MockTileStore::UpdateCallback callback) { + std::move(callback).Run(true); + })); + GetTiles(expected); +} + } // namespace } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_utils.cc b/components/query_tiles/internal/tile_utils.cc index 8fc043b..25e122fd2 100644 --- a/components/query_tiles/internal/tile_utils.cc +++ b/components/query_tiles/internal/tile_utils.cc
@@ -5,6 +5,7 @@ #include <algorithm> #include <limits> +#include "base/strings/string_util.h" #include "components/query_tiles/internal/tile_config.h" #include "components/query_tiles/internal/tile_utils.h" @@ -116,4 +117,8 @@ (current_time - tile_stats.last_clicked_time).InDaysFloored()); } +bool IsTrendingTile(const std::string& tile_id) { + return base::StartsWith(tile_id, "trending_"); +} + } // namespace query_tiles
diff --git a/components/query_tiles/internal/tile_utils.h b/components/query_tiles/internal/tile_utils.h index fb03c33..0a7a141 100644 --- a/components/query_tiles/internal/tile_utils.h +++ b/components/query_tiles/internal/tile_utils.h
@@ -38,6 +38,9 @@ // decay over time. double CalculateTileScore(const TileStats& tile_stats, base::Time current_time); +// Checks whether a tile ID is for trending tile. +bool IsTrendingTile(const std::string& tile_id); + } // namespace query_tiles #endif // COMPONENTS_QUERY_TILES_INTERNAL_TILE_UTILS_H_
diff --git a/components/query_tiles/internal/tile_utils_unittest.cc b/components/query_tiles/internal/tile_utils_unittest.cc index 5863b02..55e3f93 100644 --- a/components/query_tiles/internal/tile_utils_unittest.cc +++ b/components/query_tiles/internal/tile_utils_unittest.cc
@@ -146,6 +146,13 @@ exp(-0.099)); } +TEST(TileUtilsTest, IsTrendingTile) { + EXPECT_TRUE(IsTrendingTile("trending_news")); + EXPECT_FALSE(IsTrendingTile("Trending_news")); + EXPECT_FALSE(IsTrendingTile("trendingnews")); + EXPECT_FALSE(IsTrendingTile("news")); +} + } // namespace } // namespace query_tiles
diff --git a/components/query_tiles/switches.cc b/components/query_tiles/switches.cc index d70ac98..e785a85 100644 --- a/components/query_tiles/switches.cc +++ b/components/query_tiles/switches.cc
@@ -18,6 +18,9 @@ "QueryTilesEnableQueryEditing", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kQueryTilesLocalOrdering{"QueryTilesLocalOrdering", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kQueryTilesRemoveTrendingTilesAfterInactivity{ + "QueryTilesRemoveTrendingAfterInactivity", + base::FEATURE_DISABLED_BY_DEFAULT}; bool IsEnabledQueryTilesInOmnibox() { return base::FeatureList::IsEnabled(features::kQueryTilesGeoFilter) &&
diff --git a/components/query_tiles/switches.h b/components/query_tiles/switches.h index 04c5b3db..9816fe8 100644 --- a/components/query_tiles/switches.h +++ b/components/query_tiles/switches.h
@@ -34,6 +34,10 @@ // based on local user interactions. extern const base::Feature kQueryTilesLocalOrdering; +// Feature flag to determine whether trending tiles should disapear after +// some time of inactivity. +extern const base::Feature kQueryTilesRemoveTrendingTilesAfterInactivity; + // Helper function to determine whether query tiles should be shown on omnibox. bool IsEnabledQueryTilesInOmnibox();
diff --git a/components/query_tiles/test/test_utils.cc b/components/query_tiles/test/test_utils.cc index c871fc3..a219446b 100644 --- a/components/query_tiles/test/test_utils.cc +++ b/components/query_tiles/test/test_utils.cc
@@ -65,6 +65,23 @@ group->tile_stats["guid-3-1"] = TileStats(group->last_updated_ts, 0.5); } +std::vector<std::unique_ptr<Tile>> GetTestTrendingTileList() { + auto trending_tile1 = std::make_unique<Tile>(); + trending_tile1->id = "trending_1"; + + auto trending_tile2 = std::make_unique<Tile>(); + trending_tile2->id = "trending_2"; + + auto trending_tile3 = std::make_unique<Tile>(); + trending_tile3->id = "trending_3"; + + std::vector<std::unique_ptr<Tile>> trending_tile_list; + trending_tile_list.emplace_back(std::move(trending_tile1)); + trending_tile_list.emplace_back(std::move(trending_tile2)); + trending_tile_list.emplace_back(std::move(trending_tile3)); + return trending_tile_list; +} + bool AreTileGroupsIdentical(const TileGroup& lhs, const TileGroup& rhs) { if (lhs != rhs) return false;
diff --git a/components/query_tiles/test/test_utils.h b/components/query_tiles/test/test_utils.h index 473651d..eae4b61 100644 --- a/components/query_tiles/test/test_utils.h +++ b/components/query_tiles/test/test_utils.h
@@ -22,6 +22,9 @@ // Build and reset the Tile for test usage. void ResetTestEntry(Tile* entry); +// Return a list of trending tiles for test. +std::vector<std::unique_ptr<Tile>> GetTestTrendingTileList(); + // Returns true if all data in two TileGroups are identical. bool AreTileGroupsIdentical(const TileGroup& lhs, const TileGroup& rhs);
diff --git a/components/quirks/DIR_METADATA b/components/quirks/DIR_METADATA new file mode 100644 index 0000000..412cb23 --- /dev/null +++ b/components/quirks/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Shell>Display" +}
diff --git a/components/quirks/OWNERS b/components/quirks/OWNERS index cb2d3b5..469ca5f 100644 --- a/components/quirks/OWNERS +++ b/components/quirks/OWNERS
@@ -1,3 +1,2 @@ glevin@chromium.org oshima@chromium.org -# COMPONENT: UI>Shell>Display
diff --git a/components/rappor/DIR_METADATA b/components/rappor/DIR_METADATA new file mode 100644 index 0000000..540f41c --- /dev/null +++ b/components/rappor/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Metrics" +}
diff --git a/components/rappor/OWNERS b/components/rappor/OWNERS index 0e9e9f1..52bf7a2 100644 --- a/components/rappor/OWNERS +++ b/components/rappor/OWNERS
@@ -1,4 +1,2 @@ asvitkine@chromium.org holte@chromium.org - -# COMPONENT: Internals>Metrics
diff --git a/components/reading_list/DIR_METADATA b/components/reading_list/DIR_METADATA new file mode 100644 index 0000000..c8be82a --- /dev/null +++ b/components/reading_list/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "UI>Browser>ReaderMode" +} + +team_email: "ios-directory-owners@chromium.org"
diff --git a/components/reading_list/OWNERS b/components/reading_list/OWNERS index 918a15b..c6815f7 100644 --- a/components/reading_list/OWNERS +++ b/components/reading_list/OWNERS
@@ -1,4 +1,2 @@ noyau@chromium.org olivierrobin@chromium.org -# COMPONENT: UI>Browser>ReaderMode -# TEAM: ios-directory-owners@chromium.org
diff --git a/components/remote_cocoa/DIR_METADATA b/components/remote_cocoa/DIR_METADATA new file mode 100644 index 0000000..f573c65 --- /dev/null +++ b/components/remote_cocoa/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Views" +}
diff --git a/components/remote_cocoa/OWNERS b/components/remote_cocoa/OWNERS index 0e3699b..f2380872 100644 --- a/components/remote_cocoa/OWNERS +++ b/components/remote_cocoa/OWNERS
@@ -1,3 +1 @@ file://ui/views/cocoa/OWNERS - -# COMPONENT: Internals>Views
diff --git a/components/renderer_context_menu/DIR_METADATA b/components/renderer_context_menu/DIR_METADATA new file mode 100644 index 0000000..22d44120c --- /dev/null +++ b/components/renderer_context_menu/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Platform>Apps>BrowserTag" +}
diff --git a/components/renderer_context_menu/OWNERS b/components/renderer_context_menu/OWNERS index 04ed5b4..42e1ec7 100644 --- a/components/renderer_context_menu/OWNERS +++ b/components/renderer_context_menu/OWNERS
@@ -1,4 +1,2 @@ avi@chromium.org lazyboy@chromium.org - -# COMPONENT: Platform>Apps>BrowserTag
diff --git a/components/reset_password_strings_grdp/DIR_METADATA b/components/reset_password_strings_grdp/DIR_METADATA new file mode 100644 index 0000000..578f3dfc --- /dev/null +++ b/components/reset_password_strings_grdp/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Services>Safebrowsing" +} + +team_email: "safebrowsing@chromium.org"
diff --git a/components/reset_password_strings_grdp/OWNERS b/components/reset_password_strings_grdp/OWNERS index 2045ecdb6..5225674 100644 --- a/components/reset_password_strings_grdp/OWNERS +++ b/components/reset_password_strings_grdp/OWNERS
@@ -1,3 +1 @@ file://components/safe_browsing/OWNERS -# COMPONENT: Services>Safebrowsing -# TEAM: safebrowsing@chromium.org
diff --git a/components/resources/default_100_percent/neterror/DIR_METADATA b/components/resources/default_100_percent/neterror/DIR_METADATA new file mode 100644 index 0000000..2d14a86 --- /dev/null +++ b/components/resources/default_100_percent/neterror/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Network" +}
diff --git a/components/resources/default_100_percent/neterror/OWNERS b/components/resources/default_100_percent/neterror/OWNERS index 0f53cb5..3546fc7 100644 --- a/components/resources/default_100_percent/neterror/OWNERS +++ b/components/resources/default_100_percent/neterror/OWNERS
@@ -1,4 +1,2 @@ mmenke@chromium.org file://net/OWNERS - -# COMPONENT: Internals>Network
diff --git a/components/resources/default_200_percent/neterror/DIR_METADATA b/components/resources/default_200_percent/neterror/DIR_METADATA new file mode 100644 index 0000000..2d14a86 --- /dev/null +++ b/components/resources/default_200_percent/neterror/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Network" +}
diff --git a/components/resources/default_200_percent/neterror/OWNERS b/components/resources/default_200_percent/neterror/OWNERS index 0f53cb5..3546fc7 100644 --- a/components/resources/default_200_percent/neterror/OWNERS +++ b/components/resources/default_200_percent/neterror/OWNERS
@@ -1,4 +1,2 @@ mmenke@chromium.org file://net/OWNERS - -# COMPONENT: Internals>Network
diff --git a/components/rlz/DIR_METADATA b/components/rlz/DIR_METADATA new file mode 100644 index 0000000..2aaf8e2eed --- /dev/null +++ b/components/rlz/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Core" +}
diff --git a/components/rlz/OWNERS b/components/rlz/OWNERS index bee2d9df..c480874c 100644 --- a/components/rlz/OWNERS +++ b/components/rlz/OWNERS
@@ -1,5 +1,3 @@ cpu@chromium.org gwilson@chromium.org rogerta@chromium.org - -# COMPONENT: Internals>Core
diff --git a/components/safe_browsing/content/browser/threat_details_history.cc b/components/safe_browsing/content/browser/threat_details_history.cc index 84f88f0e..3a36327 100644 --- a/components/safe_browsing/content/browser/threat_details_history.cc +++ b/components/safe_browsing/content/browser/threat_details_history.cc
@@ -112,7 +112,7 @@ void ThreatDetailsRedirectsCollector::HistoryServiceBeingDeleted( history::HistoryService* history_service) { DCHECK(history_service_observation_.IsObservingSource(history_service)); - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); history_service_.reset(); }
diff --git a/components/safe_browsing/content/password_protection/password_protection_service.cc b/components/safe_browsing/content/password_protection/password_protection_service.cc index 00752c29..ce1a4dc6 100644 --- a/components/safe_browsing/content/password_protection/password_protection_service.cc +++ b/components/safe_browsing/content/password_protection/password_protection_service.cc
@@ -70,8 +70,7 @@ PasswordProtectionService::~PasswordProtectionService() { tracker_.TryCancelAll(); CancelPendingRequests(); - if (history_service_observation_.IsObserving()) - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); weak_factory_.InvalidateWeakPtrs(); } @@ -395,7 +394,7 @@ void PasswordProtectionService::HistoryServiceBeingDeleted( history::HistoryService* history_service) { DCHECK(history_service_observation_.IsObservingSource(history_service)); - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); } std::unique_ptr<PasswordProtectionNavigationThrottle>
diff --git a/components/safe_browsing/content/password_protection/password_protection_service_unittest.cc b/components/safe_browsing/content/password_protection/password_protection_service_unittest.cc index f025bbd..6b81f74 100644 --- a/components/safe_browsing/content/password_protection/password_protection_service_unittest.cc +++ b/components/safe_browsing/content/password_protection/password_protection_service_unittest.cc
@@ -230,21 +230,6 @@ DISALLOW_COPY_AND_ASSIGN(TestPasswordProtectionService); }; -class MockPasswordProtectionNavigationThrottle - : public PasswordProtectionNavigationThrottle { - public: - MockPasswordProtectionNavigationThrottle( - content::NavigationHandle* navigation_handle, - scoped_refptr<PasswordProtectionRequest> request, - bool is_warning_showing) - : PasswordProtectionNavigationThrottle(navigation_handle, - request, - is_warning_showing) {} - - private: - DISALLOW_COPY_AND_ASSIGN(MockPasswordProtectionNavigationThrottle); -}; - class PasswordProtectionServiceTest : public ::testing::TestWithParam<bool> { public: PasswordProtectionServiceTest() @@ -1456,7 +1441,7 @@ InitializeAndStartPasswordOnFocusRequest(true /* match whitelist */, 10000 /* timeout in ms */, web_contents.get()); - auto throttle = std::make_unique<MockPasswordProtectionNavigationThrottle>( + auto throttle = std::make_unique<PasswordProtectionNavigationThrottle>( nullptr, request_, false); EXPECT_EQ(1U, GetNumberOfNavigationThrottles()); request_->Cancel(true /* timeout */); @@ -1468,7 +1453,7 @@ InitializeAndStartPasswordOnFocusRequest(true /* match whitelist */, 10000 /* timeout in ms */, web_contents.get()); - auto throttle = std::make_unique<MockPasswordProtectionNavigationThrottle>( + auto throttle = std::make_unique<PasswordProtectionNavigationThrottle>( nullptr, request_, false); EXPECT_EQ(1U, GetNumberOfNavigationThrottles()); request_->Cancel(false /* timeout */);
diff --git a/components/safe_browsing/core/verdict_cache_manager.cc b/components/safe_browsing/core/verdict_cache_manager.cc index 367b00eb..eceaf2e 100644 --- a/components/safe_browsing/core/verdict_cache_manager.cc +++ b/components/safe_browsing/core/verdict_cache_manager.cc
@@ -382,8 +382,7 @@ void VerdictCacheManager::Shutdown() { CleanUpExpiredVerdicts(); - if (history_service_observation_.IsObserving()) - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); weak_factory_.InvalidateWeakPtrs(); } @@ -690,7 +689,7 @@ void VerdictCacheManager::HistoryServiceBeingDeleted( history::HistoryService* history_service) { DCHECK(history_service_observation_.IsObservingSource(history_service)); - history_service_observation_.RemoveObservation(); + history_service_observation_.Reset(); } bool VerdictCacheManager::RemoveExpiredPhishGuardVerdicts(
diff --git a/components/search/search_provider_observer.cc b/components/search/search_provider_observer.cc index 20ecd24..f8200b3c4 100644 --- a/components/search/search_provider_observer.cc +++ b/components/search/search_provider_observer.cc
@@ -30,6 +30,6 @@ void SearchProviderObserver::OnTemplateURLServiceShuttingDown() { DCHECK(service_); DCHECK(service_observation_.IsObservingSource(service_)); - service_observation_.RemoveObservation(); + service_observation_.Reset(); service_ = nullptr; }
diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h index fb8a6a16..aef3ea3 100644 --- a/components/search_engines/template_url.h +++ b/components/search_engines/template_url.h
@@ -589,11 +589,12 @@ enum Type { // Installed only on this device. Should not be synced. This is not common. LOCAL = 0, - // Regular search engine. This is the most common. + // Regular search engine. This is the most common, and the ONLY type synced. NORMAL = 1, - // Installed by extension through Override Settings API. + // Installed by extension through Override Settings API. Not synced. NORMAL_CONTROLLED_BY_EXTENSION = 2, // The keyword associated with an extension that uses the Omnibox API. + // Not synced. OMNIBOX_API_EXTENSION = 3, };
diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc index 6802529..aae6823 100644 --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc
@@ -1962,85 +1962,6 @@ Update(url, TemplateURL(data)); } -base::string16 TemplateURLService::UniquifyKeyword(const TemplateURL& turl, - bool force) { - DCHECK(!IsCreatedByExtension(&turl)); - if (!force) { - // Already unique. - if (!GetTemplateURLForKeyword(turl.keyword())) - return turl.keyword(); - - // First, try to return the generated keyword for the TemplateURL. - GURL gurl(turl.url()); - if (gurl.is_valid()) { - base::string16 keyword_candidate = TemplateURL::GenerateKeyword(gurl); - if (!GetTemplateURLForKeyword(keyword_candidate)) - return keyword_candidate; - } - } - - // We try to uniquify the keyword by appending a special character to the end. - // This is a best-effort approach where we try to preserve the original - // keyword and let the user do what they will after our attempt. - base::string16 keyword_candidate(turl.keyword()); - do { - keyword_candidate.append(base::ASCIIToUTF16("_")); - } while (GetTemplateURLForKeyword(keyword_candidate)); - - return keyword_candidate; -} - -bool TemplateURLService::IsLocalTemplateURLBetter( - const TemplateURL* local_turl, - const TemplateURL* sync_turl, - bool prefer_local_default) const { - DCHECK(GetTemplateURLForGUID(local_turl->sync_guid())); - return local_turl->last_modified() > sync_turl->last_modified() || - local_turl->created_by_policy() || - (prefer_local_default && local_turl == GetDefaultSearchProvider()); -} - -void TemplateURLService::ResolveSyncKeywordConflict( - TemplateURL* unapplied_sync_turl, - TemplateURL* applied_sync_turl, - syncer::SyncChangeList* change_list) { - DCHECK(loaded_); - DCHECK(unapplied_sync_turl); - DCHECK(applied_sync_turl); - DCHECK(change_list); - DCHECK_EQ(applied_sync_turl->keyword(), unapplied_sync_turl->keyword()); - DCHECK_EQ(TemplateURL::NORMAL, applied_sync_turl->type()); - - Scoper scoper(this); - - // Both |unapplied_sync_turl| and |applied_sync_turl| are known to Sync, so - // don't delete either of them. Instead, determine which is "better" and - // uniquify the other one, sending an update to the server for the updated - // entry. - const bool applied_turl_is_better = - IsLocalTemplateURLBetter(applied_sync_turl, unapplied_sync_turl); - TemplateURL* loser = applied_turl_is_better ? - unapplied_sync_turl : applied_sync_turl; - base::string16 new_keyword = UniquifyKeyword(*loser, false); - DCHECK(!GetTemplateURLForKeyword(new_keyword)); - if (applied_turl_is_better) { - // Just set the keyword of |unapplied_sync_turl|. The caller is responsible - // for adding or updating unapplied_sync_turl in the local model. - unapplied_sync_turl->data_.SetKeyword(new_keyword); - } else { - // Update |applied_sync_turl| in the local model with the new keyword. - TemplateURLData data(applied_sync_turl->data()); - data.SetKeyword(new_keyword); - Update(applied_sync_turl, TemplateURL(data)); - } - // The losing TemplateURL should have their keyword updated. Send a change to - // the server to reflect this change. - syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*loser); - change_list->push_back(syncer::SyncChange(FROM_HERE, - syncer::SyncChange::ACTION_UPDATE, - sync_data)); -} - void TemplateURLService::MergeInSyncTemplateURL( TemplateURL* sync_turl, const SyncDataMap& sync_data, @@ -2050,49 +1971,63 @@ DCHECK(!GetTemplateURLForGUID(sync_turl->sync_guid())); DCHECK(IsFromSync(sync_turl, sync_data)); - TemplateURL* conflicting_turl = - FindNonExtensionTemplateURLForKeyword(sync_turl->keyword()); bool should_add_sync_turl = true; Scoper scoper(this); - // Resolve conflicts with local TemplateURLs. - if (conflicting_turl) { - // Modify |conflicting_turl| to make room for |sync_turl|. + // First resolve conflicts with local duplicate keyword NORMAL TemplateURLs, + // working from best to worst. + DCHECK(sync_turl->type() == TemplateURL::NORMAL); + std::vector<TemplateURL*> local_duplicates; + const auto match_range = + keyword_to_turl_and_length_.equal_range(sync_turl->keyword()); + for (auto it = match_range.first; it != match_range.second; ++it) { + TemplateURL* local_turl = it->second.first; + if (local_turl->type() == TemplateURL::NORMAL) { + local_duplicates.push_back(local_turl); + } + } + base::ranges::sort(local_duplicates, [&](const auto& a, const auto& b) { + return a->IsBetterThanEngineWithConflictingKeyword(b); + }); + for (TemplateURL* conflicting_turl : local_duplicates) { if (IsFromSync(conflicting_turl, sync_data)) { // |conflicting_turl| is already known to Sync, so we're not allowed to - // remove it. In this case, we want to uniquify the worse one and send an - // update for the changed keyword to sync. We can reuse the logic from - // ResolveSyncKeywordConflict for this. - ResolveSyncKeywordConflict(sync_turl, conflicting_turl, change_list); - } else { - // |conflicting_turl| is not yet known to Sync. If it is better, then we - // want to transfer its values up to sync. Otherwise, we remove it and - // allow the entry from Sync to overtake it in the model. - const std::string guid = conflicting_turl->sync_guid(); - if (IsLocalTemplateURLBetter(conflicting_turl, sync_turl)) { - ResetTemplateURLGUID(conflicting_turl, sync_turl->sync_guid()); - syncer::SyncData sync_data = - CreateSyncDataFromTemplateURL(*conflicting_turl); - change_list->push_back(syncer::SyncChange( - FROM_HERE, syncer::SyncChange::ACTION_UPDATE, sync_data)); - // Note that in this case we do not add the Sync TemplateURL to the - // local model, since we've effectively "merged" it in by updating the - // local conflicting entry with its sync_guid. - should_add_sync_turl = false; - } else { - // We guarantee that this isn't the local search provider. Otherwise, - // local would have won. - DCHECK(conflicting_turl != GetDefaultSearchProvider()); - Remove(conflicting_turl); - } - // This TemplateURL was either removed or overwritten in the local model. - // Remove the entry from the local data so it isn't pushed up to Sync. - local_data->erase(guid); + // remove it. Just leave it. TemplateURLService can tolerate duplicates. + // TODO(tommycli): Eventually we should figure out a way to merge + // substantively identical ones or somehow otherwise cull the herd. + continue; } - // prepopulate_id 0 effectively means unspecified; i.e. that the turl isn't - // a pre-populated one, so we want to ignore that case. - } else if (sync_turl->prepopulate_id() != 0) { + + // |conflicting_turl| is not yet known to Sync. If it is better, then we + // want to transfer its values up to sync. Otherwise, we remove it and + // allow the entry from Sync to overtake it in the model. + const std::string guid = conflicting_turl->sync_guid(); + if (conflicting_turl == GetDefaultSearchProvider() || + conflicting_turl->IsBetterThanEngineWithConflictingKeyword(sync_turl)) { + ResetTemplateURLGUID(conflicting_turl, sync_turl->sync_guid()); + syncer::SyncData sync_data = + CreateSyncDataFromTemplateURL(*conflicting_turl); + change_list->push_back(syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_UPDATE, sync_data)); + // Note that in this case we do not add the Sync TemplateURL to the + // local model, since we've effectively "merged" it in by updating the + // local conflicting entry with its sync_guid. + should_add_sync_turl = false; + } else { + // We guarantee that this isn't the local search provider. Otherwise, + // local would have won. + DCHECK(conflicting_turl != GetDefaultSearchProvider()); + Remove(conflicting_turl); + } + // This TemplateURL was either removed or overwritten in the local model. + // Remove the entry from the local data so it isn't pushed up to Sync. + local_data->erase(guid); + } + + // Try to take over a local prepopulated entry, assuming we haven't already + // run into a keyword conflict. + if (local_duplicates.empty() && sync_turl->prepopulate_id() != 0) { // Check for a turl with a conflicting prepopulate_id. This detects the case // where the user changes a prepopulated engine's keyword on one client, // then begins syncing on another client. We want to reflect this keyword @@ -2113,8 +2048,8 @@ // the relevant changes in, we give up and leave both intact. if (conflicting_prepopulated_turl && !IsFromSync(conflicting_prepopulated_turl, sync_data) && - !IsLocalTemplateURLBetter(conflicting_prepopulated_turl, sync_turl, - false)) { + sync_turl->IsBetterThanEngineWithConflictingKeyword( + conflicting_prepopulated_turl)) { std::string guid = conflicting_prepopulated_turl->sync_guid(); if (conflicting_prepopulated_turl == default_search_provider_) { bool pref_matched =
diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h index b5fe67ef..ff33ce6 100644 --- a/components/search_engines/template_url_service.h +++ b/components/search_engines/template_url_service.h
@@ -443,11 +443,6 @@ FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceTest, LastVisitedTimeUpdate); FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceTest, RepairPrepopulatedSearchEngines); - FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest, UniquifyKeyword); - FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest, - IsLocalTemplateURLBetter); - FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest, - ResolveSyncKeywordConflict); FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest, PreSyncDeletes); FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest, MergeInSyncTemplateURL); FRIEND_TEST_ALL_PREFIXES(LocationBarModelTest, GoogleBaseURL); @@ -613,44 +608,6 @@ // to the database. This does not notify observers. void ResetTemplateURLGUID(TemplateURL* url, const std::string& guid); - // Attempts to generate a unique keyword for |turl| based on its original - // keyword. If its keyword is already unique, that is returned. Otherwise, it - // tries to return the autogenerated keyword if that is unique to the Service, - // and finally it repeatedly appends special characters to the keyword until - // it is unique to the Service. If |force| is true, then this will only - // execute the special character appending functionality. - base::string16 UniquifyKeyword(const TemplateURL& turl, bool force); - - // Returns true iff |local_turl| is considered "better" than |sync_turl| for - // the purposes of resolving conflicts. |local_turl| must be a TemplateURL - // known to the local model (though it may already be synced), and |sync_turl| - // is a new TemplateURL known to Sync but not yet known to the local model. - // The criteria for if |local_turl| is better than |sync_turl| is whether any - // of the following are true: - // * |local_turl|'s last_modified timestamp is newer than sync_turl. - // * |local_turl| is created by policy. - // * |prefer_local_default| is true and |local_turl| is the local default - // search provider - // - // TODO(tommycli): Consolidate into using - // TemplateURL::IsBetterThanEngineWithConflictingKeyword. Likely we will - // eliminate the |prefer_local_default| mechanism. - bool IsLocalTemplateURLBetter(const TemplateURL* local_turl, - const TemplateURL* sync_turl, - bool prefer_local_default = true) const; - - // Given two synced TemplateURLs with a conflicting keyword, one of which - // needs to be added to or updated in the local model (|unapplied_sync_turl|) - // and one which is already known to the local model (|applied_sync_turl|), - // prepares the local model so that |unapplied_sync_turl| can be added to it, - // or applied as an update to an existing TemplateURL. - // Since both entries are known to Sync and one of their keywords will change, - // an ACTION_UPDATE will be appended to |change_list| to reflect this change. - // Note that |applied_sync_turl| must not be an extension keyword. - void ResolveSyncKeywordConflict(TemplateURL* unapplied_sync_turl, - TemplateURL* applied_sync_turl, - syncer::SyncChangeList* change_list); - // Adds |sync_turl| into the local model, possibly removing or updating a // local TemplateURL to make room for it. This expects |sync_turl| to be a new // entry from Sync, not currently known to the local model. |sync_data| should @@ -662,8 +619,6 @@ // model during MergeDataAndStartSyncing. If |sync_turl| replaces a local // entry, that entry is removed from |initial_data| to prevent it from being // sent up to Sync. - // |merge_result| tracks the changes made to the local model. Added/modified/ - // deleted are updated depending on how the |sync_turl| is merged in. // This should only be called from MergeDataAndStartSyncing. void MergeInSyncTemplateURL(TemplateURL* sync_turl, const SyncDataMap& sync_data,
diff --git a/components/security_state/core/features.cc b/components/security_state/core/features.cc index 529d6dc..11064700 100644 --- a/components/security_state/core/features.cc +++ b/components/security_state/core/features.cc
@@ -7,14 +7,6 @@ namespace security_state { namespace features { -const base::Feature kMarkHttpAsFeature{"MarkHttpAs", - base::FEATURE_ENABLED_BY_DEFAULT}; -const char kMarkHttpAsFeatureParameterName[] = "treatment"; -const char kMarkHttpAsParameterDangerous[] = "dangerous"; -const char kMarkHttpAsParameterWarningAndDangerousOnFormEdits[] = - "warning-and-dangerous-on-form-edits"; -const char kMarkHttpAsParameterDangerWarning[] = "danger-warning"; - const base::Feature kLegacyTLSWarnings{"LegacyTLSWarnings", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/security_state/core/features.h b/components/security_state/core/features.h index cf1dc90..e7bf426 100644 --- a/components/security_state/core/features.h +++ b/components/security_state/core/features.h
@@ -11,30 +11,6 @@ namespace security_state { namespace features { -// This feature enables more aggressive warnings for nonsecure http:// pages. -// The exact warning treatment is dependent on the parameter 'treatment' which -// can have the following values: -// - 'dangerous': Treat all http:// pages as actively dangerous -// - 'warning-and-dangerous-on-form-edits': Show a Not Secure warning on all -// http:// pages, and treat them as actively dangerous when the user edits -// form fields -// - 'danger-warning': Show a grey triangle icon instead of the info icon on all -// http:// pages. -COMPONENT_EXPORT(SECURITY_STATE_FEATURES) -extern const base::Feature kMarkHttpAsFeature; - -// The parameter name which controls the warning treatment. -COMPONENT_EXPORT(SECURITY_STATE_FEATURES) -extern const char kMarkHttpAsFeatureParameterName[]; - -// The different parameter values, described above. -COMPONENT_EXPORT(SECURITY_STATE_FEATURES) -extern const char kMarkHttpAsParameterDangerous[]; -COMPONENT_EXPORT(SECURITY_STATE_FEATURES) -extern const char kMarkHttpAsParameterWarningAndDangerousOnFormEdits[]; -COMPONENT_EXPORT(SECURITY_STATE_FEATURES) -extern const char kMarkHttpAsParameterDangerWarning[]; - // This feature enables security warning UI treatments for sites that use legacy // TLS version (TLS 1.0 or 1.1). COMPONENT_EXPORT(SECURITY_STATE_FEATURES)
diff --git a/components/security_state/core/security_state.cc b/components/security_state/core/security_state.cc index 05f2b8fa..63751af 100644 --- a/components/security_state/core/security_state.cc +++ b/components/security_state/core/security_state.cc
@@ -21,25 +21,6 @@ namespace { -// For nonsecure pages, returns a SecurityLevel based on the -// provided information and the kMarkHttpAsFeature field trial. -SecurityLevel GetSecurityLevelForNonSecureFieldTrial( - const InsecureInputEventData& input_events) { - if (base::FeatureList::IsEnabled(features::kMarkHttpAsFeature)) { - std::string parameter = base::GetFieldTrialParamValueByFeature( - features::kMarkHttpAsFeature, - features::kMarkHttpAsFeatureParameterName); - if (parameter == features::kMarkHttpAsParameterDangerous) { - return DANGEROUS; - } - if (parameter == - features::kMarkHttpAsParameterWarningAndDangerousOnFormEdits) { - return input_events.insecure_field_edited ? DANGEROUS : WARNING; - } - } - return WARNING; -} - std::string GetHistogramSuffixForSecurityLevel( security_state::SecurityLevel level) { switch (level) { @@ -177,8 +158,7 @@ return NONE; } #endif // !defined(OS_ANDROID) - return GetSecurityLevelForNonSecureFieldTrial( - visible_security_state.insecure_input_events); + return WARNING; } return NONE; }
diff --git a/components/security_state/core/security_state_unittest.cc b/components/security_state/core/security_state_unittest.cc index 33132a55..aa6d3a5 100644 --- a/components/security_state/core/security_state_unittest.cc +++ b/components/security_state/core/security_state_unittest.cc
@@ -312,34 +312,11 @@ EXPECT_EQ(DANGEROUS, helper.GetSecurityLevel()); } -// Tests that WARNING is set on normal http pages but DANGEROUS on -// form edits when kMarkHttpAsFeature is set to lower security state on form -// edits. -TEST(SecurityStateTest, WarningAndDangerousOnFormEditsWhenFeatureEnabled) { +// Tests that WARNING is set on normal http pages regardless of +// form edits. +TEST(SecurityStateTest, WarningOnHttpAndFormEdits) { TestSecurityStateHelper helper; helper.SetUrl(GURL(kHttpUrl)); - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features:: - kMarkHttpAsParameterWarningAndDangerousOnFormEdits}}); - - EXPECT_EQ(security_state::WARNING, helper.GetSecurityLevel()); - - helper.set_insecure_field_edit(true); - EXPECT_EQ(DANGEROUS, helper.GetSecurityLevel()); -} - -// Tests that WARNING is set on normal http pages regardless of form edits with -// default feature enabled. -TEST(SecurityStateTest, - AlwaysWarningWhenFeatureMarksWithTriangleWarningAndFeatureEnabled) { - TestSecurityStateHelper helper; - helper.SetUrl(GURL(kHttpUrl)); - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature( - security_state::features::kMarkHttpAsFeature); EXPECT_EQ(WARNING, helper.GetSecurityLevel()); @@ -347,39 +324,6 @@ EXPECT_EQ(WARNING, helper.GetSecurityLevel()); } -// Tests that WARNING is set on normal http pages regardless of form edits with -// default feature disabled. -TEST(SecurityStateTest, - AlwaysWarningWhenFeatureMarksWithTriangleWarningAndFeatureDisabled) { - TestSecurityStateHelper helper; - helper.SetUrl(GURL(kHttpUrl)); - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndDisableFeature( - security_state::features::kMarkHttpAsFeature); - - EXPECT_EQ(WARNING, helper.GetSecurityLevel()); - - helper.set_insecure_field_edit(true); - EXPECT_EQ(WARNING, helper.GetSecurityLevel()); -} - -// Tests that DANGEROUS is set on normal http pages regardless of form edits -// when kMarkHttpAsFeature is set to always DANGEROUS -TEST(SecurityStateTest, AlwaysDangerousWhenFeatureMarksAllAsDangerous) { - TestSecurityStateHelper helper; - helper.SetUrl(GURL(kHttpUrl)); - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - security_state::features::kMarkHttpAsFeature, - {{security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}); - - EXPECT_EQ(DANGEROUS, helper.GetSecurityLevel()); - - helper.set_insecure_field_edit(true); - EXPECT_EQ(DANGEROUS, helper.GetSecurityLevel()); -} - // Tests that |safety_tip_status| effects security level appropriately. TEST(SecurityStateTest, SafetyTipSometimesRemovesSecure) { using security_state::SafetyTipStatus;
diff --git a/components/signin/core/browser/signin_error_controller.cc b/components/signin/core/browser/signin_error_controller.cc index 1725eaa1..9490cd5 100644 --- a/components/signin/core/browser/signin_error_controller.cc +++ b/components/signin/core/browser/signin_error_controller.cc
@@ -21,7 +21,8 @@ SigninErrorController::~SigninErrorController() = default; void SigninErrorController::Shutdown() { - scoped_identity_manager_observation_.RemoveObservation(); + DCHECK(scoped_identity_manager_observation_.IsObserving()); + scoped_identity_manager_observation_.Reset(); } void SigninErrorController::Update() {
diff --git a/components/signin/ios/browser/account_consistency_service.h b/components/signin/ios/browser/account_consistency_service.h index 2a1aef6..5d8f509 100644 --- a/components/signin/ios/browser/account_consistency_service.h +++ b/components/signin/ios/browser/account_consistency_service.h
@@ -137,9 +137,6 @@ const net::CookieAccessResultList& cookie_list, const net::CookieAccessResultList& excluded_cookies); - // Records whether Gaia cookies were present on navigation in UMA histogram. - static void LogIOSGaiaCookiesPresentOnNavigation(bool is_present); - // Clears all pending cookie requests and cached domains. void ResetInternalState();
diff --git a/components/signin/ios/browser/account_consistency_service.mm b/components/signin/ios/browser/account_consistency_service.mm index be5ba60a..8e945997 100644 --- a/components/signin/ios/browser/account_consistency_service.mm +++ b/components/signin/ios/browser/account_consistency_service.mm
@@ -67,6 +67,22 @@ url, net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); } +// The Gaia cookie state on navigation for a signed-in Chrome user. +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class GaiaCookieStateOnSignedInNavigation { + kGaiaCookiePresentOnNavigation = 0, + kGaiaCookieAbsentOnGoogleAssociatedDomainNavigation = 1, + kGaiaCookieAbsentOnAddSessionNavigation = 2, + kMaxValue = kGaiaCookieAbsentOnAddSessionNavigation +}; + +// Records the state of Gaia cookies for a navigation in UMA histogram. +void LogIOSGaiaCookiesState(GaiaCookieStateOnSignedInNavigation state) { + base::UmaHistogramEnumeration("Signin.IOSGaiaCookieStateOnSignedInNavigation", + state); +} + // Allows for manual testing by reducing the polling interval for verifying the // existence of the GAIA cookie. base::TimeDelta GetDelayThresholdToUpdateGaiaCookie() { @@ -94,6 +110,7 @@ AccountConsistencyHandler(web::WebState* web_state, AccountConsistencyService* service, AccountReconcilor* account_reconcilor, + signin::IdentityManager* identity_manager, id<ManageAccountsDelegate> delegate); void WebStateDestroyed(web::WebState* web_state) override; @@ -120,6 +137,7 @@ bool gaia_cookies_restored_ = false; AccountConsistencyService* account_consistency_service_; // Weak. AccountReconcilor* account_reconcilor_; // Weak. + signin::IdentityManager* identity_manager_; __weak id<ManageAccountsDelegate> delegate_; base::WeakPtrFactory<AccountConsistencyHandler> weak_ptr_factory_; }; @@ -129,10 +147,12 @@ web::WebState* web_state, AccountConsistencyService* service, AccountReconcilor* account_reconcilor, + signin::IdentityManager* identity_manager, id<ManageAccountsDelegate> delegate) : web::WebStatePolicyDecider(web_state), account_consistency_service_(service), account_reconcilor_(account_reconcilor), + identity_manager_(identity_manager), delegate_(delegate), weak_ptr_factory_(this) { web_state->AddObserver(this); @@ -210,6 +230,12 @@ } case signin::GAIA_SERVICE_TYPE_SIGNUP: case signin::GAIA_SERVICE_TYPE_ADDSESSION: + // This situation is only possible if the all cookies have been deleted by + // ITP restrictions and Chrome has not triggered a cookie refresh. + if (identity_manager_->HasPrimaryAccount()) { + LogIOSGaiaCookiesState(GaiaCookieStateOnSignedInNavigation:: + kGaiaCookieAbsentOnAddSessionNavigation); + } if (params.show_consistency_promo) { show_consistency_promo_ = true; // Allows the URL response to load before showing the consistency promo. @@ -325,7 +351,7 @@ id<ManageAccountsDelegate> delegate) { DCHECK_EQ(0u, web_state_handlers_.count(web_state)); web_state_handlers_[web_state].reset(new AccountConsistencyHandler( - web_state, this, account_reconcilor_, delegate)); + web_state, this, account_reconcilor_, identity_manager_, delegate)); } void AccountConsistencyService::RemoveWebStateHandler( @@ -363,14 +389,17 @@ const net::CookieAccessResultList& unused_excluded_cookies) { for (const auto& cookie : cookie_list) { if (cookie.cookie.Name() == kGaiaCookieName) { - LogIOSGaiaCookiesPresentOnNavigation(true); + LogIOSGaiaCookiesState( + GaiaCookieStateOnSignedInNavigation::kGaiaCookiePresentOnNavigation); return; } } // The SAPISID cookie may have been deleted previous to this update due to // ITP restrictions marking Google domains as potential trackers. - LogIOSGaiaCookiesPresentOnNavigation(false); + LogIOSGaiaCookiesState( + GaiaCookieStateOnSignedInNavigation:: + kGaiaCookieAbsentOnGoogleAssociatedDomainNavigation); if (!base::FeatureList::IsEnabled(signin::kRestoreGaiaCookiesIfDeleted)) { return; @@ -383,12 +412,6 @@ } } -void AccountConsistencyService::LogIOSGaiaCookiesPresentOnNavigation( - bool is_present) { - base::UmaHistogramBoolean("Signin.IOSGaiaCookiePresentOnNavigation", - is_present); -} - void AccountConsistencyService::RemoveAllChromeConnectedCookies( base::OnceClosure callback) { DCHECK(!browser_state_->IsOffTheRecord());
diff --git a/components/signin/ios/browser/account_consistency_service_unittest.mm b/components/signin/ios/browser/account_consistency_service_unittest.mm index 789a538..a9c02fe 100644 --- a/components/signin/ios/browser/account_consistency_service_unittest.mm +++ b/components/signin/ios/browser/account_consistency_service_unittest.mm
@@ -55,9 +55,10 @@ // Google domain where the CHROME_CONNECTED cookie is set/removed. const char* kCountryGoogleDomain = "google.de"; -// Name of the histogram to record whether the GAIA cookie is present. -const char* kGAIACookiePresentHistogram = - "Signin.IOSGaiaCookiePresentOnNavigation"; +// Name of the histogram to record the state of the GAIA cookie for the +// navigation. +const char* kGAIACookieOnNavigationHistogram = + "Signin.IOSGaiaCookieStateOnSignedInNavigation"; // Returns a cookie domain that applies for all origins on |host_domain|. std::string GetCookieDomain(const std::string& host_domain) { @@ -735,17 +736,17 @@ cookie_updated = true; }); - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 0); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 0); SimulateUpdateGaiaCookie(std::move(callback)); base::RunLoop().RunUntilIdle(); - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 0); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 0); ASSERT_FALSE(cookie_updated); SignIn(); SimulateUpdateGaiaCookie(std::move(callback)); base::RunLoop().RunUntilIdle(); - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 1); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 1); ASSERT_FALSE(cookie_updated); } @@ -757,14 +758,14 @@ signin::kRestoreGaiaCookiesIfDeleted); base::HistogramTester histogram_tester; - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 0); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 0); __block bool cookie_updated = false; SimulateUpdateGaiaCookie(base::BindOnce(^{ cookie_updated = true; })); base::RunLoop().RunUntilIdle(); - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 0); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 0); ASSERT_FALSE(cookie_updated); SignIn(); @@ -772,10 +773,44 @@ cookie_updated = true; })); base::RunLoop().RunUntilIdle(); - histogram_tester.ExpectTotalCount(kGAIACookiePresentHistogram, 1); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 1); ASSERT_TRUE(cookie_updated); } +// Tests that navigating to accounts.google.com without a GAIA cookie is logged +// by the navigation histogram. +TEST_F(AccountConsistencyServiceTest, GAIACookieMissingOnSignin) { + SignIn(); + + id delegate = + [OCMockObject mockForProtocol:@protocol(ManageAccountsDelegate)]; + [[delegate expect] onAddAccount]; + + NSDictionary* headers = + [NSDictionary dictionaryWithObject:@"action=ADDSESSION" + forKey:@"X-Chrome-Manage-Accounts"]; + NSHTTPURLResponse* response = [[NSHTTPURLResponse alloc] + initWithURL:[NSURL URLWithString:@"https://accounts.google.com/"] + statusCode:200 + HTTPVersion:@"HTTP/1.1" + headerFields:headers]; + EXPECT_CALL(*account_reconcilor_, OnReceivedManageAccountsResponse( + signin::GAIA_SERVICE_TYPE_ADDSESSION)) + .Times(2); + + SimulateNavigateToURLWithInterruption(response, delegate); + base::HistogramTester histogram_tester; + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 0); + + SimulateExternalSourceRemovesAllGoogleDomainCookies(); + + [[delegate expect] onAddAccount]; + SimulateNavigateToURLWithInterruption(response, delegate); + histogram_tester.ExpectTotalCount(kGAIACookieOnNavigationHistogram, 1); + + EXPECT_OCMOCK_VERIFY(delegate); +} + // Ensures that set and remove cookie operations are handled in the order // they are called resulting in no cookies. TEST_F(AccountConsistencyServiceTest, DeleteChromeConnectedCookiesAfterSet) {
diff --git a/components/signin/public/identity_manager/access_token_fetcher.cc b/components/signin/public/identity_manager/access_token_fetcher.cc index dca31a4..7b8e04f 100644 --- a/components/signin/public/identity_manager/access_token_fetcher.cc +++ b/components/signin/public/identity_manager/access_token_fetcher.cc
@@ -145,7 +145,7 @@ return; DCHECK(token_service_observation_.IsObservingSource(token_service_)); - token_service_observation_.RemoveObservation(); + token_service_observation_.Reset(); StartAccessTokenRequest(); }
diff --git a/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc b/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc index fdee5db..e96ecfc9 100644 --- a/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc +++ b/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc
@@ -111,7 +111,7 @@ return; DCHECK(identity_manager_observation_.IsObservingSource(identity_manager_)); - identity_manager_observation_.RemoveObservation(); + identity_manager_observation_.Reset(); StartAccessTokenRequest(); }
diff --git a/components/strings/components_google_chrome_strings_fi.xtb b/components/strings/components_google_chrome_strings_fi.xtb index c629dc93..f66d9d1b 100644 --- a/components/strings/components_google_chrome_strings_fi.xtb +++ b/components/strings/components_google_chrome_strings_fi.xtb
@@ -1,7 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fi"> -<translation id="1016765312371154165">Chromea ei suljettu oikein.</translation> +<translation id="1016765312371154165">Chrome ei sulkeutunut oikein.</translation> <translation id="130631256467250065">Muutokset tulevat voimaan, kun käynnistät laitteen seuraavan kerran.</translation> <translation id="2588322182880276190">Chrome-logo</translation> <translation id="2874156562296220396">Google Chromen mahdollistivat avoimen lähdekoodin projekti <ph name="BEGIN_LINK_CHROMIUM" />Chromium<ph name="END_LINK_CHROMIUM" /> ja muut <ph name="BEGIN_LINK_OSS" />avoimen lähdekoodin ohjelmistot<ph name="END_LINK_OSS" />.</translation>
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc index 1c7141be..e4e680c 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc +++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
@@ -141,7 +141,8 @@ void ContentSubresourceFilterThrottleManager::OnSubresourceFilterGoingAway() { // Stop observing here because the observer manager could be destroyed by the // time this class is destroyed. - scoped_observation_.RemoveObservation(); + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); } void ContentSubresourceFilterThrottleManager::RenderFrameDeleted( @@ -322,6 +323,7 @@ DCHECK(frame_host); std::unique_ptr<AsyncDocumentSubresourceFilter> filter; + base::Optional<mojom::ActivationState> activation_to_inherit; did_inherit_opener_activation = false; if (navigation_handle->HasCommitted() && throttle) { @@ -330,47 +332,43 @@ } // If the frame should inherit its activation then, if it has an activated - // opener, construct a filter with the inherited activation state. The + // opener/parent, construct a filter with the inherited activation state. The // filter's activation state will be available immediately so a throttle is // not required. Instead, we construct the filter synchronously. if (ShouldInheritOpenerActivation(navigation_handle, frame_host)) { content::RenderFrameHost* opener_rfh = navigation_handle->GetWebContents()->GetOpener(); - base::Optional<mojom::ActivationState> opener_activation; if (auto* opener_throttle_manager = ContentSubresourceFilterThrottleManager::FromWebContents( content::WebContents::FromRenderFrameHost(opener_rfh))) { - opener_activation = + activation_to_inherit = opener_throttle_manager->GetFrameActivationState(opener_rfh); did_inherit_opener_activation = true; } - - if (opener_activation && opener_activation->activation_level != - mojom::ActivationLevel::kDisabled) { - DCHECK(dealer_handle_); - - // This constructs the filter in a way that allows it to be immediately - // used. See the AsyncDocumentSubresourceFilter constructor for details. - filter = std::make_unique<AsyncDocumentSubresourceFilter>( - EnsureRulesetHandle(), frame_host->GetLastCommittedOrigin(), - *opener_activation); - } + } else if (ShouldInheritParentActivation(navigation_handle)) { + // Throttles are only constructed for navigations handled by the network + // stack and we only release filters for committed navigations. + DCHECK(!filter); + activation_to_inherit = + GetFrameActivationState(navigation_handle->GetParentFrame()); } - // Make sure |frame_host_filter_map_| is updated or cleaned up depending on - // this navigation's activation state. + if (activation_to_inherit.has_value() && + activation_to_inherit->activation_level != + mojom::ActivationLevel::kDisabled) { + DCHECK(dealer_handle_); + + // This constructs the filter in a way that allows it to be immediately + // used. See the AsyncDocumentSubresourceFilter constructor for details. + filter = std::make_unique<AsyncDocumentSubresourceFilter>( + EnsureRulesetHandle(), frame_host->GetLastCommittedOrigin(), + activation_to_inherit.value()); + } + + // Make sure `frame_host_filter_map_` is cleaned up if necessary. Otherwise, + // it is updated below. if (!filter) { - if (ShouldInheritParentActivation(navigation_handle) && - base::Contains(frame_host_filter_map_, - navigation_handle->GetParentFrame())) { - // TODO(crbug.com/1134288): Synchronously construct filters for subframes - // to inherit activation from their parents, instead of walking up the - // frame tree. Once done, consider updating the map in the caller. - // |nullptr| indicates a subframe inheriting its activation. - frame_host_filter_map_[frame_host] = nullptr; - } else { - frame_host_filter_map_.erase(frame_host); - } + frame_host_filter_map_.erase(frame_host); return nullptr; } @@ -591,24 +589,12 @@ content::RenderFrameHost* frame_host) { DCHECK(frame_host); - // Filter will be null for those special url navigations that were added in - // MaybeActivateSubframeSpecialUrls and for subframes with an aborted load. - // Return the filter of the first parent with a non-null filter. - while (frame_host) { - auto it = frame_host_filter_map_.find(frame_host); - if (it == frame_host_filter_map_.end()) - return nullptr; + auto it = frame_host_filter_map_.find(frame_host); + if (it == frame_host_filter_map_.end()) + return nullptr; - if (it->second) - return it->second.get(); - frame_host = it->first->GetParent(); - } - - // Since a null filter is only possible for special navigations of iframes and - // aborted loads in a subframe, the above loop should have found a filter for - // at least the top level frame, thus making this unreachable. - NOTREACHED(); - return nullptr; + DCHECK(it->second); + return it->second.get(); } void ContentSubresourceFilterThrottleManager::MaybeShowNotification() {
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h index 2c23faad..129c14fa 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h +++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h
@@ -235,12 +235,9 @@ const mojom::ActivationLevel& activation_level, bool did_inherit_opener_activation); - // For each RenderFrameHost where the last committed load has subresource - // filtering activated, owns the corresponding AsyncDocumentSubresourceFilter. - // A null filter indicates that the filter should be inherited from its - // parent if the parent has one. This is possible if the last load was a - // special navigation (see MaybeActivateSubframeSpecialUrls) or if no - // navigations have committed. + // For each RenderFrameHost where the last committed load (or the initial load + // if no committed load has occurred) has subresource filtering activated, + // owns the corresponding AsyncDocumentSubresourceFilter. std::map<content::RenderFrameHost*, std::unique_ptr<AsyncDocumentSubresourceFilter>> frame_host_filter_map_;
diff --git a/components/subresource_filter/content/browser/subresource_filter_observer_test_utils.cc b/components/subresource_filter/content/browser/subresource_filter_observer_test_utils.cc index b2a918d24..cf64b05 100644 --- a/components/subresource_filter/content/browser/subresource_filter_observer_test_utils.cc +++ b/components/subresource_filter/content/browser/subresource_filter_observer_test_utils.cc
@@ -23,7 +23,8 @@ TestSubresourceFilterObserver::~TestSubresourceFilterObserver() {} void TestSubresourceFilterObserver::OnSubresourceFilterGoingAway() { - scoped_observation_.RemoveObservation(); + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); } void TestSubresourceFilterObserver::OnPageActivationComputed(
diff --git a/components/suggestions/suggestions_service_impl.cc b/components/suggestions/suggestions_service_impl.cc index 50af7fe..e141fc1 100644 --- a/components/suggestions/suggestions_service_impl.cc +++ b/components/suggestions/suggestions_service_impl.cc
@@ -522,8 +522,7 @@ // Cancel pending request. pending_request_.reset(nullptr); - if (sync_service_observation_.IsObserving()) - sync_service_observation_.RemoveObservation(); + sync_service_observation_.Reset(); } void SuggestionsServiceImpl::ScheduleBlocklistUpload() {
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 62aec7a..28a4c781 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -320,7 +320,7 @@ if (old_state == STOPPED || old_state == CONFIGURED) NotifyStart(); - download_types_queue_ = PrioritizeTypes(last_enabled_types_); + configuration_types_queue_ = PrioritizeTypes(last_enabled_types_); association_types_info_.reset(); model_load_manager_.Initialize( @@ -330,12 +330,12 @@ void DataTypeManagerImpl::OnAllDataTypesReadyForConfigure() { // TODO(crbug.com/1102837): Should we handle |needs_reconfigure_| here, - // before even starting the downloads? - // TODO(pavely): By now some of datatypes in |download_types_queue_| could - // have failed loading and should be excluded from configuration. I need to - // adjust |download_types_queue_| for such types. + // before even starting the configuration? + // TODO(pavely): By now some of datatypes in |configuration_types_queue_| + // could have failed loading and should be excluded from configuration. I need + // to adjust |configuration_types_queue_| for such types. ActivateDataTypes(); - StartNextDownload(/*high_priority_types_before=*/ModelTypeSet()); + StartNextConfiguration(/*higher_priority_types_before=*/ModelTypeSet()); } ModelTypeSet DataTypeManagerImpl::GetPriorityTypes() const { @@ -344,7 +344,7 @@ base::queue<ModelTypeSet> DataTypeManagerImpl::PrioritizeTypes( const ModelTypeSet& types) { - // Control types are usually downloaded before all other types during + // Control types are usually configured before all other types during // initialization of sync engine even before data type manager gets // constructed. However, listing control types here with the highest priority // makes the behavior consistent also for various flows for restarting sync @@ -427,8 +427,8 @@ return; } - // Wait for current download to finish. - if (!download_types_queue_.empty()) { + // Wait for current configuration to finish. + if (!configuration_types_queue_.empty()) { return; } @@ -452,12 +452,12 @@ ConfigureImpl(last_requested_types_, last_requested_context_); } -void DataTypeManagerImpl::DownloadCompleted( - ModelTypeSet downloaded_types, +void DataTypeManagerImpl::ConfigurationCompleted( + ModelTypeSet configured_types, ModelTypeSet succeeded_configuration_types, ModelTypeSet failed_configuration_types) { - // Note: |downloaded_types| are the types we requested to download, but some - // of them might have been downloaded already. |succeeded_configuration_types| + // Note: |configured_types| are the types we requested to configure. Some of + // them might have been downloaded already. |succeeded_configuration_types| // are the ones that were actually downloaded just now. DCHECK_EQ(CONFIGURING, state_); @@ -465,24 +465,24 @@ DataTypeStatusTable::TypeErrorMap errors; for (ModelType type : failed_configuration_types) { SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR, - "Backend failed to download type.", type); + "Backend failed to download and configure type.", type); errors[type] = error; } data_type_status_table_.UpdateFailedDataTypes(errors); needs_reconfigure_ = true; } - // If a reconfigure was requested while this download was ongoing, process it - // now. + // If a reconfigure was requested while this configuration was ongoing, + // process it now. if (needs_reconfigure_) { - download_types_queue_ = base::queue<ModelTypeSet>(); + configuration_types_queue_ = base::queue<ModelTypeSet>(); ProcessReconfigure(); return; } - DCHECK(!download_types_queue_.empty()); - DCHECK(download_types_queue_.front() == downloaded_types); - download_types_queue_.pop(); + DCHECK(!configuration_types_queue_.empty()); + DCHECK(configuration_types_queue_.front() == configured_types); + configuration_types_queue_.pop(); if (association_types_info_) { // A non-empty |association_types_info_| means there were actually types @@ -493,23 +493,36 @@ } DCHECK(!association_types_info_); - if (download_types_queue_.empty()) { + if (configuration_types_queue_.empty()) { state_ = CONFIGURED; NotifyDone(ConfigureResult(OK, last_requested_types_)); return; } - StartNextDownload(/*high_priority_types_before=*/downloaded_types); + StartNextConfiguration(/*higher_priority_types_before=*/configured_types); } -void DataTypeManagerImpl::StartNextDownload( - ModelTypeSet high_priority_types_before) { - if (download_types_queue_.empty()) +void DataTypeManagerImpl::StartNextConfiguration( + ModelTypeSet higher_priority_types_before) { + if (configuration_types_queue_.empty()) return; ModelTypeConfigurer::ConfigureParams config_params; ModelTypeSet ready_types = PrepareConfigureParams(&config_params); + DCHECK(!association_types_info_); + association_types_info_ = AssociationTypesInfo(); + association_types_info_->types = configuration_types_queue_.front(); + association_types_info_->ready_types = ready_types; + association_types_info_->download_start_time = base::Time::Now(); + association_types_info_->higher_priority_types_before = + higher_priority_types_before; + + // Record stats for the types that are already downloaded. The remaining types + // will be handled once their download finishes (which happens as part of + // ConfigureDataTypes). + RecordConfigurationStats(ready_types); + // The engine's state was initially derived from the types detected to have // been downloaded in the database. Afterwards it is modified only by this // function. We expect |downloaded_types_| to remain consistent because @@ -522,19 +535,6 @@ // through the DataTypeManager, and we are careful to never send a new // configure request until the current request succeeds. configurer_->ConfigureDataTypes(std::move(config_params)); - - DCHECK(!association_types_info_); - association_types_info_ = AssociationTypesInfo(); - association_types_info_->types = download_types_queue_.front(); - association_types_info_->ready_types = ready_types; - association_types_info_->download_start_time = base::Time::Now(); - association_types_info_->high_priority_types_before = - high_priority_types_before; - - // Record stats for the types that are already downloaded. The remaining types - // will be handled once their download finishes (which happens as part of - // ConfigureDataTypes). - RecordConfigurationStats(ready_types); } ModelTypeSet DataTypeManagerImpl::PrepareConfigureParams( @@ -547,7 +547,7 @@ // - Everything else (enabled types and already disabled types) is not // touched. const DataTypeConfigStateMap config_state_map = - BuildDataTypeConfigStateMap(download_types_queue_.front()); + BuildDataTypeConfigStateMap(configuration_types_queue_.front()); const ModelTypeSet fatal_types = GetDataTypesInState(FATAL, config_state_map); const ModelTypeSet crypto_types = GetDataTypesInState(CRYPTO, config_state_map); @@ -628,9 +628,9 @@ params->enabled_types = enabled_types; params->to_download = types_to_download; params->to_purge = types_to_purge; - params->ready_task = base::BindOnce(&DataTypeManagerImpl::DownloadCompleted, - weak_ptr_factory_.GetWeakPtr(), - download_types_queue_.front()); + params->ready_task = base::BindOnce( + &DataTypeManagerImpl::ConfigurationCompleted, + weak_ptr_factory_.GetWeakPtr(), configuration_types_queue_.front()); params->is_sync_feature_enabled = last_requested_context_.sync_mode == SyncMode::kFull; @@ -700,7 +700,7 @@ info.download_ready_time - info.download_start_time; } configuration_stats_[type].high_priority_types_configured_before = - info.high_priority_types_before; + info.higher_priority_types_before; configuration_stats_[type].same_priority_types_configured_before = info.configured_types; info.configured_types.Put(type); @@ -733,7 +733,7 @@ void DataTypeManagerImpl::StopImpl(ShutdownReason reason) { state_ = STOPPING; - // Invalidate weak pointer to drop download callbacks. + // Invalidate weak pointer to drop configuration callbacks. weak_ptr_factory_.InvalidateWeakPtrs(); // Stop all data types.
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index d72eece..d0e659c1 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -111,7 +111,7 @@ // was an actual change. bool UpdatePreconditionError(ModelType type); - // Starts a reconfiguration if it's required and no downloads are running. + // Starts a reconfiguration if it's required and no configuration is running. void ProcessReconfigure(); // Programmatically force reconfiguration of all data types (if needed). @@ -119,10 +119,6 @@ void Restart(); - void DownloadCompleted(ModelTypeSet downloaded_types, - ModelTypeSet succeeded_configuration_types, - ModelTypeSet failed_configuration_types); - void NotifyStart(); void NotifyDone(const ConfigureResult& result); @@ -135,25 +131,26 @@ DataTypeConfigStateMap BuildDataTypeConfigStateMap( const ModelTypeSet& types_being_configured) const; - // Start download of next set of types in |download_types_queue_| (if - // any exist, does nothing otherwise). - // Will kick off configuration of any new ready types. - void StartNextDownload(ModelTypeSet high_priority_types_before); + // Start configuration of next set of types in |configuration_types_queue_| + // (if any exist, does nothing otherwise). + void StartNextConfiguration(ModelTypeSet higher_priority_types_before); + void ConfigurationCompleted(ModelTypeSet configured_types, + ModelTypeSet succeeded_configuration_types, + ModelTypeSet failed_configuration_types); void RecordConfigurationStats(ModelTypeSet types); - void RecordConfigurationStatsImpl(ModelType type); void StopImpl(ShutdownReason reason); - // Returns the currently enabled types. ModelTypeSet GetEnabledTypes() const; - ModelTypeConfigurer* configurer_; + ModelTypeConfigurer* const configurer_; // Map of all data type controllers that are available for sync. // This list is determined at startup by various command line flags. - const DataTypeController::TypeMap* controllers_; + const DataTypeController::TypeMap* const controllers_; + State state_; // Types that requested in current configuration cycle. @@ -196,8 +193,8 @@ // configuring backend. DataTypeStatusTable data_type_status_table_; - // Types waiting to be downloaded. - base::queue<ModelTypeSet> download_types_queue_; + // Types waiting to be configured, prioritized (highest priority first). + base::queue<ModelTypeSet> configuration_types_queue_; // Pending types and related time tracking info. struct AssociationTypesInfo { @@ -206,7 +203,7 @@ ~AssociationTypesInfo(); // Pending types. This is generally the same as - // |download_types_queue_.front()|. + // |configuration_types_queue_.front()|. ModelTypeSet types; // Types that have just been downloaded. This includes types that had // previously encountered an error and had to be purged. @@ -220,7 +217,7 @@ base::Time download_ready_time; // The set of types that are higher priority, and were therefore blocking // the download of |types|. - ModelTypeSet high_priority_types_before; + ModelTypeSet higher_priority_types_before; // The subset of |types| that were successfully configured. Populated // one-by-one as types finish configuring. ModelTypeSet configured_types;
diff --git a/components/sync/driver/sync_session_durations_metrics_recorder.cc b/components/sync/driver/sync_session_durations_metrics_recorder.cc index a16653d..5d08d59 100644 --- a/components/sync/driver/sync_session_durations_metrics_recorder.cc +++ b/components/sync/driver/sync_session_durations_metrics_recorder.cc
@@ -52,9 +52,9 @@ SyncSessionDurationsMetricsRecorder::~SyncSessionDurationsMetricsRecorder() { DCHECK(!total_session_timer_) << "Missing a call to OnSessionEnded()."; - if (sync_observation_.IsObserving()) - sync_observation_.RemoveObservation(); - identity_manager_observation_.RemoveObservation(); + sync_observation_.Reset(); + DCHECK(identity_manager_observation_.IsObserving()); + identity_manager_observation_.Reset(); } void SyncSessionDurationsMetricsRecorder::OnSessionStarted(
diff --git a/components/sync/invalidations/fcm_handler.cc b/components/sync/invalidations/fcm_handler.cc index 7039326..80b847a 100644 --- a/components/sync/invalidations/fcm_handler.cc +++ b/components/sync/invalidations/fcm_handler.cc
@@ -21,6 +21,8 @@ // Lower bound time between two token validations when listening. const int kTokenValidationPeriodMinutesDefault = 60 * 24; +const int kInstanceIDTokenTTLSeconds = 14 * 24 * 60 * 60; // 2 weeks. + FCMHandler::FCMHandler(gcm::GCMDriver* gcm_driver, instance_id::InstanceIDDriver* instance_id_driver, const std::string& sender_id, @@ -199,10 +201,9 @@ void FCMHandler::StartTokenFetch( instance_id::InstanceID::GetTokenCallback callback) { - // TODO(crbug.com/1108780): set appropriate TTL. instance_id_driver_->GetInstanceID(app_id_)->GetToken( sender_id_, instance_id::kGCMScope, - /*time_to_live=*/base::TimeDelta(), + /*time_to_live=*/base::TimeDelta::FromSeconds(kInstanceIDTokenTTLSeconds), /*options=*/std::map<std::string, std::string>(), /*flags=*/{instance_id::InstanceID::Flags::kIsLazy}, std::move(callback)); }
diff --git a/components/tab_count_metrics/DIR_METADATA b/components/tab_count_metrics/DIR_METADATA new file mode 100644 index 0000000..540f41c --- /dev/null +++ b/components/tab_count_metrics/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Metrics" +}
diff --git a/components/tab_count_metrics/OWNERS b/components/tab_count_metrics/OWNERS index eb90de8..55636e5e8 100644 --- a/components/tab_count_metrics/OWNERS +++ b/components/tab_count_metrics/OWNERS
@@ -1,4 +1,2 @@ -# COMPONENT: Internals>Metrics # Use the above COMPONENT in crbugs to to file bugs against issues in this folder - file://base/metrics/OWNERS
diff --git a/components/tab_groups/DIR_METADATA b/components/tab_groups/DIR_METADATA new file mode 100644 index 0000000..a4caa8e --- /dev/null +++ b/components/tab_groups/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>TabStrip" +}
diff --git a/components/tab_groups/OWNERS b/components/tab_groups/OWNERS index f258a7d..7b66adce 100644 --- a/components/tab_groups/OWNERS +++ b/components/tab_groups/OWNERS
@@ -1,4 +1,2 @@ -# COMPONENT: UI>Browser>TabStrip # Use the above COMPONENT in crbugs to to file bugs against issues in this folder - file://chrome/browser/ui/tabs/OWNERS
diff --git a/components/tab_groups_strings_grdp/DIR_METADATA b/components/tab_groups_strings_grdp/DIR_METADATA new file mode 100644 index 0000000..a4caa8e --- /dev/null +++ b/components/tab_groups_strings_grdp/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>TabStrip" +}
diff --git a/components/tab_groups_strings_grdp/OWNERS b/components/tab_groups_strings_grdp/OWNERS index d8ec83f..037efb29 100644 --- a/components/tab_groups_strings_grdp/OWNERS +++ b/components/tab_groups_strings_grdp/OWNERS
@@ -1,4 +1,2 @@ -# COMPONENT: UI>Browser>TabStrip # Use the above COMPONENT in crbugs to to file bugs against issues in this folder - file://components/tab_groups/OWNERS
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-25.png.sha1 deleted file mode 100644 index 93546db7..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -63880a5a01e2f474a9ace598e74336a1ff3589a4 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-26.png.sha1 deleted file mode 100644 index 8b5ae53e4..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b5cd805f3d03909a2ccb4ffc2b7322da77cdb9bb \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-27.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-27.png.sha1 deleted file mode 100644 index 01dbcff..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert.Pixel_XL-27.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a93c59d41de282768fcab3a0a4e169dad429c868 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index b0332fa..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f341033eff094f887aaf958e1f909b6717e82196 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 2b76a222..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_alert_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e93d388f9dffc6637e4cc670664a09ac3faa98b4 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-25.png.sha1 deleted file mode 100644 index 71794e4..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4c3d993f3b199ead82e7b34c247d3877c313847c \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-26.png.sha1 deleted file mode 100644 index ebc798fb..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4aeaa29d4f743de0c67b5862f4bc8003544148e8 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 26833f6..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a6869bb5512ccd656cf134f4893a4848c120f058 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 25fbd5e..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_canceled_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e15d35adc2281934e11cfa8a5c8926d1e0826bad \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index c91bb889..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a37c160f4b564de84fa917663304627d5580ea64 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 0f350df4..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_confirm_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e90f7d42455a0369db2f266d0392c9c4c437861c \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-25.png.sha1 deleted file mode 100644 index fa503e5..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -eae9c8a1507678146d98e47876e56b9b5f2e0318 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-26.png.sha1 deleted file mode 100644 index 14ba9bfa..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6a7f7d57928c705072f7bfcec117f53fece81923 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index ed9f17a..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e97473853e173d6a2bd6ba7a626462e8259c6e29 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 31304b7..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_submitted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f495f882fac3791b0a9c97754326ef123723a835 \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index b9b8a76..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d96d3ce7a33e73657326d65262784d2b1bfe9a9f \ No newline at end of file
diff --git a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index ffdf744f..0000000 --- a/components/test/data/js_dialogs/render_tests/VrBrowserJavaScriptModalDialogTest.js_modal_view_vr_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ced855eee4a2b5e1d773522d278a934cc012b017 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5-19.png.sha1 deleted file mode 100644 index c209b23..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -73e69eaee3489a12f8c46550e947521654225459 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5X-23.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5X-23.png.sha1 deleted file mode 100644 index 1a0a39f..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-free_shipping.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0cbb6a56be60e71a12438ef1a8ccefa814f232c3 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5-19.png.sha1 deleted file mode 100644 index 72584fead..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ad63bb857f8c96738f97e01380f7164064edabaf \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5X-23.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5X-23.png.sha1 deleted file mode 100644 index 21399a9..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeDisabled-unmask.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8a218c0927e72cea8d2b78408a00818e82f805eb \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5-19.png.sha1 deleted file mode 100644 index be37a90..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -136ca43e8819cff48ee62fd4386471137c958331 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5X-23.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5X-23.png.sha1 deleted file mode 100644 index d57925e..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-free_shipping.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f7e106c1d14e936cdd3489d6d548b7f87dffefd2 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5-19.png.sha1 deleted file mode 100644 index eac4639d..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -85a117d0fe717a5fa8ab5ba1596cd7410a908277 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5X-23.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5X-23.png.sha1 deleted file mode 100644 index dd6c2d77..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestFreeShippingTest.NightModeEnabled-unmask.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9ee1b1a845f4e26fba21741036cd3dbc0054fcf7 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5-19.png.sha1 deleted file mode 100644 index 4d56c99..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -51ef643a616f4279b88b1a8cbacc63bd9f084595 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5X-23.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5X-23.png.sha1 deleted file mode 100644 index cef1a5e..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_payer_errors.Nexus_5X-23.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -93198ea232a420c03cb5b4d4d4752ea973d27fc4
diff --git a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_shipping_address_errors.Nexus_5-19.png.sha1 b/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_shipping_address_errors.Nexus_5-19.png.sha1 deleted file mode 100644 index 22e8586..0000000 --- a/components/test/data/payments/render_tests/PaymentRequestRetryTest.retry_with_shipping_address_errors.Nexus_5-19.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ce57dbcd39965d7ba9f419f9fa6fb58201fa30f5 \ No newline at end of file
diff --git a/components/test/data/payments/render_tests/README b/components/test/data/payments/render_tests/README deleted file mode 100644 index b8cafaa1..0000000 --- a/components/test/data/payments/render_tests/README +++ /dev/null
@@ -1,22 +0,0 @@ -Update the golden images in this directory when you change the corresponding UI -surfaces. The golden images must be generated on Nexus 5 running KitKat (Android -API version 19). If you have this device attached to your workstation, generate -the renders using the following commands: - -$ out/Default/bin/run_chrome_public_test_apk_incremental \ - --render-results-dir=/sdcard/render_tests/ -f PaymentRequest*Render -$ for file in `adb shell ls /sdcard/render_tests/failures/`; do \ - adb pull /sdcard/render_tests/failures/$file \ - components/test/data/payments/render_tests/$file; done - -If you don't have a Nexus 5 running KitKat, then follow these steps instead: - - 1) Upload your change to https://chromium-review.googlesource.com. - 2) Click "Choose try bots" and run the "linux_android_rel_ng" trybot. - 3) After the bot has failed, click "linux_android_rel_ng" to see the test - results. - 4) Click on "results_details" under the failed "chrome_public_test_apk" step. - 5) Click on the name of the failed test in the "suite_name" column. - 6) Click on the file names of failed renders in the "logs" column. - 7) Right click on the "Failure" image to save it in - components/test/data/payments/render_tests. This is the new golden image.
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index d7e0e23..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -70e3ece5467b1921a233ad214016a61c6973cdd0 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index ec8530e3..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ee6ca6c127ccd2f9858c2f39f87724c1801ec2b1 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 0c05250..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -40b7609d35b4dc9c02795a1d704b136dd5d7fe88 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index b23ef873..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.camera_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -83e6de73d223bccba4f0949c3db87a9bed4e3dd4 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index e802e47..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -945c9545a2ed20369ec8049155164bb6fd4a6484 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 83f38df..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -440c541efc0c500fadc4844b3e7f5dd7a05005bc \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 1afa7d9..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dab6b532b6896b619fae768ce59da104b852ddac \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index ac9c0b9..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.location_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6f95d582778f96225ea684140c3991d5c6041cf6 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index a4ec4e8..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9e1195094eeb4efbd49cab1c0463a4cf230807ff \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 9b283b59..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7bf487a7eaa750fb577d6ea2fc78b192c80932c9 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 7ee21d80..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6b8ddfef1ddf42cb65be730a8c58ac33795f7c00 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 58873233..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3f74715848db583d29d7e33fb19292b51d2def8e \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 6ed826de..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e3ff2cd6423f8096acd3a88976fa4d505d2f0fcc \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 0c3898e8..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_indicator_hover_reposition_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d694fe9c8b7f70220a5a70b13e8c9e855d66590e \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index b588989..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3d335b79bf1c62e80c7e6b0c88509c5cd9002d1f \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 3b7af1b..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_granted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cd55e5b5de066775550dabb28c902ffa49a99d10 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 961adcfe..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3ac0c142ad7953c5aeba27d89caa3f85c963d6d1 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index e5d5e82e..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_granted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1d7572d2f3b468e97f1fb729ff41041f569781b1 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 963f9dd..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -86eefc7a60f4cae0f67d2049207a7822bbf24396 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 2c41236..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_incognito_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -80d0f295db39c0a8eeaec4d1f237821c7b1b50a7 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 34373400e..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a95b115858e8c72423a2914131b7a0c19ed992ea \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index f6e6054..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_granted_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -78e1d046c67df92b570d241fceef061eea51808c \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index f71149b..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -04d3552ab9f34e092b8e764f25ffdbe54eb7592e \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 1394d8f..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_reposition_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8e9026d6e16f063baa5f960dfefac8716ef79082 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 491bfae..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -caf34c4d6233ad220d1211988e160943e2cd13e3 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 6edc59e..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.microphone_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -0173ea29a33794a6cf35dc864c92eecd0f56faaf \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index a7fca01..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7d6cf0667adb7def0fdb9b941f902768043a6d2 \ No newline at end of file
diff --git a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 88843b4..0000000 --- a/components/test/data/permission_dialogs/render_tests/VrBrowserDialogTest.notification_permission_prompt_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3b015f703b0d2c3c95640a8277f06bf93bc07e21 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 9ecf994a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a0f783114dd827e4dff21570465dbebf40130cdd \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 64a22cca..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -36003268d52fba3e15a5792c0961a4a9372b299c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index dc6f211..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3c6a64da90afab932e83a680c901383e193ea88f \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index b8b4516b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.back_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -77345592e30356dc3733eee9227654ff33c1020a \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 625cc1f..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -20ef25e0c4454df34f07331a5ef397bf987efd0f \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 90dbf3f..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.close_incognito_tabs_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -80e942fa06f0518c6ca00909cdb88093f87fbb1e \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 6e4400e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -240ce1fadf8a404d327b50a6fb03aa1d2631770a \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 1f7f69a2..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.data_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5cbcf9f27b2d6165097bac0ca2044f62f1944413 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 7cd1455..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7873eee4e78d673edd4fdbca83f62f80d09193ae \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 4ba92f9..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.file_url_emphasis_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7391578759d235fa6ca052e23026f99b573f488c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index ec8e36e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -136f44df7c66102775da397441f0fbe797336d4a \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index ad2972a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d05218e88bf24a6b4479563c0c4b22f26e8f94a5 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index bc5f351a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -048310a22b411d78ed175077d6eda9b41d398e19 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index d678c24..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.forward_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ed7b6698e44c9250b8e18d2ca6324e7ad3d1e609 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index bcfe4c4a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8e4959904bfded3f3363abee6a44cf3a31be7e7d \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index f3ccedb..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.keyboard_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -141128381cd9717f1a1db5c0cb24bc1ebcc51ae4 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 8c9085e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5e8f35695f82f98297cc4351eb43d68f9f92ff38 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 3338514..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.new_incognito_tab_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b93542ff3f1b6eb511eb53841c4196a0529b66ba \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 8cdc4de..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4d93e5edb391c480ff818320652cc9b8c55d7283 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 74acd5b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2f1d2d016e71de88b9c6437e764b4a181f5a855d \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 729df10..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b5ed6c7d200eb6b24beead194314eeeb50f6eab3 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index b1114c6..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2ff663c1551a3369444eb04e42f358fd9643c66c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 568346d..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -06260f4b7b4fe02102c9a687d90d08f25364e3a9 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 7fb7a23a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.overflow_menu_visible_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b4aa286e7056050761ea964c7107e2607af8b50e \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index ad85b463b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f189360f70397d81fd50b3f7bd6ef43316a42014 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 1c1af10..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1745cab5afd4a1c2bdbeded28e229ce17bf480e3 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 6a3ae04c..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -02cd4997198ed6c3a6da558c89a9ddd8862010dc \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 6ee7744..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reload_button_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c45ec31b360af756412cfcd8880606bbb7ee469f \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-25.png.sha1 deleted file mode 100644 index 62d4b77..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -72e765e4e7eed6f892121b77dd04ae0bfd084dbb \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-26.png.sha1 deleted file mode 100644 index 3a226e0..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_keyboard_open.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3e053b1b09d70bae090fa2a976782ce9c4b26323 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-25.png.sha1 deleted file mode 100644 index 7f342c6..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -34ef7f6e39adcdef752d8e3be0fbae49382a5212 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-26.png.sha1 deleted file mode 100644 index a71f981a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.reposition_bar_permission_prompt_open.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -be88cd6d079fd553c4c27e0ab55ab8a9da1c24ec \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-25.png.sha1 deleted file mode 100644 index 0f77e0f..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f3e870f5e8220ebddcada3f85c1618cbbd2db249 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-26.png.sha1 deleted file mode 100644 index 546c3c2..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_keyboard.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -59c9b14ba54519dd17786cb8c5631e2352c28550 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-25.png.sha1 deleted file mode 100644 index 3bcb485..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5f09d8608585c51d382cf355b5950d416840e35d \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-26.png.sha1 deleted file mode 100644 index d4f8149..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.repositioned_overflow_menu.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a0b29c352964de5dc36ea7abf6d28b4027e48b20 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-25.png.sha1 deleted file mode 100644 index 22e7869..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4e094430b181374ce3884fca044da38cf80ffc01 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-26.png.sha1 deleted file mode 100644 index da168cf..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.scroll_resizing.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5974ffd1303cb51c9051a4ea2142b79a50db44df \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 7242d8e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -685031e94180ab087c170ae5f2922533377f7265 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 080afb6..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -544559cc4e4f36e83956502e542ad76a5457734a \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 5039e3a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5e0dd8ee322ba41615930c52becaee4b711e2f68 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 89561b6b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_icon_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -840e6e410270571803149461f48edd17489cb2a6 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-25.png.sha1 deleted file mode 100644 index 79abcc02..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -015aec80efc9175fc5e2c27c2777d6f8d7f8a796 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-26.png.sha1 deleted file mode 100644 index f4aade8..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_popup.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -205dc5d6c04e335601390cc408f99dfe75b8483c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-25.png.sha1 deleted file mode 100644 index db75e8d..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -60ea6cc503152ff293f976031c4337986a33c847 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-26.png.sha1 deleted file mode 100644 index 3441b9c..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_http_url_bar_token.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -620fa12072273cea0a9005ff5eface2cd28a6fbf \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-25.png.sha1 deleted file mode 100644 index 3568a58e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a64fc20e6703aace8dc1cf464e0c555cab1b993e \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-26.png.sha1 deleted file mode 100644 index dcf6073..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_popup.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c54b5b22799055b4c9cca36040ef83a2e9548f01 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-25.png.sha1 deleted file mode 100644 index de7cd10c..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -654341b07d9d0357fe08bae2a70adbc018f1c2aa \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-26.png.sha1 deleted file mode 100644 index fc871dd..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_bad_cert_url_bar_token.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f6afd282616fe6ef74628bf76748ae5c52634636 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-25.png.sha1 deleted file mode 100644 index f031ab73..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4ae8697d4680f2773570882b7b24cd759d06a800 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-26.png.sha1 deleted file mode 100644 index 113bd9f..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_popup.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -682a2b169d9a4f99ed7abfefc178046811f5fb69 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-25.png.sha1 deleted file mode 100644 index 53d2aeb..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8ecf718060f3ca31dc4387704b40d734463a892a \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-26.png.sha1 deleted file mode 100644 index 427f4a4..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.security_token_https_url_bar_token.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d8ebd0621cb8c77f71b7ebcf6b4a5a836b5909de \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 deleted file mode 100644 index 4443a76b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6d14c1d37f6f228b8604f03036ecf910ea865a21 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 deleted file mode 100644 index 05032eae..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -87749b48758d2662ccb9ef99119bbd77201adf90 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 deleted file mode 100644 index 7ff2ec54..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2a071e084edd0338bc25f4f3e4b9b6915bfe67e0 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 deleted file mode 100644 index d6da193..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ca330b715553bf8c141822f0aaad38a14d70fb43 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 deleted file mode 100644 index 3da5005..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c99b3661b6e1be8e9acbbf816046463f42bc18f6 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 deleted file mode 100644 index 439d82a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3c1207efd30cf21c88eb1503cee35f847becd893 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 deleted file mode 100644 index ecd27439..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d364e2312345a5e0305d9587d15e2091175c2dc6 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 deleted file mode 100644 index 901cb46..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5d5700901f4699707e31a5b710d7ef72679bc960 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 deleted file mode 100644 index 47bdcdb..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5b8f281835feb3ca5d8eac5fdaea07aa0ffd9487 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 deleted file mode 100644 index 37bdd6c8..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b40ac84bc77baf6983d4eea460186917a03afa18 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 deleted file mode 100644 index 275727a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c188327803a99e05dbbecd556b9da81f86186d7d \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 deleted file mode 100644 index e61499e..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -48e043a5f9d9aa44ea1678d1e6016ebf164ce8b4 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 5cad5ae..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -38cfb432ebe7098d9c418700d1ec058848798365 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 2c687d5..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cd6677657811dfbe5ed13b238455c8fee660b028 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 6b6edabf..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9c7f0bee443c79f81bbb2e41c41809daa1cabafa \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 2eaade1..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.url_bar_hover_incognito_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f8952c9a33641cb20ff1597eb5f716950fea7a1c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-25.png.sha1 deleted file mode 100644 index 5da5f52..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9450f2e125b5e04ee4463bcbc2dff8b8a102d9e6 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-26.png.sha1 deleted file mode 100644 index db587a6..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_back_enabled.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6e6f14ad097fa9095ac194ac5be19097429ccf79 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-25.png.sha1 deleted file mode 100644 index 277ab0b..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a771e024aec046967ea08ec97f1968b7ff5e5230 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-26.png.sha1 deleted file mode 100644 index 7fb7a23a..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_both_disabled.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b4aa286e7056050761ea964c7107e2607af8b50e \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-25.png.sha1 deleted file mode 100644 index f149bf53..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c69ce2e9225ac8e2bef4c4d97435f57a32712a29 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-26.png.sha1 deleted file mode 100644 index b1f6897..0000000 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNavigationTest.navigation_buttons_forward_enabled.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -497547d4e9aabe2ee4c2c0d0eac3a46a23ce3ebe \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-25.png.sha1 deleted file mode 100644 index 89db85f..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -87ad2701c29781d34ee6b7accca1782dd3471677 \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-26.png.sha1 deleted file mode 100644 index 6ae3521..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_content.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d1b893dfb80d7a816d77ea23902e0fe7cbda2bf1 \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-25.png.sha1 deleted file mode 100644 index 2ffac7c..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5b059a444e3784dbb88f752ebb71e8de67bc4b47 \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-26.png.sha1 deleted file mode 100644 index 54421d80..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_paused_browser_ui.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -efede7a3778abeec24a1f1bb84fde8ee6f323f6f \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-25.png.sha1 deleted file mode 100644 index 78b04d5..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-25.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5002005fafd691aed78c84e564654c74c619cc69 \ No newline at end of file
diff --git a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-26.png.sha1 deleted file mode 100644 index e1eed6cb..0000000 --- a/components/test/data/vr_browser_video/render_tests/VrBrowserWebInputEditingTest.fullscreen_video_playing_not_hovered_browser_content.Pixel_XL-26.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -164972933d239fd6dda084f51d61dd39affe501d \ No newline at end of file
diff --git a/components/undo/bookmark_undo_service.cc b/components/undo/bookmark_undo_service.cc index 66732eb..dfcff48 100644 --- a/components/undo/bookmark_undo_service.cc +++ b/components/undo/bookmark_undo_service.cc
@@ -342,7 +342,8 @@ void BookmarkUndoService::Shutdown() { DCHECK(model_); - scoped_observation_.RemoveObservation(); + DCHECK(scoped_observation_.IsObserving()); + scoped_observation_.Reset(); model_->SetUndoDelegate(nullptr); }
diff --git a/components/url_formatter/DIR_METADATA b/components/url_formatter/DIR_METADATA new file mode 100644 index 0000000..f5b2b44 --- /dev/null +++ b/components/url_formatter/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Security>UrlFormatting" +}
diff --git a/components/url_formatter/OWNERS b/components/url_formatter/OWNERS index a7cab0a..013962e 100644 --- a/components/url_formatter/OWNERS +++ b/components/url_formatter/OWNERS
@@ -7,5 +7,3 @@ per-file elide_url.*=cthomp@chromium.org per-file elide_url.*=estark@chromium.org per-file elide_url.*=felt@chromium.org - -# COMPONENT: UI>Security>UrlFormatting
diff --git a/components/url_formatter/tools/DIR_METADATA b/components/url_formatter/tools/DIR_METADATA new file mode 100644 index 0000000..f5b2b44 --- /dev/null +++ b/components/url_formatter/tools/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Security>UrlFormatting" +}
diff --git a/components/url_formatter/tools/OWNERS b/components/url_formatter/tools/OWNERS index ce7f431..d94897a8 100644 --- a/components/url_formatter/tools/OWNERS +++ b/components/url_formatter/tools/OWNERS
@@ -1,3 +1 @@ file://components/security_interstitials/OWNERS - -# COMPONENT: UI>Security>UrlFormatting
diff --git a/components/url_matcher/DIR_METADATA b/components/url_matcher/DIR_METADATA new file mode 100644 index 0000000..2d14a86 --- /dev/null +++ b/components/url_matcher/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Network" +}
diff --git a/components/url_matcher/OWNERS b/components/url_matcher/OWNERS index d1b4577..d5f125f04 100644 --- a/components/url_matcher/OWNERS +++ b/components/url_matcher/OWNERS
@@ -1,2 +1 @@ battre@chromium.org -# COMPONENT: Internals>Network
diff --git a/components/url_pattern_index/DIR_METADATA b/components/url_pattern_index/DIR_METADATA new file mode 100644 index 0000000..637eb4dc --- /dev/null +++ b/components/url_pattern_index/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Platform>Extensions>API" +}
diff --git a/components/url_pattern_index/OWNERS b/components/url_pattern_index/OWNERS index 0e12db1e..557ed26 100644 --- a/components/url_pattern_index/OWNERS +++ b/components/url_pattern_index/OWNERS
@@ -3,5 +3,4 @@ karandeepb@chromium.org pkalinnikov@chromium.org -# COMPONENT: Platform>Extensions>API # Note that this folder is also heavily used by UI>Browser>AdFilter
diff --git a/components/user_actions_ui/DIR_METADATA b/components/user_actions_ui/DIR_METADATA new file mode 100644 index 0000000..8325efa --- /dev/null +++ b/components/user_actions_ui/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>WebUI" +}
diff --git a/components/user_actions_ui/OWNERS b/components/user_actions_ui/OWNERS index 918baa1..a42ad1e 100644 --- a/components/user_actions_ui/OWNERS +++ b/components/user_actions_ui/OWNERS
@@ -1,3 +1 @@ file://ui/webui/PLATFORM_OWNERS - -# COMPONENT: UI>Browser>WebUI
diff --git a/components/user_manager/DIR_METADATA b/components/user_manager/DIR_METADATA new file mode 100644 index 0000000..3ecb477 --- /dev/null +++ b/components/user_manager/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Enterprise" +}
diff --git a/components/user_manager/OWNERS b/components/user_manager/OWNERS index 9c31b9e..7d71337f 100644 --- a/components/user_manager/OWNERS +++ b/components/user_manager/OWNERS
@@ -3,4 +3,3 @@ antrim@chromium.org rsorokin@chromium.org xiyuan@chromium.org -# COMPONENT: Enterprise
diff --git a/components/user_prefs/DIR_METADATA b/components/user_prefs/DIR_METADATA new file mode 100644 index 0000000..1b859d6 --- /dev/null +++ b/components/user_prefs/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "UI>Browser>Preferences" +} + +team_email: "chromium-dev@chromium.org"
diff --git a/components/user_prefs/OWNERS b/components/user_prefs/OWNERS index ef0ab79..a4dab03 100644 --- a/components/user_prefs/OWNERS +++ b/components/user_prefs/OWNERS
@@ -1,5 +1,2 @@ battre@chromium.org gab@chromium.org - -# COMPONENT: UI>Browser>Preferences -# TEAM: chromium-dev@chromium.org
diff --git a/components/variations/DIR_METADATA b/components/variations/DIR_METADATA new file mode 100644 index 0000000..1c5b27e --- /dev/null +++ b/components/variations/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Internals>Metrics>Variations" +} + +team_email: "chromium-dev@chromium.org"
diff --git a/components/variations/OWNERS b/components/variations/OWNERS index 7a5eb7b..4200d3b 100644 --- a/components/variations/OWNERS +++ b/components/variations/OWNERS
@@ -2,6 +2,3 @@ per-file *.mojom=set noparent per-file *.mojom=file://ipc/SECURITY_OWNERS - -# COMPONENT: Internals>Metrics>Variations -# TEAM: chromium-dev@chromium.org
diff --git a/components/vector_icons/DIR_METADATA b/components/vector_icons/DIR_METADATA new file mode 100644 index 0000000..ba32dd7 --- /dev/null +++ b/components/vector_icons/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Assets>Images" +}
diff --git a/components/vector_icons/OWNERS b/components/vector_icons/OWNERS index 1bf54609..658a9f5 100644 --- a/components/vector_icons/OWNERS +++ b/components/vector_icons/OWNERS
@@ -1,3 +1 @@ estade@chromium.org - -# COMPONENT: UI>Assets>Images
diff --git a/components/version_info/DIR_METADATA b/components/version_info/DIR_METADATA new file mode 100644 index 0000000..14b5edb5 --- /dev/null +++ b/components/version_info/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals" +}
diff --git a/components/version_info/OWNERS b/components/version_info/OWNERS index a4b70b7..d33a4b7d 100644 --- a/components/version_info/OWNERS +++ b/components/version_info/OWNERS
@@ -2,4 +2,3 @@ sky@chromium.org thakis@chromium.org thestig@chromium.org -# COMPONENT: Internals
diff --git a/components/version_ui/DIR_METADATA b/components/version_ui/DIR_METADATA new file mode 100644 index 0000000..8325efa --- /dev/null +++ b/components/version_ui/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>WebUI" +}
diff --git a/components/version_ui/OWNERS b/components/version_ui/OWNERS index 918baa1..a42ad1e 100644 --- a/components/version_ui/OWNERS +++ b/components/version_ui/OWNERS
@@ -1,3 +1 @@ file://ui/webui/PLATFORM_OWNERS - -# COMPONENT: UI>Browser>WebUI
diff --git a/components/version_ui_strings_grdp/DIR_METADATA b/components/version_ui_strings_grdp/DIR_METADATA new file mode 100644 index 0000000..8325efa --- /dev/null +++ b/components/version_ui_strings_grdp/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>WebUI" +}
diff --git a/components/version_ui_strings_grdp/OWNERS b/components/version_ui_strings_grdp/OWNERS index 878ca6e1..21929621 100644 --- a/components/version_ui_strings_grdp/OWNERS +++ b/components/version_ui_strings_grdp/OWNERS
@@ -1,3 +1 @@ file://components/version_ui/OWNERS - -# COMPONENT: UI>Browser>WebUI
diff --git a/components/visitedlink/DIR_METADATA b/components/visitedlink/DIR_METADATA new file mode 100644 index 0000000..9b08ae7f --- /dev/null +++ b/components/visitedlink/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>History" +}
diff --git a/components/visitedlink/OWNERS b/components/visitedlink/OWNERS index d2353bc2..90b3e80 100644 --- a/components/visitedlink/OWNERS +++ b/components/visitedlink/OWNERS
@@ -1,3 +1 @@ sky@chromium.org - -# COMPONENT: UI>Browser>History
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc index dd575bf..8b5ee00b 100644 --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc
@@ -96,6 +96,12 @@ base::FEATURE_DISABLED_BY_DEFAULT}; #endif // OS_WIN +#if defined(USE_X11) +// Uses X11 Present Extensions instead of the Vulkan swapchain for presenting. +const base::Feature kUseX11Present{"UseX11Present", + base::FEATURE_DISABLED_BY_DEFAULT}; +#endif + bool IsOverlayPrioritizationEnabled() { return base::FeatureList::IsEnabled(kEnableOverlayPrioritization); }
diff --git a/components/viz/common/features.h b/components/viz/common/features.h index 1fee7c1..57abfe69 100644 --- a/components/viz/common/features.h +++ b/components/viz/common/features.h
@@ -33,6 +33,9 @@ #if defined(OS_WIN) VIZ_COMMON_EXPORT extern const base::Feature kUseSetPresentDuration; #endif // OS_WIN +#if defined(USE_X11) +VIZ_COMMON_EXPORT extern const base::Feature kUseX11Present; +#endif VIZ_COMMON_EXPORT bool IsForcePreferredIntervalForVideoEnabled(); VIZ_COMMON_EXPORT bool IsVizHitTestingDebugEnabled();
diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn index d93f6f93..504c1f1e 100644 --- a/components/viz/service/BUILD.gn +++ b/components/viz/service/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/chromeos/ui_mode.gni") +import("//build/config/ozone.gni") import("//build/config/ui.gni") import("//components/viz/viz.gni") import("//gpu/vulkan/features.gni") @@ -437,14 +438,22 @@ ] public_deps += [ "//gpu/vulkan" ] - } - if (use_x11 && enable_vulkan) { - sources += [ - "display_embedder/skia_output_device_x11.cc", - "display_embedder/skia_output_device_x11.h", - ] - deps += [ "//ui/gfx/x" ] + if (use_x11 || ozone_platform_x11) { + sources += [ + "display_embedder/output_presenter_x11.cc", + "display_embedder/output_presenter_x11.h", + "display_embedder/skia_output_device_x11.cc", + "display_embedder/skia_output_device_x11.h", + ] + + libs = [ "xshmfence" ] + + deps += [ + "//ui/events/platform/x11", + "//ui/gfx/x", + ] + } } if (skia_use_dawn && is_win) { @@ -625,6 +634,8 @@ "display/gl_renderer_copier_perftest.cc", "display/renderer_perftest.cc", "display/surface_aggregator_perftest.cc", + "display/viz_perf_test.cc", + "display/viz_perf_test.h", ] deps = [
diff --git a/components/viz/service/display/renderer_perftest.cc b/components/viz/service/display/renderer_perftest.cc index 61b88cc..e497ac0 100644 --- a/components/viz/service/display/renderer_perftest.cc +++ b/components/viz/service/display/renderer_perftest.cc
@@ -15,7 +15,6 @@ // --use_virtualized_gl_contexts=1 #include "base/bind.h" -#include "base/command_line.h" #include "base/files/file_util.h" #include "base/json/json_reader.h" #include "base/metrics/histogram.h" @@ -27,7 +26,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/threading/thread_task_runner_handle.h" -#include "base/timer/lap_timer.h" +#include "build/build_config.h" #include "components/viz/client/client_resource_provider.h" #include "components/viz/common/display/renderer_settings.h" #include "components/viz/common/quads/render_pass_io.h" @@ -38,6 +37,7 @@ #include "components/viz/service/display/output_surface_client.h" #include "components/viz/service/display/overlay_processor_stub.h" #include "components/viz/service/display/skia_renderer.h" +#include "components/viz/service/display/viz_perf_test.h" #include "components/viz/service/display_embedder/gl_output_surface_offscreen.h" #include "components/viz/service/display_embedder/in_process_gpu_memory_buffer_manager.h" #include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" @@ -77,21 +77,6 @@ return reporter; } -base::TimeDelta TestTimeLimit() { - static const char kPerfTestTimeMillis[] = "perf-test-time-ms"; - auto* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kPerfTestTimeMillis)) { - const std::string delay_millis_string( - command_line->GetSwitchValueASCII(kPerfTestTimeMillis)); - int delay_millis; - if (base::StringToInt(delay_millis_string, &delay_millis) && - delay_millis > 0) { - return base::TimeDelta::FromMilliseconds(delay_millis); - } - } - return base::TimeDelta::FromSeconds(3); -} - class WaitForSwapDisplayClient : public DisplayClient { public: WaitForSwapDisplayClient() = default; @@ -281,7 +266,7 @@ } // namespace template <typename RendererType> -class RendererPerfTest : public testing::Test { +class RendererPerfTest : public VizPerfTest { public: RendererPerfTest() : manager_(&shared_bitmap_manager_), @@ -289,10 +274,7 @@ std::make_unique<CompositorFrameSinkSupport>(nullptr, &manager_, kArbitraryFrameSinkId, - true /* is_root */)), - timer_(/*warmup_laps=*/100, - /*time_limit=*/TestTimeLimit(), - /*check_interval=*/10) {} + true /* is_root */)) {} // Overloaded for concrete RendererType below. std::unique_ptr<OutputSurface> CreateOutputSurface( @@ -308,6 +290,11 @@ else printf("Using GLRenderer\n"); +#if defined(OS_ANDROID) + renderer_settings_.color_space = gfx::ColorSpace::CreateSRGB(); + renderer_settings_.initial_screen_size = kSurfaceSize; +#endif + auto* gpu_service = TestGpuServiceHolder::GetInstance()->gpu_service(); gpu_memory_buffer_manager_ = @@ -715,7 +702,6 @@ scoped_refptr<ContextProvider> child_context_provider_; std::unique_ptr<ClientResourceProvider> child_resource_provider_; std::vector<TransferableResource> resource_list_; - base::LapTimer timer_; std::unique_ptr<gl::DisableNullDrawGLBindings> enable_pixel_output_; DISALLOW_COPY_AND_ASSIGN(RendererPerfTest);
diff --git a/components/viz/service/display/surface_aggregator_perftest.cc b/components/viz/service/display/surface_aggregator_perftest.cc index f30a0171..35c0402 100644 --- a/components/viz/service/display/surface_aggregator_perftest.cc +++ b/components/viz/service/display/surface_aggregator_perftest.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/timer/lap_timer.h" #include "cc/test/fake_output_surface_client.h" #include "components/viz/common/frame_sinks/begin_frame_args.h" #include "components/viz/common/quads/compositor_frame.h" @@ -11,6 +10,7 @@ #include "components/viz/service/display/aggregated_frame.h" #include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/display/surface_aggregator.h" +#include "components/viz/service/display/viz_perf_test.h" #include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" @@ -53,7 +53,7 @@ size_t expected_quads_; }; -class SurfaceAggregatorPerfTest : public testing::Test { +class SurfaceAggregatorPerfTest : public VizPerfTest { public: SurfaceAggregatorPerfTest() : manager_(&shared_bitmap_manager_) { context_provider_ = TestContextProvider::Create(); @@ -201,7 +201,6 @@ scoped_refptr<TestContextProvider> context_provider_; std::unique_ptr<DisplayResourceProvider> resource_provider_; std::unique_ptr<SurfaceAggregator> aggregator_; - base::LapTimer timer_; }; TEST_F(SurfaceAggregatorPerfTest, ManySurfacesOpaque) {
diff --git a/components/viz/service/display/viz_perf_test.cc b/components/viz/service/display/viz_perf_test.cc new file mode 100644 index 0000000..27c137d --- /dev/null +++ b/components/viz/service/display/viz_perf_test.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 "components/viz/service/display/viz_perf_test.h" + +#include "base/command_line.h" +#include "base/strings/string_number_conversions.h" + +namespace viz { +namespace { + +constexpr char kPerfTestTimeMillis[] = "perf-test-time-ms"; + +base::TimeDelta TestTimeLimit() { + auto* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(kPerfTestTimeMillis)) { + const std::string delay_millis_string( + command_line->GetSwitchValueASCII(kPerfTestTimeMillis)); + int delay_millis; + if (base::StringToInt(delay_millis_string, &delay_millis) && + delay_millis > 0) { + return base::TimeDelta::FromMilliseconds(delay_millis); + } + } + return base::TimeDelta::FromSeconds(3); +} + +} // namespace + +VizPerfTest::VizPerfTest() + : timer_(/*warmup_laps=*/100, + /*time_limit=*/TestTimeLimit(), + /*check_interval=*/10) {} + +} // namespace viz
diff --git a/components/viz/service/display/viz_perf_test.h b/components/viz/service/display/viz_perf_test.h new file mode 100644 index 0000000..5e42536fc --- /dev/null +++ b/components/viz/service/display/viz_perf_test.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 COMPONENTS_VIZ_SERVICE_DISPLAY_VIZ_PERF_TEST_H_ +#define COMPONENTS_VIZ_SERVICE_DISPLAY_VIZ_PERF_TEST_H_ + +#include "base/timer/lap_timer.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace viz { + +// Viz perf test base class that sets up a lap timer with a specified duration. +class VizPerfTest : public testing::Test { + public: + VizPerfTest(); + + protected: + // Duration is set by the flag --perf-test-time-ms, defaults to 3 seconds. + base::LapTimer timer_; +}; + +} // namespace viz + +#endif // COMPONENTS_VIZ_SERVICE_DISPLAY_VIZ_PERF_TEST_H_
diff --git a/components/viz/service/display_embedder/DEPS b/components/viz/service/display_embedder/DEPS index 7351dd5..2a3e7761 100644 --- a/components/viz/service/display_embedder/DEPS +++ b/components/viz/service/display_embedder/DEPS
@@ -37,6 +37,7 @@ "+third_party/libyuv", "+third_party/skia", "+ui/accelerated_widget_mac", + "+ui/events/platform/x11/x11_event_source.h", "+ui/display", "+ui/gl", "+ui/latency",
diff --git a/components/viz/service/display_embedder/image_context_impl.cc b/components/viz/service/display_embedder/image_context_impl.cc index 03def30..8fca0d5d 100644 --- a/components/viz/service/display_embedder/image_context_impl.cc +++ b/components/viz/service/display_embedder/image_context_impl.cc
@@ -6,7 +6,6 @@ #include <utility> -#include "build/build_config.h" #include "components/viz/common/resources/resource_format_utils.h" #include "gpu/command_buffer/common/shared_image_usage.h" #include "gpu/command_buffer/service/mailbox_manager.h" @@ -104,19 +103,12 @@ std::vector<GrBackendSemaphore>* end_semaphores) { // Prepare for accessing shared image. if (mailbox_holder().mailbox.IsSharedImage()) { - constexpr bool allow_legacy_mailbox_fallback = -#if defined(OS_ANDROID) - false; -#else - true; -#endif - bool result = BeginAccessIfNecessaryForSharedImage( - context_state, representation_factory, begin_semaphores, - end_semaphores); - if (!result && !allow_legacy_mailbox_fallback) { + if (!BeginAccessIfNecessaryForSharedImage( + context_state, representation_factory, begin_semaphores, + end_semaphores)) { CreateFallbackImage(context_state); - return; } + return; } // Prepare for accessing legacy mailbox.
diff --git a/components/viz/service/display_embedder/output_presenter_x11.cc b/components/viz/service/display_embedder/output_presenter_x11.cc new file mode 100644 index 0000000..2bf62b49 --- /dev/null +++ b/components/viz/service/display_embedder/output_presenter_x11.cc
@@ -0,0 +1,589 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/viz/service/display_embedder/output_presenter_x11.h" + +extern "C" { +#include <X11/xshmfence.h> +} + +#include <algorithm> +#include <memory> +#include <utility> +#include <vector> + +#include "base/threading/thread_task_runner_handle.h" +#include "base/types/pass_key.h" +#include "build/build_config.h" +#include "components/viz/common/resources/resource_format_utils.h" +#include "components/viz/service/display_embedder/skia_output_surface_dependency.h" +#include "gpu/command_buffer/service/external_vk_image_backing.h" +#include "gpu/command_buffer/service/external_vk_image_skia_representation.h" +#include "gpu/command_buffer/service/shared_context_state.h" +#include "gpu/ipc/common/gpu_surface_lookup.h" +#include "gpu/vulkan/vulkan_function_pointers.h" +#include "gpu/vulkan/vulkan_image.h" +#include "gpu/vulkan/vulkan_util.h" +#include "third_party/skia/include/gpu/GrBackendSemaphore.h" +#include "ui/display/types/display_snapshot.h" +#include "ui/gfx/buffer_format_util.h" +#include "ui/gfx/geometry/rect_conversions.h" +#include "ui/gfx/overlay_transform.h" +#include "ui/gl/gl_fence.h" + +#define VK_STRUCTURE_TYPE_WSI_IMAGE_CREATE_INFO_MESA (VkStructureType)1000001002 +struct wsi_image_create_info { + VkStructureType sType; + const void* pNext; + bool scanout; +}; + +namespace viz { + +namespace { + +class Fence { + public: + static std::unique_ptr<Fence> Create(x11::Connection* connection, + x11::Pixmap pixmap) { + base::ScopedFD fence_fd(xshmfence_alloc_shm()); + if (!fence_fd.is_valid()) { + DLOG(ERROR) << "xshmfence_alloc_shm() failed!"; + return {}; + } + + auto* shm_fence = xshmfence_map_shm(fence_fd.get()); + if (!shm_fence) { + DLOG(ERROR) << "xshmfence_map_shm() failed!"; + return {}; + } + + auto* dri3 = &connection->dri3(); + auto fence = connection->GenerateId<x11::Sync::Fence>(); + dri3->FenceFromFD( + {pixmap, static_cast<uint32_t>(fence), 1, std::move(fence_fd)}); + return std::make_unique<Fence>(connection, base::PassKey<Fence>(), + shm_fence, fence); + } + + Fence(x11::Connection* connection, + base::PassKey<Fence>, + xshmfence* shm_fence, + x11::Sync::Fence fence) + : connection_(connection), shm_fence_(shm_fence), fence_(fence) {} + + ~Fence() { + xshmfence_unmap_shm(shm_fence_); + connection_->sync().DestroyFence({fence_}); + } + + void Reset() { xshmfence_reset(shm_fence_); } + void Trigger() { xshmfence_trigger(shm_fence_); } + void Wait() { xshmfence_await(shm_fence_); } + + x11::Sync::Fence fence() const { return fence_; } + + private: + x11::Connection* const connection_; + xshmfence* const shm_fence_; + const x11::Sync::Fence fence_; +}; + +class PresenterImageX11 : public OutputPresenter::Image { + public: + PresenterImageX11() = default; + ~PresenterImageX11() override { + if (vk_fence_ != VK_NULL_HANDLE) + vkDestroyFence(device_queue_->GetVulkanDevice(), vk_fence_, nullptr); + if (pixmap_ != x11::Pixmap::None) + x11::Connection::Get()->FreePixmap({pixmap_}); + } + + bool Initialize(x11::Connection* connection, + x11::Window window, + gpu::SharedImageFactory* factory, + gpu::SharedImageRepresentationFactory* representation_factory, + SkiaOutputSurfaceDependency* deps, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + ResourceFormat format, + int depth, + uint32_t shared_image_usage, + const std::vector<std::vector<uint64_t>>& modifier_vectors) { + device_queue_ = deps->GetVulkanContextProvider()->GetDeviceQueue(); + + // OutputPresenterX11 only supports MESA vulkan driver. + switch (device_queue_->vk_physical_device_driver_properties().driverID) { + case VK_DRIVER_ID_MESA_RADV: + case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA: + break; + default: + return false; + } + + const auto vk_format = ToVkFormat(format); + std::unique_ptr<gpu::VulkanImage> vulkan_image; + if (modifier_vectors.empty()) { + // If DRM modifier is not supported, lagecy wsi_image_create_info will be + // used for scanout. + wsi_image_create_info create_info = { + .sType = VK_STRUCTURE_TYPE_WSI_IMAGE_CREATE_INFO_MESA, + .scanout = true, + }; + vulkan_image = gpu::VulkanImage::CreateWithExternalMemory( + device_queue_, size, vk_format, shared_image_usage, /*flags=*/0, + VK_IMAGE_TILING_OPTIMAL, &create_info); + } else { + for (auto& modifiers : modifier_vectors) { + vulkan_image = gpu::VulkanImage::CreateWithExternalMemoryAndModifiers( + device_queue_, size, vk_format, modifiers, shared_image_usage, + /*flags=*/0); + if (vulkan_image) + break; + } + } + + if (!vulkan_image) + return false; + + // Destroy the |vulkan_image| when this function returns. The |vulkan_image| + // will be imported as a SharedImage, and the original |vulkan_image| will + // not be used after returning of this function. + // TODO(penghuang): maybe creating the shared image directly. + base::ScopedClosureRunner vulkan_image_destructor(base::BindOnce( + &gpu::VulkanImage::Destroy, base::Unretained(vulkan_image.get()))); + + const auto& layouts = vulkan_image->layouts(); + + gfx::GpuMemoryBufferHandle gmb_handle; + gmb_handle.type = gfx::GpuMemoryBufferType::NATIVE_PIXMAP; + gmb_handle.native_pixmap_handle.modifier = vulkan_image->modifier(); + for (size_t i = 0; i < vulkan_image->plane_count(); ++i) { + gmb_handle.native_pixmap_handle.planes.emplace_back( + layouts[i].rowPitch, layouts[i].offset, layouts[i].size, + vulkan_image->GetMemoryFd()); + } + + auto mailbox = gpu::Mailbox::GenerateForSharedImage(); + if (!factory->CreateSharedImage(mailbox, 0, std::move(gmb_handle), + BufferFormat(format), + deps->GetSurfaceHandle(), size, color_space, + kTopLeft_GrSurfaceOrigin, + kPremul_SkAlphaType, shared_image_usage)) { + DLOG(ERROR) << "CreateSharedImage failed."; + return false; + } + + if (!Image::Initialize(factory, representation_factory, mailbox, deps)) + return false; + + auto* dri3 = &connection->dri3(); + + DCHECK(format == RGBA_8888 || format == BGRA_8888); + pixmap_ = connection->GenerateId<x11::Pixmap>(); + std::vector<base::ScopedFD> buffers(vulkan_image->plane_count()); + for (size_t i = 0; i < vulkan_image->plane_count(); ++i) + buffers[i] = vulkan_image->GetMemoryFd(); + dri3->PixmapFromBuffers({.pixmap = pixmap_, + .window = window, + .width = size.width(), + .height = size.height(), + .stride0 = layouts[0].rowPitch, + .offset0 = layouts[0].offset, + .stride1 = layouts[1].rowPitch, + .offset1 = layouts[1].offset, + .stride2 = layouts[2].rowPitch, + .offset2 = layouts[2].offset, + .stride3 = layouts[3].rowPitch, + .offset3 = layouts[3].offset, + .depth = depth, + .bpp = 32, + .modifier = vulkan_image->modifier(), + .buffers = std::move(buffers)}); + + VkFenceCreateInfo create_info = { + .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + }; + if (vkCreateFence(device_queue_->GetVulkanDevice(), &create_info, nullptr, + &vk_fence_) != VK_SUCCESS) + return false; + + wait_fence_ = Fence::Create(connection, pixmap_); + if (!wait_fence_) + return false; + + idle_fence_ = Fence::Create(connection, pixmap_); + if (!idle_fence_) + return false; + + return true; + } + + void BeginPresent() final { + if (++present_count_ != 1) { + DCHECK(scoped_read_access_); + return; + } + + DCHECK(!sk_surface()); + DCHECK(!scoped_read_access_); + + std::vector<GrBackendSemaphore> begin_read_semaphores; + scoped_read_access_ = skia_representation()->BeginScopedReadAccess( + &begin_read_semaphores, &end_read_semaphores_); + DCHECK(scoped_read_access_); + vkResetFences(device_queue_->GetVulkanDevice(), 1, &vk_fence_); + std::vector<VkSemaphore> vk_semaphores; + for (auto semaphore : begin_read_semaphores) + vk_semaphores.push_back(semaphore.vkSemaphore()); + if (!gpu::SubmitWaitVkSemaphores(device_queue_->GetVulkanQueue(), + vk_semaphores, vk_fence_)) { + NOTREACHED(); + } + // TODO(penghuang): wait |vk_fence_| and then trigger the |wait_fence_|. + } + + void EndPresent() final { + DCHECK(present_count_); + if (--present_count_) + return; + std::vector<VkSemaphore> vk_semaphores; + for (auto semaphore : end_read_semaphores_) + vk_semaphores.push_back(semaphore.vkSemaphore()); + end_read_semaphores_.clear(); + gpu::SubmitSignalVkSemaphores(device_queue_->GetVulkanQueue(), + vk_semaphores); + scoped_read_access_.reset(); + } + + int GetPresentCount() const final { return present_count_; } + + void OnContextLost() final {} + + x11::Pixmap pixmap() const { return pixmap_; } + Fence* wait_fence() const { return wait_fence_.get(); } + Fence* idle_fence() const { return idle_fence_.get(); } + bool busy() const { return busy_; } + void set_busy(bool busy) { busy_ = busy; } + + private: + std::unique_ptr<gpu::SharedImageRepresentationSkia::ScopedReadAccess> + scoped_read_access_; + int present_count_ = 0; + std::vector<GrBackendSemaphore> end_read_semaphores_; + x11::Pixmap pixmap_{}; + gpu::VulkanDeviceQueue* device_queue_ = nullptr; + VkFence vk_fence_ = VK_NULL_HANDLE; + std::unique_ptr<Fence> wait_fence_; + std::unique_ptr<Fence> idle_fence_; + bool busy_ = false; +}; + +} // namespace + +// static +const uint32_t OutputPresenterX11::kDefaultSharedImageUsage = + gpu::SHARED_IMAGE_USAGE_SCANOUT | gpu::SHARED_IMAGE_USAGE_DISPLAY | + gpu::SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT; + +// static +std::unique_ptr<OutputPresenterX11> OutputPresenterX11::Create( + SkiaOutputSurfaceDependency* deps, + gpu::SharedImageFactory* factory, + gpu::SharedImageRepresentationFactory* representation_factory) { + auto presenter = std::make_unique<OutputPresenterX11>(deps, factory, + representation_factory); + if (!presenter->Initialize()) + presenter.reset(); + return presenter; +} + +OutputPresenterX11::OutputPresenterX11( + SkiaOutputSurfaceDependency* deps, + gpu::SharedImageFactory* factory, + gpu::SharedImageRepresentationFactory* representation_factory, + uint32_t shared_image_usage) + : dependency_(deps), + shared_image_factory_(factory), + shared_image_representation_factory_(representation_factory), + shared_image_usage_(shared_image_usage), + task_runner_(base::ThreadTaskRunnerHandle::Get()) {} + +OutputPresenterX11::~OutputPresenterX11() { + if (!event_id_) + return; + + auto* present = &connection_->present(); + present->SelectInput({static_cast<x11::Present::Event>(event_id_), window_, + x11::Present::EventMask::NoEvent}); + + auto* event_source = ui::X11EventSource::GetInstance(); + event_source->RemoveXEventDispatcher(this); +} + +bool OutputPresenterX11::Initialize() { + if (!dependency_->IsUsingVulkan()) + return false; + + auto* device_queue = dependency_->GetSharedContextState() + ->vk_context_provider() + ->GetDeviceQueue(); + // OutputPresenterX11 only supports MESA vulkan driver. + switch (device_queue->vk_physical_device_driver_properties().driverID) { + case VK_DRIVER_ID_MESA_RADV: + case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA: + break; + default: + return false; + } + + connection_ = x11::Connection::Get(); + auto* present = &connection_->present(); + if (!present->present()) + return false; + + auto* dri3 = &connection_->dri3(); + if (!dri3->present()) + return false; + + auto* sync = &connection_->sync(); + if (!sync->present()) + return false; + + window_ = static_cast<x11::Window>(dependency_->GetSurfaceHandle()); + + auto geometry = connection_->GetGeometry({window_}).Sync(); + depth_ = geometry->depth; + + const bool support_modifier = + gfx::HasExtension(device_queue->enabled_extensions(), + VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME); + if (auto modifiers = dri3->GetSupportedModifiers( + {static_cast<uint32_t>(window_), depth_, 32}) + .Sync()) { + if (!modifiers->window_modifiers.empty()) + modifier_vectors_.push_back(std::move(modifiers->window_modifiers)); + if (!modifiers->screen_modifiers.empty()) + modifier_vectors_.push_back(std::move(modifiers->screen_modifiers)); + } + + // If Xserver require pixmap with modifier, but Vulkan doesn't support + // modifier, we cannot use X11 present. + if (!modifier_vectors_.empty() && !support_modifier) + return false; + + // Without modifier, Xserver can only handle BGRA format. + supports_rgba_ = !modifier_vectors_.empty(); + + event_id_ = connection_->GenerateId<uint32_t>(); + constexpr auto kEventMasks = x11::Present::EventMask::ConfigureNotify | + x11::Present::EventMask::CompleteNotify | + x11::Present::EventMask::IdleNotify; + present->SelectInput( + {static_cast<x11::Present::Event>(event_id_), window_, kEventMasks}); + + auto* event_source = ui::X11EventSource::GetInstance(); + event_source->AddXEventDispatcher(this); + + return true; +} + +void OutputPresenterX11::InitializeCapabilities( + OutputSurface::Capabilities* capabilities) { + capabilities->supports_post_sub_buffer = true; + capabilities->supports_commit_overlay_planes = false; + // Set supports_surfaceless to enable overlays. + capabilities->supports_surfaceless = true; + // We expect origin of buffers is at top left. + capabilities->output_surface_origin = gfx::SurfaceOrigin::kTopLeft; + // TODO(https://crbug.com/1108406): only add supported formats base on + // platform, driver, etc. + capabilities->sk_color_types[static_cast<int>(gfx::BufferFormat::RGBA_8888)] = + supports_rgba_ ? kRGBA_8888_SkColorType : kBGRA_8888_SkColorType; + capabilities->sk_color_types[static_cast<int>(gfx::BufferFormat::BGRA_8888)] = + kBGRA_8888_SkColorType; +} + +bool OutputPresenterX11::Reshape(const gfx::Size& size, + float device_scale_factor, + const gfx::ColorSpace& color_space, + gfx::BufferFormat format, + gfx::OverlayTransform transform) { + DCHECK(format == gfx::BufferFormat::RGBA_8888 || + format == gfx::BufferFormat::BGRA_8888); + switch (format) { + case gfx::BufferFormat::RGBA_8888: + image_format_ = supports_rgba_ ? RGBA_8888 : BGRA_8888; + break; + case gfx::BufferFormat::BGRA_8888: + image_format_ = BGRA_8888; + break; + default: + NOTREACHED(); + } + return true; +} + +std::vector<std::unique_ptr<OutputPresenter::Image>> +OutputPresenterX11::AllocateImages(gfx::ColorSpace color_space, + gfx::Size image_size, + size_t num_images) { + std::vector<std::unique_ptr<Image>> images; + for (size_t i = 0; i < num_images; ++i) { + auto image = std::make_unique<PresenterImageX11>(); + if (!image->Initialize(connection_, window_, shared_image_factory_, + shared_image_representation_factory_, dependency_, + image_size, color_space, image_format_, depth_, + shared_image_usage_, modifier_vectors_)) { + DLOG(ERROR) << "Failed to initialize image."; + return {}; + } + images.push_back(std::move(image)); + } + + allocated_image_count_ = images.size(); + return images; +} + +std::unique_ptr<OutputPresenter::Image> +OutputPresenterX11::AllocateBackgroundImage(gfx::ColorSpace color_space, + gfx::Size image_size) { + auto image = std::make_unique<PresenterImageX11>(); + if (!image->Initialize(connection_, window_, shared_image_factory_, + shared_image_representation_factory_, dependency_, + image_size, color_space, image_format_, depth_, + shared_image_usage_, modifier_vectors_)) { + DLOG(ERROR) << "Failed to initialize image."; + return nullptr; + } + return image; +} + +void OutputPresenterX11::SwapBuffers( + SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) { + NOTIMPLEMENTED(); +} + +void OutputPresenterX11::PostSubBuffer( + const gfx::Rect& rect, + SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) { + auto* image = static_cast<PresenterImageX11*>(present_images_.back()); + DCHECK(!image->busy()); + image->set_busy(true); + + last_target_msc_ = std::max(last_present_msc_, last_target_msc_) + 1; + // Trigger the |wait_fence|, so the Xserver will not be blocked. + // TODO(penghuang): trigger the fence when the image is ready to present, and + // wait for the |idle_fence| before reusing the image. + x11::Connection::Get()->present().Pixmap({ + .window = window_, + .pixmap = image->pixmap(), + .target_msc = last_target_msc_, + }); + + swap_completion_callbacks_.push_back(std::move(completion_callback)); + presentation_callbacks_.push_back(std::move(presentation_callback)); +} + +void OutputPresenterX11::SchedulePrimaryPlane( + const OverlayProcessorInterface::OutputSurfaceOverlayPlane& plane, + Image* image, + bool is_submitted) { + present_images_.push_back(image); +} + +void OutputPresenterX11::ScheduleBackground(Image* image) { + NOTIMPLEMENTED(); +} + +bool OutputPresenterX11::DispatchXEvent(x11::Event* event) { + if (event->window() != window_) + return false; + if (auto* e = event->As<x11::Present::ConfigureNotifyEvent>()) { + return OnConfigureNotifyEvent(e); + } else if (auto* e = event->As<x11::Present::CompleteNotifyEvent>()) { + return OnCompleteNotifyEvent(e); + } else if (auto* e = event->As<x11::Present::IdleNotifyEvent>()) { + return OnIdleNotifyEvent(e); + } else if (auto* e = event->As<x11::Present::RedirectNotifyEvent>()) { + return OnRedirectNotifyEvent(e); + } + return false; +} + +void OutputPresenterX11::CommitOverlayPlanes( + SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) { + NOTIMPLEMENTED(); +} + +void OutputPresenterX11::ScheduleOverlays( + SkiaOutputSurface::OverlayList overlays, + std::vector<ScopedOverlayAccess*> accesses) { + NOTIMPLEMENTED(); +} + +bool OutputPresenterX11::OnConfigureNotifyEvent( + const x11::Present::ConfigureNotifyEvent* event) { + return true; +} + +bool OutputPresenterX11::OnCompleteNotifyEvent( + const x11::Present::CompleteNotifyEvent* event) { + DCHECK_LE(last_present_msc_, event->msc); + last_present_msc_ = event->msc; + // Calling |swap_completion_callbacks_| will kick off a new frame, in most + // cases, there should be one or more images are idle. However in some corner + // cases, all images could be busy. + // TODO(penghuang): defer calling |swap_completion_callbacks_|, if all images + // are busy. + std::move(swap_completion_callbacks_.front()) + .Run(gfx::SwapCompletionResult(gfx::SwapResult::SWAP_ACK)); + swap_completion_callbacks_.pop_front(); + + auto timestamp = + base::TimeTicks() + base::TimeDelta::FromMicroseconds(event->ust); + // Assume the refresh rate is 60 Hz for now. + // TODO(penghuang): query refresh rate from Xserver. + constexpr auto kInterval = base::TimeDelta::FromMicroseconds( + base::Time::kMicrosecondsPerSecond / 60); + uint32_t flags = gfx::PresentationFeedback::kVSync; + if (event->mode == x11::Present::CompleteMode::Flip) + flags |= gfx::PresentationFeedback::kZeroCopy; + std::move(presentation_callbacks_.front()) + .Run(gfx::PresentationFeedback(timestamp, kInterval, flags)); + presentation_callbacks_.pop_front(); + return true; +} + +bool OutputPresenterX11::OnIdleNotifyEvent( + const x11::Present::IdleNotifyEvent* event) { + for (auto* image : present_images_) { + auto* image_x11 = static_cast<PresenterImageX11*>(image); + if (image_x11->pixmap() == event->pixmap) { + DCHECK(image_x11->busy()); + image_x11->set_busy(false); + break; + } + } + + // Remove idle images at the beginning of the |present_images_|. + while (!present_images_.empty()) { + auto* image_x11 = static_cast<PresenterImageX11*>(present_images_.front()); + if (image_x11->busy()) + break; + present_images_.pop_front(); + } + + return true; +} + +bool OutputPresenterX11::OnRedirectNotifyEvent( + const x11::Present::RedirectNotifyEvent* event) { + return true; +} + +} // namespace viz
diff --git a/components/viz/service/display_embedder/output_presenter_x11.h b/components/viz/service/display_embedder/output_presenter_x11.h new file mode 100644 index 0000000..0266337 --- /dev/null +++ b/components/viz/service/display_embedder/output_presenter_x11.h
@@ -0,0 +1,115 @@ +// 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 COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_OUTPUT_PRESENTER_X11_H_ +#define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_OUTPUT_PRESENTER_X11_H_ + +#include <memory> +#include <vector> + +#include "base/containers/circular_deque.h" +#include "components/viz/service/display_embedder/output_presenter.h" +#include "components/viz/service/viz_service_export.h" +#include "gpu/command_buffer/common/shared_image_usage.h" +#include "gpu/command_buffer/service/shared_image_factory.h" +#include "ui/events/platform/x11/x11_event_source.h" +#include "ui/gfx/x/connection.h" +#include "ui/gfx/x/dri3.h" +#include "ui/gfx/x/present.h" + +namespace viz { + +class VIZ_SERVICE_EXPORT OutputPresenterX11 : public OutputPresenter, + public ui::XEventDispatcher { + public: + static const uint32_t kDefaultSharedImageUsage; + + static std::unique_ptr<OutputPresenterX11> Create( + SkiaOutputSurfaceDependency* deps, + gpu::SharedImageFactory* factory, + gpu::SharedImageRepresentationFactory* representation_factory); + + OutputPresenterX11( + SkiaOutputSurfaceDependency* deps, + gpu::SharedImageFactory* factory, + gpu::SharedImageRepresentationFactory* representation_factory, + uint32_t shared_image_usage = kDefaultSharedImageUsage); + ~OutputPresenterX11() override; + + // OutputPresenter implementation: + void InitializeCapabilities(OutputSurface::Capabilities* capabilities) final; + bool Reshape(const gfx::Size& size, + float device_scale_factor, + const gfx::ColorSpace& color_space, + gfx::BufferFormat format, + gfx::OverlayTransform transform) final; + std::vector<std::unique_ptr<Image>> AllocateImages( + gfx::ColorSpace color_space, + gfx::Size image_size, + size_t num_images) final; + std::unique_ptr<Image> AllocateBackgroundImage(gfx::ColorSpace color_space, + gfx::Size image_size) final; + void SwapBuffers(SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) final; + void PostSubBuffer(const gfx::Rect& rect, + SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) final; + void CommitOverlayPlanes(SwapCompletionCallback completion_callback, + BufferPresentedCallback presentation_callback) final; + void SchedulePrimaryPlane( + const OverlayProcessorInterface::OutputSurfaceOverlayPlane& plane, + Image* image, + bool is_submitted) final; + void ScheduleOverlays(SkiaOutputSurface::OverlayList overlays, + std::vector<ScopedOverlayAccess*> accesses) final; + void ScheduleBackground(Image* image) final; + + // ui::XEventDispatcher implementations: + bool DispatchXEvent(x11::Event* event) final; + + private: + bool Initialize(); + + bool OnConfigureNotifyEvent(const x11::Present::ConfigureNotifyEvent* event); + bool OnCompleteNotifyEvent(const x11::Present::CompleteNotifyEvent* event); + bool OnIdleNotifyEvent(const x11::Present::IdleNotifyEvent* event); + bool OnRedirectNotifyEvent(const x11::Present::RedirectNotifyEvent* event); + + SkiaOutputSurfaceDependency* dependency_; + + // Shared Image factories + gpu::SharedImageFactory* const shared_image_factory_; + gpu::SharedImageRepresentationFactory* const + shared_image_representation_factory_; + const uint32_t shared_image_usage_; + + // For executing task on GPU main thread. + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + + x11::Connection* connection_ = nullptr; + x11::Window window_ = x11::Window::None; + int depth_ = 0; + uint32_t event_id_ = 0; + + ResourceFormat image_format_ = BGRA_8888; + + size_t allocated_image_count_ = 0; + + std::vector<std::vector<uint64_t>> modifier_vectors_; + bool supports_rgba_ = false; + + // Image in present queue. + base::circular_deque<Image*> present_images_; + + uint64_t last_target_msc_ = 0; + uint64_t last_present_msc_ = 0; + + // Callbacks wait for X11 CompleteNotifyEvent + base::circular_deque<SwapCompletionCallback> swap_completion_callbacks_; + base::circular_deque<BufferPresentedCallback> presentation_callbacks_; +}; + +} // namespace viz + +#endif // COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_OUTPUT_PRESENTER_X11_H_
diff --git a/components/viz/service/display_embedder/skia_output_device.cc b/components/viz/service/display_embedder/skia_output_device.cc index dbd03f7..39c3bfc 100644 --- a/components/viz/service/display_embedder/skia_output_device.cc +++ b/components/viz/service/display_embedder/skia_output_device.cc
@@ -270,6 +270,27 @@ bool SkiaOutputDevice::Draw(SkSurface* sk_surface, sk_sp<const SkDeferredDisplayList> ddl) { +#if DCHECK_IS_ON() + const auto& characterization = ddl->characterization(); + if (!sk_surface->isCompatible(characterization)) { + SkSurfaceCharacterization surface_characterization; + DCHECK(sk_surface->characterize(&surface_characterization)); +#define CHECK_PROPERTY(name) \ + DCHECK_EQ(characterization.name(), surface_characterization.name()); + CHECK_PROPERTY(cacheMaxResourceBytes); + CHECK_PROPERTY(origin); + CHECK_PROPERTY(width); + CHECK_PROPERTY(height); + CHECK_PROPERTY(colorType); + CHECK_PROPERTY(sampleCount); + CHECK_PROPERTY(isTextureable); + CHECK_PROPERTY(isMipMapped); + CHECK_PROPERTY(usesGLFBO0); + CHECK_PROPERTY(vkRTSupportsInputAttachment); + CHECK_PROPERTY(vulkanSecondaryCBCompatible); + CHECK_PROPERTY(isProtected); + } +#endif return sk_surface->draw(ddl); }
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index 4308bc09..e66bc674 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -11,6 +11,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/trace_event.h" +#include "components/viz/common/features.h" #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_util.h" #include "components/viz/common/gpu/vulkan_context_provider.h" @@ -78,6 +79,10 @@ #include "components/viz/service/display_embedder/output_presenter_fuchsia.h" #endif +#if defined(USE_X11) +#include "components/viz/service/display_embedder/output_presenter_x11.h" +#endif + namespace viz { namespace { @@ -1184,8 +1189,8 @@ return true; } -bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() { #if BUILDFLAG(ENABLE_VULKAN) +bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() { if (dependency_->IsOffscreen()) { output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kBottomLeft, @@ -1195,6 +1200,56 @@ return true; } +#if defined(USE_OZONE) + bool needs_background_image = + features::IsUsingOzonePlatform() && ui::OzonePlatform::GetInstance() + ->GetPlatformProperties() + .needs_background_image; +#else // defined(USE_OZONE) + bool needs_background_image = false; +#endif // !defined(USE_OZONE) + +#if !defined(OS_WIN) +#if defined(OS_FUCHSIA) + auto output_presenter = OutputPresenterFuchsia::Create( + window_surface_.get(), dependency_, shared_image_factory_.get(), + shared_image_representation_factory_.get()); +#elif defined(USE_X11) + const bool use_x11_present = + base::FeatureList::IsEnabled(features::kUseX11Present) && + !features::IsUsingOzonePlatform(); + auto output_presenter = use_x11_present + ? OutputPresenterX11::Create( + dependency_, shared_image_factory_.get(), + shared_image_representation_factory_.get()) + : nullptr; +#else + auto output_presenter = + OutputPresenterGL::Create(dependency_, shared_image_factory_.get(), + shared_image_representation_factory_.get()); + if (output_presenter) { + // TODO(https://crbug.com/1012401): don't depend on GL. + gl_surface_ = output_presenter->gl_surface(); + } +#endif + if (output_presenter) { + output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( + std::move(output_presenter), dependency_, + shared_image_representation_factory_.get(), + shared_gpu_deps_->memory_tracker(), GetDidSwapBuffersCompleteCallback(), + needs_background_image); + return true; + } +#endif // !defined(OS_WIN) + (void)needs_background_image; + + if (vulkan_context_provider_->GetGrSecondaryCBDrawContext()) { + output_device_ = std::make_unique<SkiaOutputDeviceVulkanSecondaryCB>( + vulkan_context_provider_, shared_gpu_deps_->memory_tracker(), + GetDidSwapBuffersCompleteCallback()); + return true; + } + #if defined(USE_X11) if (!features::IsUsingOzonePlatform()) { if (!gpu_preferences_.disable_vulkan_surface) { @@ -1214,45 +1269,6 @@ } #endif // defined(USE_X11) -#if defined(USE_OZONE) - bool needs_background_image = ui::OzonePlatform::GetInstance() - ->GetPlatformProperties() - .needs_background_image; -#else // defined(USE_OZONE) - bool needs_background_image = false; -#endif // !defined(USE_OZONE) - -#if !defined(OS_WIN) -#if defined(OS_FUCHSIA) - auto output_presenter = OutputPresenterFuchsia::Create( - window_surface_.get(), dependency_, shared_image_factory_.get(), - shared_image_representation_factory_.get()); -#else // defined(OS_FUCHSIA) - auto output_presenter = - OutputPresenterGL::Create(dependency_, shared_image_factory_.get(), - shared_image_representation_factory_.get()); - if (output_presenter) { - // TODO(https://crbug.com/1012401): don't depend on GL. - gl_surface_ = output_presenter->gl_surface(); - } -#endif // !defined(OS_FUCHSIA) - if (output_presenter) { - output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( - std::move(output_presenter), dependency_, - shared_image_representation_factory_.get(), - shared_gpu_deps_->memory_tracker(), GetDidSwapBuffersCompleteCallback(), - needs_background_image); - return true; - } -#endif // !defined(OS_WIN) - (void)needs_background_image; - - if (vulkan_context_provider_->GetGrSecondaryCBDrawContext()) { - output_device_ = std::make_unique<SkiaOutputDeviceVulkanSecondaryCB>( - vulkan_context_provider_, shared_gpu_deps_->memory_tracker(), - GetDidSwapBuffersCompleteCallback()); - return true; - } auto output_device = SkiaOutputDeviceVulkan::Create( vulkan_context_provider_, dependency_->GetSurfaceHandle(), shared_gpu_deps_->memory_tracker(), GetDidSwapBuffersCompleteCallback()); @@ -1268,10 +1284,12 @@ #endif // defined(OS_WIN) output_device_ = std::move(output_device); return true; -#else // BUILDFLAG(ENABLE_VULKAN) - return false; -#endif // !BUILDFLAG(ENABLE_VULKAN) } +#else // BUILDFLAG(ENABLE_VULKAN) +bool SkiaOutputSurfaceImplOnGpu::InitializeForVulkan() { + return false; +} +#endif // !BUILDFLAG(ENABLE_VULKAN) bool SkiaOutputSurfaceImplOnGpu::InitializeForDawn() { #if BUILDFLAG(SKIA_USE_DAWN)
diff --git a/components/webxr/android/java/src/org/chromium/components/webxr/ArDelegate.java b/components/webxr/android/java/src/org/chromium/components/webxr/ArDelegate.java index c22542a..dbe6021a7 100644 --- a/components/webxr/android/java/src/org/chromium/components/webxr/ArDelegate.java +++ b/components/webxr/android/java/src/org/chromium/components/webxr/ArDelegate.java
@@ -10,11 +10,6 @@ */ public interface ArDelegate { /** - * Needs to be called once native libraries are available. - **/ - public void init(); - - /** * Used to let AR immersive mode intercept the Back button to exit immersive mode. */ public boolean onBackPressed();
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm index eae6d8c3..b5cbdfa 100644 --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -9,7 +9,6 @@ #include "base/debug/crash_logging.h" #import "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" #include "base/numerics/ranges.h" #include "base/stl_util.h" #include "base/strings/sys_string_conversions.h" @@ -1215,38 +1214,6 @@ } } -- (void)beginGestureWithEvent:(NSEvent*)event { - // This method must be handled when linking with the 10.10 SDK or earlier, or - // when the app is running on 10.10 or earlier. In other circumstances, the - // event will be handled by |magnifyWithEvent:|, so this method should do - // nothing. - bool shouldHandle = true; -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - shouldHandle = base::mac::IsAtMostOS10_10(); -#endif - - if (shouldHandle) { - [self handleBeginGestureWithEvent:event isSyntheticallyInjected:NO]; - } -} - -- (void)endGestureWithEvent:(NSEvent*)event { - // This method must be handled when linking with the 10.10 SDK or earlier, or - // when the app is running on 10.10 or earlier. In other circumstances, the - // event will be handled by |magnifyWithEvent:|, so this method should do - // nothing. - bool shouldHandle = true; -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - shouldHandle = base::mac::IsAtMostOS10_10(); -#endif - - if (shouldHandle) { - [self handleEndGestureWithEvent:event]; - } -} - - (void)touchesMovedWithEvent:(NSEvent*)event { [_responderDelegate touchesMovedWithEvent:event]; } @@ -1304,22 +1271,14 @@ // cancels the gesture, all remaining touches are forwarded to the content // scroll logic. The user cannot trigger the navigation logic again. - (void)scrollWheel:(NSEvent*)event { -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - // When linking against the 10.11 (or later) SDK and running on 10.11 or - // later, check the phase of the event and specially handle the "begin" and - // "end" phases. - if (base::mac::IsAtLeastOS10_11()) { - if (event.phase == NSEventPhaseBegan) { - [self handleBeginGestureWithEvent:event isSyntheticallyInjected:NO]; - } - - if (event.phase == NSEventPhaseEnded || - event.phase == NSEventPhaseCancelled) { - [self handleEndGestureWithEvent:event]; - } + if (event.phase == NSEventPhaseBegan) { + [self handleBeginGestureWithEvent:event isSyntheticallyInjected:NO]; } -#endif + + if (event.phase == NSEventPhaseEnded || + event.phase == NSEventPhaseCancelled) { + [self handleEndGestureWithEvent:event]; + } if (_responderDelegate && [_responderDelegate respondsToSelector:@selector(handleEvent:)]) { @@ -1350,24 +1309,16 @@ // Called repeatedly during a pinch gesture, with incremental change values. - (void)magnifyWithEvent:(NSEvent*)event { -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - // When linking against the 10.11 (or later) SDK and running on 10.11 or - // later, check the phase of the event and specially handle the "begin" and - // "end" phases. - if (base::mac::IsAtLeastOS10_11()) { - if (event.phase == NSEventPhaseBegan) { - [self handleBeginGestureWithEvent:event isSyntheticallyInjected:NO]; - return; - } - - if (event.phase == NSEventPhaseEnded || - event.phase == NSEventPhaseCancelled) { - [self handleEndGestureWithEvent:event]; - return; - } + if (event.phase == NSEventPhaseBegan) { + [self handleBeginGestureWithEvent:event isSyntheticallyInjected:NO]; + return; } -#endif + + if (event.phase == NSEventPhaseEnded || + event.phase == NSEventPhaseCancelled) { + [self handleEndGestureWithEvent:event]; + return; + } // If this conditional evalutes to true, and the function has not // short-circuited from the previous block, then this event is a duplicate of
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm index 4cc5feb..8f8e91c8 100644 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -183,31 +183,21 @@ if (!focus) break; // Just fire a notification on the root. - if (base::mac::IsAtLeastOS10_11()) { - // |NSAccessibilityPostNotificationWithUserInfo| should be used on OS X - // 10.11 or later to notify Voiceover about text selection changes. This - // API has been present on versions of OS X since 10.7 but doesn't - // appear to be needed by Voiceover before version 10.11. - NSDictionary* user_info = - GetUserInfoForSelectedTextChangedNotification(focus_changed); + NSDictionary* user_info = + GetUserInfoForSelectedTextChangedNotification(focus_changed); - BrowserAccessibilityManager* root_manager = GetRootManager(); - if (!root_manager) - return; - BrowserAccessibility* root = root_manager->GetRoot(); - if (!root) - return; - - NSAccessibilityPostNotificationWithUserInfo( - ToBrowserAccessibilityCocoa(focus), mac_notification, user_info); - NSAccessibilityPostNotificationWithUserInfo( - ToBrowserAccessibilityCocoa(root), mac_notification, user_info); + BrowserAccessibilityManager* root_manager = GetRootManager(); + if (!root_manager) return; - } else { - NSAccessibilityPostNotification(ToBrowserAccessibilityCocoa(focus), - mac_notification); - } - break; + BrowserAccessibility* root = root_manager->GetRoot(); + if (!root) + return; + + NSAccessibilityPostNotificationWithUserInfo( + ToBrowserAccessibilityCocoa(focus), mac_notification, user_info); + NSAccessibilityPostNotificationWithUserInfo( + ToBrowserAccessibilityCocoa(root), mac_notification, user_info); + return; } case ui::AXEventGenerator::Event::EXPANDED: if (node->GetRole() == ax::mojom::Role::kRow || @@ -330,7 +320,7 @@ case ui::AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED: DCHECK(node->IsTextField()); mac_notification = NSAccessibilityValueChangedNotification; - if (base::mac::IsAtLeastOS10_11() && !text_edits_.empty()) { + if (!text_edits_.empty()) { base::string16 deleted_text; base::string16 inserted_text; int32_t node_id = node->GetId();
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc index 31121ef0..3334739 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.cc +++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -500,6 +500,11 @@ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); if (obj.is_null()) return; + + // Do not announce empty text. + if (text.empty()) + return; + Java_WebContentsAccessibilityImpl_announceLiveRegionText( env, obj, base::android::ConvertUTF16ToJavaString(env, text)); } @@ -750,19 +755,28 @@ Java_WebContentsAccessibilityImpl_setAccessibilityNodeInfoParent( env, obj, info, android_node->unique_id()); } + + // Build a vector of child ids + std::vector<int> child_ids; for (BrowserAccessibility::PlatformChildIterator it = node->PlatformChildrenBegin(); it != node->PlatformChildrenEnd(); ++it) { auto* android_node = static_cast<BrowserAccessibilityAndroid*>(it.get()); - Java_WebContentsAccessibilityImpl_addAccessibilityNodeInfoChild( - env, obj, info, android_node->unique_id()); + child_ids.push_back(android_node->unique_id()); } + if (child_ids.size()) { + Java_WebContentsAccessibilityImpl_addAccessibilityNodeInfoChildren( + env, obj, info, + base::android::ToJavaIntArray(env, child_ids.data(), child_ids.size())); + } + Java_WebContentsAccessibilityImpl_setAccessibilityNodeInfoBooleanAttributes( env, obj, info, unique_id, node->IsReportingCheckable(), node->IsChecked(), node->IsClickable(), node->IsContentInvalid(), node->IsEnabled(), node->IsFocusable(), node->IsFocused(), node->HasImage(), node->IsPasswordField(), node->IsScrollable(), node->IsSelected(), node->IsVisibleToUser()); + Java_WebContentsAccessibilityImpl_addAccessibilityNodeInfoActions( env, obj, info, unique_id, node->CanScrollForward(), node->CanScrollBackward(), node->CanScrollUp(), node->CanScrollDown(), @@ -778,7 +792,11 @@ base::android::ConvertUTF8ToJavaString(env, node->GetRoleString()), base::android::ConvertUTF16ToJavaString(env, node->GetRoleDescription()), base::android::ConvertUTF16ToJavaString(env, node->GetHint()), - base::android::ConvertUTF16ToJavaString(env, node->GetTargetUrl())); + base::android::ConvertUTF16ToJavaString(env, node->GetTargetUrl()), + node->CanOpenPopup(), node->IsDismissable(), node->IsMultiLine(), + node->AndroidInputType(), node->AndroidLiveRegionType(), + base::android::ConvertUTF16ToJavaString( + env, node->GetContentInvalidErrorMessage())); ScopedJavaLocalRef<jintArray> suggestion_starts_java; ScopedJavaLocalRef<jintArray> suggestion_ends_java; @@ -819,13 +837,6 @@ UpdateAccessibilityNodeInfoBoundsRect(env, obj, info, unique_id, node); - Java_WebContentsAccessibilityImpl_setAccessibilityNodeInfoAttributes( - env, obj, info, node->CanOpenPopup(), node->IsDismissable(), - node->IsMultiLine(), node->AndroidInputType(), - node->AndroidLiveRegionType(), - base::android::ConvertUTF16ToJavaString( - env, node->GetContentInvalidErrorMessage())); - Java_WebContentsAccessibilityImpl_setAccessibilityNodeInfoOAttributes( env, obj, info, node->HasCharacterLocations(), base::android::ConvertUTF16ToJavaString(env, node->GetHint())); @@ -870,17 +881,13 @@ if (!node) return false; - Java_WebContentsAccessibilityImpl_setAccessibilityEventBooleanAttributes( + // We will always set boolean, classname, list and scroll attributes. + Java_WebContentsAccessibilityImpl_setAccessibilityEventBaseAttributes( env, obj, event, node->IsChecked(), node->IsEnabled(), - node->IsPasswordField(), node->IsScrollable()); - Java_WebContentsAccessibilityImpl_setAccessibilityEventClassName( - env, obj, event, + node->IsPasswordField(), node->IsScrollable(), node->GetItemIndex(), + node->GetItemCount(), node->GetScrollX(), node->GetScrollY(), + node->GetMaxScrollX(), node->GetMaxScrollY(), base::android::ConvertUTF8ToJavaString(env, node->GetClassName())); - Java_WebContentsAccessibilityImpl_setAccessibilityEventListAttributes( - env, obj, event, node->GetItemIndex(), node->GetItemCount()); - Java_WebContentsAccessibilityImpl_setAccessibilityEventScrollAttributes( - env, obj, event, node->GetScrollX(), node->GetScrollY(), - node->GetMaxScrollX(), node->GetMaxScrollY()); switch (event_type) { case ANDROID_ACCESSIBILITY_EVENT_TEXT_CHANGED: {
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc index 79b27f81..e83a608 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc
@@ -7,7 +7,9 @@ #include "base/callback.h" #include "base/command_line.h" #include "base/feature_list.h" +#include "build/branding_buildflags.h" #include "build/build_config.h" +#include "build/chromeos_buildflags.h" #include "cc/base/switches.h" #include "content/browser/background_fetch/background_fetch_service_impl.h" #include "content/browser/bad_message.h" @@ -48,6 +50,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/device_service.h" +#include "content/public/browser/service_process_host.h" #include "content/public/browser/service_worker_context.h" #include "content/public/browser/shared_worker_instance.h" #include "content/public/browser/storage_partition.h" @@ -172,9 +175,17 @@ void BindShapeDetectionServiceOnIOThread( mojo::PendingReceiver<shape_detection::mojom::ShapeDetectionService> receiver) { +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && BUILDFLAG(IS_ASH) + content::ServiceProcessHost::Launch< + shape_detection::mojom::ShapeDetectionService>( + std::move(receiver), content::ServiceProcessHost::Options() + .WithDisplayName("Shape Detection Service") + .Pass()); +#else auto* gpu = GpuProcessHost::Get(); if (gpu) gpu->RunService(std::move(receiver)); +#endif } shape_detection::mojom::ShapeDetectionService* GetShapeDetectionService() {
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index ff135b7f..6e4a20f4 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -671,6 +671,15 @@ return delegate_->GetQuarantineConnectionCallback(); } +std::unique_ptr<download::DownloadItemRenameHandler> +DownloadManagerImpl::GetRenameHandlerForDownload( + download::DownloadItemImpl* download_item) { + if (!delegate_) + return nullptr; + + return delegate_->GetRenameHandlerForDownload(download_item); +} + void DownloadManagerImpl::StartDownload( std::unique_ptr<download::DownloadCreateInfo> info, std::unique_ptr<download::InputStream> stream,
diff --git a/content/browser/download/download_manager_impl.h b/content/browser/download/download_manager_impl.h index 3218ad4..69fcf9a 100644 --- a/content/browser/download/download_manager_impl.h +++ b/content/browser/download/download_manager_impl.h
@@ -15,7 +15,6 @@ #include "base/callback_forward.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/optional.h" @@ -252,6 +251,9 @@ mojo::PendingReceiver<device::mojom::WakeLockProvider> receiver) override; download::QuarantineConnectionCallback GetQuarantineConnectionCallback() override; + std::unique_ptr<download::DownloadItemRenameHandler> + GetRenameHandlerForDownload( + download::DownloadItemImpl* download_item) override; // Drops a download before it is created. void DropDownload();
diff --git a/content/browser/network_service_browsertest.cc b/content/browser/network_service_browsertest.cc index f855b256..9c61f5f 100644 --- a/content/browser/network_service_browsertest.cc +++ b/content/browser/network_service_browsertest.cc
@@ -459,11 +459,11 @@ if (IsInProcessNetworkService()) return; - EXPECT_EQ(GetPreloadedFirstPartySetCountFromNetworkService(), 2); + EXPECT_EQ(GetPreloadedFirstPartySetCountFromNetworkService(), 3); SimulateNetworkServiceCrash(); - EXPECT_EQ(GetPreloadedFirstPartySetCountFromNetworkService(), 2); + EXPECT_EQ(GetPreloadedFirstPartySetCountFromNetworkService(), 3); } // Tests that CORS is performed by the network service when |factory_override|
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc index dbd1c16..81fc356 100644 --- a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc +++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
@@ -882,18 +882,9 @@ } }; -#if defined(OS_WIN) -// High DPI tests are disabled on Windows due to crbug.com/545547. -#define MAYBE_SelectionHandleCoordinates DISABLED_SelectionHandleCoordinates -#define MAYBE_InsertionHandleCoordinates DISABLED_InsertionHandleCoordinates -#else -#define MAYBE_SelectionHandleCoordinates SelectionHandleCoordinates -#define MAYBE_InsertionHandleCoordinates InsertionHandleCoordinates -#endif - // Tests that selection handles are properly positioned at 2x DSF. IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraScaleFactorTest, - MAYBE_SelectionHandleCoordinates) { + SelectionHandleCoordinates) { // Set the test page up. ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); InitSelectionController(); @@ -989,7 +980,7 @@ // Tests that insertion handles are properly positioned at 2x DSF. IN_PROC_BROWSER_TEST_F(TouchSelectionControllerClientAuraScaleFactorTest, - MAYBE_InsertionHandleCoordinates) { + InsertionHandleCoordinates) { // Set the test page up. ASSERT_NO_FATAL_FAILURE(StartTestWithPage("/touch_selection.html")); InitSelectionController();
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index cb5b9b4..1a7c0e9 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4408,8 +4408,15 @@ cc::BrowserControlsState constraints, cc::BrowserControlsState current, bool animate) { - if (frame_) - frame_->UpdateBrowserControlsState(constraints, current, animate); + DCHECK(frame_tree_node_->IsMainFrame()); + + // TODO(https://crbug.com/1154852): Don't update browser control state for a + // frame that hasn't been created yet. + if (!IsRenderFrameCreated()) + return; + + GetAssociatedLocalMainFrame()->UpdateBrowserControlsState(constraints, + current, animate); } bool RenderFrameHostImpl::Reload() {
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc index e5da5c29..e1682114 100644 --- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -4510,100 +4510,6 @@ private: base::test::ScopedFeatureList feature_list_; }; - -IN_PROC_BROWSER_TEST_F( - RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, - ComputeIFrameLoopbackIPAddressSpace) { - { - base::string16 expected_title(base::UTF8ToUTF16("LOADED")); - TitleWatcher title_watcher(web_contents(), expected_title); - EXPECT_TRUE( - NavigateToURL(shell(), embedded_test_server()->GetURL( - "/do-not-treat-as-public-address.html"))); - EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); - - std::vector<RenderFrameHost*> frames = - shell()->web_contents()->GetAllFrames(); - for (auto* frame : frames) { - SCOPED_TRACE(::testing::Message() - << "URL: " << frame->GetLastCommittedURL()); - auto* rfhi = static_cast<RenderFrameHostImpl*>(frame); - - if (frame->GetLastCommittedURL().IsAboutBlank()) { - // TODO(986744): `about:blank` is not navigated via - // `RenderFrameHostImpl::CommitNavigation`, but handled in the renderer - // via `RenderFrameImpl::CommitInitialEmptyDocument`. This means that we - // don't calculate the value correctly on the browser-side, but do - // correctly inherit from the initiator on the Blink-side. - EXPECT_EQ( - network::mojom::IPAddressSpace::kUnknown, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("local", EvalJs(rfhi, "document.addressSpace")); - } else if (frame->GetLastCommittedURL().SchemeIsFileSystem() || - frame->GetLastCommittedURL().SchemeIsBlob() || - frame->GetLastCommittedURL().IsAboutSrcdoc() || - frame->GetLastCommittedURL().SchemeIs(url::kDataScheme)) { - // TODO(986744): `data:`, `blob:`, `filesystem:`, and `about:srcdoc` - // should all inherit the IPAddressSpace from the document - // that initiated a navigation. Right now, we treat them as `kPublic`. - EXPECT_EQ( - network::mojom::IPAddressSpace::kUnknown, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("public", EvalJs(rfhi, "document.addressSpace")); - } else { - // TODO(mkwst): Once the above two TODOs are resolved, this branch will - // be the correct expectation for all the frames in this test. - EXPECT_EQ( - network::mojom::IPAddressSpace::kLocal, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("local", EvalJs(rfhi, "document.addressSpace")); - } - } - } - - // Loading from loopback that asserts publicness: `data:`, `blob:`, - // `filesystem:`, `about:blank`, and `about:srcdoc` all inherit the assertion. - { - base::string16 expected_title(base::UTF8ToUTF16("LOADED")); - TitleWatcher title_watcher(web_contents(), expected_title); - EXPECT_TRUE(NavigateToURL(shell(), embedded_test_server()->GetURL( - "/treat-as-public-address.html"))); - EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); - - std::vector<RenderFrameHost*> frames = web_contents()->GetAllFrames(); - for (auto* frame : frames) { - auto* rfhi = static_cast<RenderFrameHostImpl*>(frame); - if (frame->GetLastCommittedURL().IsAboutBlank()) { - // TODO(986744): `about:blank` is not navigated via `NavigationRequest`, - // but handled in the renderer via - // `RenderFrameImpl::CommitSyncNavigation`. This means that we don't - // calculate the value correctly on the browser-side, but do correctly - // inherit from the initiator on the Blink-side. - EXPECT_EQ( - network::mojom::IPAddressSpace::kUnknown, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("public", EvalJs(rfhi, "document.addressSpace")); - } else if (frame->GetLastCommittedURL().SchemeIsFileSystem() || - frame->GetLastCommittedURL().SchemeIsBlob() || - frame->GetLastCommittedURL().IsAboutSrcdoc() || - frame->GetLastCommittedURL().SchemeIs(url::kDataScheme)) { - // TODO(986744): `data:`, `blob:`, `filesystem:`, and `about:srcdoc` - // should all inherit the IPAddressSpace from the document - // that initiated a navigation. Right now, we treat them as `kUnknown`. - EXPECT_EQ( - network::mojom::IPAddressSpace::kUnknown, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("public", EvalJs(rfhi, "document.addressSpace")); - } else { - EXPECT_EQ( - network::mojom::IPAddressSpace::kPublic, - rfhi->last_committed_client_security_state()->ip_address_space); - EXPECT_EQ("public", EvalJs(rfhi, "document.addressSpace")); - } - } - } -} - namespace { constexpr char kDefaultPath[] = "/defaultresponse"; @@ -4758,7 +4664,8 @@ EXPECT_FALSE(child_navigation_manager.was_successful()); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); EXPECT_EQ(GURL(kUnreachableWebDataURL), EvalJs(child_frame, "document.location.href")); @@ -4795,7 +4702,8 @@ EXPECT_TRUE(child_navigation_manager.was_successful()); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); EXPECT_EQ(url, EvalJs(child_frame, "document.location.href")); EXPECT_EQ(url, child_frame->GetLastCommittedURL()); EXPECT_FALSE(child_frame->GetLastCommittedOrigin().opaque()); @@ -4861,7 +4769,8 @@ EXPECT_FALSE(navigation_manager.was_successful()); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); // Failed navigation. EXPECT_EQ(GURL(kUnreachableWebDataURL), @@ -4906,7 +4815,8 @@ EXPECT_FALSE(navigation_manager.was_successful()); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); // Failed navigation. EXPECT_EQ(GURL(kUnreachableWebDataURL), @@ -4926,7 +4836,7 @@ CommitsClientSecurityStateForAboutURL) { EXPECT_TRUE(NavigateToURL(shell(), GURL("about:blank"))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_FALSE(security_state->is_web_secure_context); @@ -4944,7 +4854,7 @@ CommitsClientSecurityStateForDataURL) { EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,foo"))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_FALSE(security_state->is_web_secure_context); @@ -4959,7 +4869,7 @@ CommitsClientSecurityStateForFileURL) { EXPECT_TRUE(NavigateToURL(shell(), GetTestUrl("", "empty.html"))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_TRUE(security_state->is_web_secure_context); @@ -4975,7 +4885,7 @@ EXPECT_TRUE( NavigateToURL(shell(), InsecureDefaultURL(*embedded_test_server()))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_FALSE(security_state->is_web_secure_context); @@ -4991,7 +4901,7 @@ EXPECT_TRUE( NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_TRUE(security_state->is_web_secure_context); @@ -5007,7 +4917,7 @@ EXPECT_TRUE(NavigateToURL( shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_TRUE(security_state->is_web_secure_context); @@ -5030,7 +4940,7 @@ EXPECT_TRUE(NavigateToURL(shell(), url)); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_FALSE(security_state->is_web_secure_context); @@ -5053,7 +4963,7 @@ EXPECT_TRUE(NavigateToURL(shell(), url)); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = root_frame_host()->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); EXPECT_FALSE(security_state->is_web_secure_context); @@ -5063,6 +4973,326 @@ EXPECT_EQ("public", EvalJs(root_frame_host(), "document.addressSpace")); } +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForAboutBlankFromPublic) { + EXPECT_TRUE(NavigateToURL( + shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = "about:blank"; // Superfluous, but being explicit is nice. + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kPublic once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForAboutBlankFromLocal) { + EXPECT_TRUE( + NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = "about:blank"; // Superfluous, but being explicit is nice. + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kLocal once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForAboutSrcdocFromPublic) { + EXPECT_TRUE(NavigateToURL( + shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.srcdoc = "foo"; + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kPublic once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForAboutSrcdocFromLocal) { + EXPECT_TRUE( + NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.srcdoc = "foo"; + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kLocal once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForDataURLFromPublic) { + EXPECT_TRUE(NavigateToURL( + shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = "data:text/html,foo"; + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kPublic once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForDataURLFromLocal) { + EXPECT_TRUE( + NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = "data:text/html,foo"; + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kLocal once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForBlobURLFromPublic) { + EXPECT_TRUE(NavigateToURL( + shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const blob = new Blob(["foo"], {type: "text/html"}); + const iframe = document.createElement("iframe"); + iframe.src = URL.createObjectURL(blob); + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kPublic once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForBlobURLFromLocal) { + EXPECT_TRUE( + NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + new Promise((resolve) => { + const blob = new Blob(["foo"], {type: "text/html"}); + const iframe = document.createElement("iframe"); + iframe.src = URL.createObjectURL(blob); + iframe.onload = _ => { resolve(true); }; + document.body.appendChild(iframe); + }) + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kLocal once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForFilesystemURLFromPublic) { + EXPECT_TRUE(NavigateToURL( + shell(), SecureTreatAsPublicAddressURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + // It seems anonymous async functions are not available yet, so we cannot + // use an immediately-invoked function expression. + async function run() { + const fs = await new Promise((resolve, reject) => { + window.webkitRequestFileSystem(window.TEMPORARY, 1024, resolve, reject); + }); + const file = await new Promise((resolve, reject) => { + fs.root.getFile('hello.html', {create: true}, resolve, reject); + }); + const writer = await new Promise((resolve, reject) => { + file.createWriter(resolve, reject); + }); + await new Promise((resolve) => { + writer.onwriteend = resolve; + writer.write(new Blob(["foo"], {type: "text/html"})); + }); + await new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = file.toURL(); + iframe.onload = resolve; + document.body.appendChild(iframe); + }); + return true; + } + run() + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kPublic once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + +IN_PROC_BROWSER_TEST_F( + RenderFrameHostImplBrowserTestWithInsecurePrivateNetworkRequestsBlocked, + IframeInheritsAddressSpaceForFilesystemURLFromLocal) { + EXPECT_TRUE( + NavigateToURL(shell(), SecureDefaultURL(*embedded_test_server()))); + + EXPECT_EQ(true, EvalJs(root_frame_host(), R"( + // It seems anonymous async functions are not available yet, so we cannot + // use an immediately-invoked function expression. + async function run() { + const fs = await new Promise((resolve, reject) => { + window.webkitRequestFileSystem(window.TEMPORARY, 1024, resolve, reject); + }); + const file = await new Promise((resolve, reject) => { + fs.root.getFile('hello.html', {create: true}, resolve, reject); + }); + const writer = await new Promise((resolve, reject) => { + file.createWriter(resolve, reject); + }); + await new Promise((resolve) => { + writer.onwriteend = resolve; + writer.write(new Blob(["foo"], {type: "text/html"})); + }); + await new Promise((resolve) => { + const iframe = document.createElement("iframe"); + iframe.src = file.toURL(); + iframe.onload = resolve; + document.body.appendChild(iframe); + }); + return true; + } + run() + )")); + + ASSERT_EQ(1ul, root_frame_host()->child_count()); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); + + const network::mojom::ClientSecurityStatePtr& security_state = + child_frame->last_committed_client_security_state(); + ASSERT_FALSE(security_state.is_null()); + + // TODO(https://crbug.com/1136028): Expect kLocal once inheritance is fixed. + EXPECT_EQ(network::mojom::IPAddressSpace::kUnknown, + security_state->ip_address_space); +} + // This test verifies that even with the blocking feature disabled, an insecure // page in the `local` address space cannot fetch a `file:` URL. // @@ -5232,7 +5462,7 @@ NavigateToURL(shell(), InsecureDefaultURL(*embedded_test_server()))); // Then embed a secure public iframe. - auto iframe_url = SecureTreatAsPublicAddressURL(*embedded_test_server()); + GURL iframe_url = SecureTreatAsPublicAddressURL(*embedded_test_server()); std::string script = base::ReplaceStringPlaceholders( R"( const iframe = document.createElement("iframe"); @@ -5244,9 +5474,10 @@ EXPECT_TRUE(WaitForLoadStop(web_contents())); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = child_frame->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null()); @@ -5285,7 +5516,7 @@ root_frame_host()->last_committed_client_security_state().is_null()); // Then embed a secure public iframe. - auto iframe_url = SecureTreatAsPublicAddressURL(*embedded_test_server()); + GURL iframe_url = SecureTreatAsPublicAddressURL(*embedded_test_server()); std::string script = base::ReplaceStringPlaceholders( R"( const iframe = document.createElement("iframe"); @@ -5297,9 +5528,10 @@ EXPECT_FALSE(WaitForLoadStop(web_contents())); ASSERT_EQ(1ul, root_frame_host()->child_count()); - auto* child_frame = root_frame_host()->child_at(0)->current_frame_host(); + RenderFrameHostImpl* child_frame = + root_frame_host()->child_at(0)->current_frame_host(); - const auto& security_state = + const network::mojom::ClientSecurityStatePtr& security_state = child_frame->last_committed_client_security_state(); ASSERT_FALSE(security_state.is_null());
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index 5c9b4fad..91353a8 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -324,11 +324,6 @@ NOTIMPLEMENTED(); } -void RenderWidgetHostViewAndroid::InitAsFullscreen( - RenderWidgetHostView* reference_host_view) { - NOTIMPLEMENTED(); -} - void RenderWidgetHostViewAndroid::NotifyVirtualKeyboardOverlayRect( const gfx::Rect& keyboard_rect) { RenderFrameHostImpl* frame_host = static_cast<RenderFrameHostImpl*>(
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index 8e0436d..9e11697 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -98,7 +98,6 @@ void InitAsChild(gfx::NativeView parent_view) override; void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) override; - void InitAsFullscreen(RenderWidgetHostView* reference_host_view) override; void SetSize(const gfx::Size& size) override; void SetBounds(const gfx::Rect& rect) override; gfx::NativeView GetNativeView() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 433f4d50..7f8faec1 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -166,7 +166,7 @@ DCHECK(event.type() == ui::ET_MOUSE_PRESSED || event.type() == ui::ET_TOUCH_PRESSED); - if (in_shutdown_ || is_fullscreen_) + if (in_shutdown_) return; // |target| may be null. @@ -400,31 +400,6 @@ device_scale_factor_ = GetDeviceScaleFactor(); } -void RenderWidgetHostViewAura::InitAsFullscreen( - RenderWidgetHostView* reference_host_view) { - DCHECK_EQ(widget_type_, WidgetType::kFrame); - is_fullscreen_ = true; - CreateAuraWindow(aura::client::WINDOW_TYPE_NORMAL); - window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); - - aura::Window* parent = nullptr; - gfx::Rect bounds; - if (reference_host_view) { - aura::Window* reference_window = - static_cast<RenderWidgetHostViewAura*>(reference_host_view)->window_; - event_handler_->TrackHost(reference_window); - display::Display display = - display::Screen::GetScreen()->GetDisplayNearestWindow(reference_window); - parent = reference_window->GetRootWindow(); - bounds = display.bounds(); - } - aura::client::ParentWindowWithContext(window_, parent, bounds); - Show(); - Focus(); - - device_scale_factor_ = GetDeviceScaleFactor(); -} - void RenderWidgetHostViewAura::Show() { // If the viz::LocalSurfaceId is invalid, we may have been evicted, // and no other visual properties have since been changed. Allocate a new id @@ -1827,9 +1802,7 @@ if (!host) return true; const ui::Event* event = host->dispatcher()->current_event(); - if (!event) - return true; - return is_fullscreen_; + return !event; } //////////////////////////////////////////////////////////////////////////////// @@ -1897,31 +1870,6 @@ if (manager) manager->OnWindowBlurred(); - // If we lose the focus while fullscreen, close the window; Pepper Flash - // won't do it for us (unlike NPAPI Flash). However, we do not close the - // window if we lose the focus to a window on another display. - display::Screen* screen = display::Screen::GetScreen(); - bool focusing_other_display = - gained_focus && screen->GetNumDisplays() > 1 && - (screen->GetDisplayNearestWindow(window_).id() != - screen->GetDisplayNearestWindow(gained_focus).id()); - if (is_fullscreen_ && !in_shutdown_ && !focusing_other_display) { -#if defined(OS_WIN) - // On Windows, if we are switching to a non Aura Window on a different - // screen we should not close the fullscreen window. - if (!gained_focus) { - POINT point = {0}; - ::GetCursorPos(&point); - if (screen->GetDisplayNearestWindow(window_).id() != - screen->GetDisplayNearestPoint(gfx::Point(point)).id()) { - return; - } - } -#endif - Shutdown(); - return; - } - // Close the child popup window if we lose focus (e.g. due to a JS alert or // system modal dialog). This is particularly important if // |popup_child_host_view_| has mouse capture.
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index 8d9b8dc..ef81cbbea 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -119,7 +119,6 @@ // Overridden from RenderWidgetHostViewBase: void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) override; - void InitAsFullscreen(RenderWidgetHostView* reference_host_view) override; void Focus() override; void UpdateCursor(const WebCursor& cursor) override; void DisplayCursor(const WebCursor& cursor) override; @@ -598,9 +597,8 @@ // Tracks the ancestors of the RWHVA window for window location changes. std::unique_ptr<WindowAncestorObserver> ancestor_window_observer_; - // Are we in the process of closing? Tracked so fullscreen views can avoid - // sending a second shutdown request to the host when they lose the focus - // after requesting shutdown for another reason (e.g. Escape key). + // Are we in the process of closing? Tracked so we don't try to shutdown + // again while inside shutdown, causing a double-free. bool in_shutdown_; // True if in the process of handling a window bounds changed notification.
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index b03f8c6..7963225 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -253,9 +253,11 @@ ~FakeRenderWidgetHostViewAura() override {} void UseFakeDispatcher() { - dispatcher_ = new FakeWindowEventDispatcher(window()->GetHost()); - std::unique_ptr<aura::WindowEventDispatcher> dispatcher(dispatcher_); - aura::test::SetHostDispatcher(window()->GetHost(), std::move(dispatcher)); + aura::WindowTreeHost* host = window()->GetHost(); + DCHECK(host); + auto dispatcher = std::make_unique<FakeWindowEventDispatcher>(host); + dispatcher_ = dispatcher.get(); + aura::test::SetHostDispatcher(host, std::move(dispatcher)); } void RunOnCompositingDidCommit() { @@ -1062,23 +1064,6 @@ // Terminate the test without initializing |view_|. } -// Checks that a fullscreen view has the correct show-state and receives the -// focus. -TEST_F(RenderWidgetHostViewAuraTest, FocusFullscreen) { - view_->InitAsFullscreen(parent_view_); - aura::Window* window = view_->GetNativeView(); - ASSERT_TRUE(window != nullptr); - EXPECT_EQ(ui::SHOW_STATE_FULLSCREEN, - window->GetProperty(aura::client::kShowStateKey)); - - // Check that we requested and received the focus. - EXPECT_TRUE(window->HasFocus()); - - // Check that we'll also say it's okay to activate the window when there's an - // ActivationClient defined. - EXPECT_TRUE(view_->ShouldActivate()); -} - // Checks that a popup is positioned correctly relative to its parent using // screen coordinates. TEST_F(RenderWidgetHostViewAuraTest, PositionChildPopup) { @@ -1161,29 +1146,6 @@ widget_host_->screen_rects().at(0).second); } -// Checks that a fullscreen view is destroyed when it loses the focus. -TEST_F(RenderWidgetHostViewAuraTest, DestroyFullscreenOnBlur) { - view_->InitAsFullscreen(parent_view_); - aura::Window* window = view_->GetNativeView(); - ASSERT_TRUE(window != nullptr); - ASSERT_TRUE(window->HasFocus()); - - // After we create and focus another window, the RWHVA's window should be - // destroyed. - TestWindowObserver observer(window); - aura::test::TestWindowDelegate delegate; - std::unique_ptr<aura::Window> sibling(new aura::Window(&delegate)); - sibling->Init(ui::LAYER_TEXTURED); - sibling->Show(); - window->parent()->AddChild(sibling.get()); - sibling->Focus(); - ASSERT_TRUE(sibling->HasFocus()); - ASSERT_TRUE(observer.destroyed()); - - widget_host_ = nullptr; - view_ = nullptr; -} - #if BUILDFLAG(IS_CHROMEOS_ASH) // Checks that a popup view is destroyed when a user clicks outside of the popup // view and focus does not change. This is the case when the user clicks on the @@ -2425,7 +2387,8 @@ // Checks that touch-event state is maintained correctly for multiple touch // points. TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) { - view_->InitAsFullscreen(parent_view_); + view_->InitAsChild(parent_view_->GetNativeView()); + view_->Focus(); view_->Show(); view_->UseFakeDispatcher(); @@ -5106,7 +5069,8 @@ // Ensures that the mapping from ui::TouchEvent to blink::WebTouchEvent doesn't // lose track of the number of acks required. TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) { - view_->InitAsFullscreen(parent_view_); + view_->InitAsChild(parent_view_->GetNativeView()); + view_->Focus(); view_->Show(); view_->UseFakeDispatcher(); @@ -5513,7 +5477,10 @@ } TEST_F(RenderWidgetHostViewAuraTest, GestureTapFromStylusHasPointerType) { - view_->InitAsFullscreen(parent_view_); + // TODO(flackr): This test fails as the gesture events are not generated + // unless the `view_` is parented directly to the root window. + view_->InitAsChild(parent_view_->GetNativeView()->GetRootWindow()); + view_->Focus(); view_->Show(); aura::Window* root = view_->GetNativeView()->GetRootWindow();
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h index f91e9ed..44d3c253 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.h +++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -405,12 +405,6 @@ virtual void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& bounds) = 0; - // Perform all the initialization steps necessary for this object to represent - // a full screen window. - // |reference_host_view| is the view associated with the creating page that - // helps to position the full screen widget on the correct monitor. - virtual void InitAsFullscreen(RenderWidgetHostView* reference_host_view) = 0; - // Sets the cursor for this view to the one associated with the specified // cursor_type. virtual void UpdateCursor(const WebCursor& cursor) = 0; @@ -490,8 +484,6 @@ void StopFling(); - bool is_fullscreen() { return is_fullscreen_; } - void set_is_currently_scrolling_viewport( bool is_currently_scrolling_viewport) { is_currently_scrolling_viewport_ = is_currently_scrolling_viewport; @@ -552,9 +544,6 @@ // RenderWidgetHostViewChildFrame. RenderWidgetHostImpl* host_; - // Is this a fullscreen view? - bool is_fullscreen_ = false; - // Whether this view is a frame or a popup. WidgetType widget_type_ = WidgetType::kFrame;
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc index b4e2bbb..ab41f73 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -344,11 +344,6 @@ NOTREACHED(); } -void RenderWidgetHostViewChildFrame::InitAsFullscreen( - RenderWidgetHostView* reference_host_view) { - NOTREACHED(); -} - void RenderWidgetHostViewChildFrame::UpdateCursor(const WebCursor& cursor) { if (frame_connector_) frame_connector_->UpdateCursor(cursor);
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h index a7367e5..9d782bb 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.h +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -94,7 +94,6 @@ gfx::Size GetCompositorViewportPixelSize() override; void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& bounds) override; - void InitAsFullscreen(RenderWidgetHostView* reference_host_view) override; void UpdateCursor(const WebCursor& cursor) override; void SetIsLoading(bool is_loading) override; void RenderProcessGone() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_event_handler.cc b/content/browser/renderer_host/render_widget_host_view_event_handler.cc index 9b087330..b7951f0 100644 --- a/content/browser/renderer_host/render_widget_host_view_event_handler.cc +++ b/content/browser/renderer_host/render_widget_host_view_event_handler.cc
@@ -147,15 +147,6 @@ popup_child_event_handler_ = popup_child_event_handler; } -void RenderWidgetHostViewEventHandler::TrackHost( - aura::Window* reference_window) { - if (!reference_window) - return; - DCHECK(!host_tracker_); - host_tracker_.reset(new aura::WindowTracker); - host_tracker_->Add(reference_window); -} - #if defined(OS_WIN) void RenderWidgetHostViewEventHandler::UpdateMouseLockRegion() { RECT window_rect = @@ -304,51 +295,29 @@ return; } - bool mark_event_as_handled = true; - // We need to handle the Escape key for Pepper Flash. - if (host_view_->is_fullscreen() && event->key_code() == ui::VKEY_ESCAPE) { - // Focus the window we were created from. - if (host_tracker_.get() && !host_tracker_->windows().empty()) { - aura::Window* host = *(host_tracker_->windows().begin()); - aura::client::FocusClient* client = aura::client::GetFocusClient(host); - if (client) { - // Calling host->Focus() may delete |this|. We create a local observer - // for that. In that case we exit without further access to any members. - auto local_tracker = std::move(host_tracker_); - local_tracker->Add(window_); - host->Focus(); - if (!local_tracker->Contains(window_)) { - event->SetHandled(); - return; - } - } - } - delegate_->Shutdown(); - host_tracker_.reset(); - } else { - if (event->key_code() == ui::VKEY_RETURN) { - // Do not forward return key release events if no press event was handled. - if (event->type() == ui::ET_KEY_RELEASED && !accept_return_character_) - return; - // Accept return key character events between press and release events. - accept_return_character_ = event->type() == ui::ET_KEY_PRESSED; - } - - // Call SetKeyboardFocus() for not only ET_KEY_PRESSED but also - // ET_KEY_RELEASED. If a user closed the hotdog menu with ESC key press, - // we need to notify focus to Blink on ET_KEY_RELEASED for ESC key. - SetKeyboardFocus(); - // We don't have to communicate with an input method here. - NativeWebKeyboardEvent webkit_event(*event); - - // If the key has been reserved as part of the active KeyboardLock request, - // then we want to mark it as such so it is not intercepted by the browser. - if (IsKeyLocked(*event)) - webkit_event.skip_in_browser = true; - - delegate_->ForwardKeyboardEventWithLatencyInfo( - webkit_event, *event->latency(), &mark_event_as_handled); + if (event->key_code() == ui::VKEY_RETURN) { + // Do not forward return key release events if no press event was handled. + if (event->type() == ui::ET_KEY_RELEASED && !accept_return_character_) + return; + // Accept return key character events between press and release events. + accept_return_character_ = event->type() == ui::ET_KEY_PRESSED; } + + // Call SetKeyboardFocus() for not only ET_KEY_PRESSED but also + // ET_KEY_RELEASED. If a user closed the hotdog menu with ESC key press, + // we need to notify focus to Blink on ET_KEY_RELEASED for ESC key. + SetKeyboardFocus(); + // We don't have to communicate with an input method here. + NativeWebKeyboardEvent webkit_event(*event); + + // If the key has been reserved as part of the active KeyboardLock request, + // then we want to mark it as such so it is not intercepted by the browser. + if (IsKeyLocked(*event)) + webkit_event.skip_in_browser = true; + + bool mark_event_as_handled = true; + delegate_->ForwardKeyboardEventWithLatencyInfo( + webkit_event, *event->latency(), &mark_event_as_handled); if (mark_event_as_handled) event->SetHandled(); } @@ -770,11 +739,6 @@ // Needed to propagate mouse event to |window_->parent()->delegate()|, but // note that it might be something other than a WebContentsViewAura instance. // TODO(pkotwicz): Find a better way of doing this. - // In fullscreen mode which is typically used by flash, don't forward - // the mouse events to the parent. The renderer and the plugin process - // handle these events. - if (host_view_->is_fullscreen()) - return; if (event->flags() & ui::EF_FROM_TOUCH) return;
diff --git a/content/browser/renderer_host/render_widget_host_view_event_handler.h b/content/browser/renderer_host/render_widget_host_view_event_handler.h index b1db29e33..abd253b1 100644 --- a/content/browser/renderer_host/render_widget_host_view_event_handler.h +++ b/content/browser/renderer_host/render_widget_host_view_event_handler.h
@@ -18,7 +18,6 @@ #include "third_party/blink/public/mojom/input/pointer_lock_result.mojom.h" #include "ui/aura/scoped_enable_unadjusted_mouse_events.h" #include "ui/aura/scoped_keyboard_hook.h" -#include "ui/aura/window_tracker.h" #include "ui/events/event_handler.h" #include "ui/events/gestures/motion_event_aura.h" #include "ui/latency/latency_info.h" @@ -290,10 +289,6 @@ // the current view has focus. bool set_focus_on_mouse_down_or_key_event_ = false; - // Used to track the state of the window we're created from. Only used when - // created fullscreen. - std::unique_ptr<aura::WindowTracker> host_tracker_; - // Used to record the last position of the mouse. // While the mouse is locked, they store the last known position just as mouse // lock was entered.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h index 59fb273..055d28d 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.h +++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -121,7 +121,6 @@ // Implementation of RenderWidgetHostViewBase. void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) override; - void InitAsFullscreen(RenderWidgetHostView* reference_host_view) override; void Focus() override; void UpdateCursor(const WebCursor& cursor) override; void DisplayCursor(const WebCursor& cursor) override;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index cde9ada..cd544c9 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -367,12 +367,6 @@ ns_view_->InitAsPopup(pos, has_shadow); } -void RenderWidgetHostViewMac::InitAsFullscreen( - RenderWidgetHostView* reference_host_view) { - // This path appears never to be reached. - NOTREACHED(); -} - RenderWidgetHostViewBase* RenderWidgetHostViewMac::GetFocusedViewForTextSelection() { // We obtain the TextSelection from focused RWH which is obtained from the
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm index 46cfd595..2835c78 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -11,7 +11,6 @@ #include "base/command_line.h" #include "base/containers/queue.h" -#include "base/mac/mac_util.h" #include "base/mac/scoped_nsautorelease_pool.h" #include "base/macros.h" #include "base/memory/ptr_util.h" @@ -1507,26 +1506,14 @@ } } - bool ShouldSendGestureEvents() { -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - return base::mac::IsAtMostOS10_10(); -#endif - return true; - } - void SendBeginPinchEvent() { NSEvent* pinchBeginEvent = MockPinchEvent(NSEventPhaseBegan, 0); - if (ShouldSendGestureEvents()) - [rwhv_cocoa_ beginGestureWithEvent:pinchBeginEvent]; [rwhv_cocoa_ magnifyWithEvent:pinchBeginEvent]; } void SendEndPinchEvent() { NSEvent* pinchEndEvent = MockPinchEvent(NSEventPhaseEnded, 0); [rwhv_cocoa_ magnifyWithEvent:pinchEndEvent]; - if (ShouldSendGestureEvents()) - [rwhv_cocoa_ endGestureWithEvent:pinchEndEvent]; } const bool async_events_enabled_;
diff --git a/content/browser/renderer_host/webmenurunner_mac.mm b/content/browser/renderer_host/webmenurunner_mac.mm index bffbf64f..8e64e61 100644 --- a/content/browser/renderer_host/webmenurunner_mac.mm +++ b/content/browser/renderer_host/webmenurunner_mac.mm
@@ -81,10 +81,8 @@ [attrs setObject:paragraphStyle forKey:NSParagraphStyleAttributeName]; if (item->has_text_direction_override) { - if (@available(macOS 10.11, *)) { - [attrs setObject:@[ @(writingDirection | NSWritingDirectionOverride) ] - forKey:NSWritingDirectionAttributeName]; - } + [attrs setObject:@[ @(writingDirection | NSWritingDirectionOverride) ] + forKey:NSWritingDirectionAttributeName]; } [attrs setObject:[NSFont menuFontOfSize:_fontSize]
diff --git a/content/browser/sandbox_mac_unittest.mm b/content/browser/sandbox_mac_unittest.mm index 78dacfa..ca19f9b 100644 --- a/content/browser/sandbox_mac_unittest.mm +++ b/content/browser/sandbox_mac_unittest.mm
@@ -264,10 +264,10 @@ MULTIPROCESS_TEST_MAIN(BuiltinAvailable) { CheckCreateSeatbeltServer(); - if (__builtin_available(macOS 10.10, *)) { + if (__builtin_available(macOS 10.11, *)) { // Can't negate a __builtin_available condition. But success! } else { - return 10; + return 11; } if (base::mac::IsAtLeastOS10_13()) {
diff --git a/content/browser/site_per_process_mac_browsertest.mm b/content/browser/site_per_process_mac_browsertest.mm index f657120..ba7e939c3 100644 --- a/content/browser/site_per_process_mac_browsertest.mm +++ b/content/browser/site_per_process_mac_browsertest.mm
@@ -7,7 +7,6 @@ #include <Cocoa/Cocoa.h> #include "base/bind.h" -#include "base/mac/mac_util.h" #include "content/browser/renderer_host/render_widget_host_input_event_router.h" #include "content/browser/renderer_host/render_widget_host_view_mac.h" #include "content/public/browser/browser_task_traits.h" @@ -252,14 +251,6 @@ return event; } -bool ShouldSendGestureEvents() { -#if defined(MAC_OS_X_VERSION_10_11) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 - return base::mac::IsAtMostOS10_10(); -#endif - return true; -} - void SendMacTouchpadPinchSequenceWithExpectedTarget( RenderWidgetHostViewBase* root_view, const gfx::Point& gesture_point, @@ -271,8 +262,6 @@ NSEvent* pinchBeginEvent = MockGestureEvent(NSEventTypeMagnify, 0, gesture_point.x(), gesture_point.y(), NSEventPhaseBegan); - if (ShouldSendGestureEvents()) - [cocoa_view beginGestureWithEvent:pinchBeginEvent]; [cocoa_view magnifyWithEvent:pinchBeginEvent]; // We don't check the gesture target yet, since on mac the GesturePinchBegin // isn't sent until the first PinchUpdate. @@ -290,8 +279,6 @@ MockGestureEvent(NSEventTypeMagnify, 0, gesture_point.x(), gesture_point.y(), NSEventPhaseEnded); [cocoa_view magnifyWithEvent:pinchEndEvent]; - if (ShouldSendGestureEvents()) - [cocoa_view endGestureWithEvent:pinchEndEvent]; EXPECT_EQ(nullptr, router_touchpad_gesture_target); }
diff --git a/content/browser/sms/sms_browsertest.cc b/content/browser/sms/sms_browsertest.cc index 7643617..ef0b3e8 100644 --- a/content/browser/sms/sms_browsertest.cc +++ b/content/browser/sms/sms_browsertest.cc
@@ -871,6 +871,37 @@ ExpectOutcomeUKM(url, blink::WebOTPServiceOutcome::kTimeout); } +IN_PROC_BROWSER_TEST_F(SmsBrowserTest, RecordBackendNotAvailableAsOutcome) { + GURL url = GetTestUrl(nullptr, "simple_page.html"); + EXPECT_TRUE(NavigateToURL(shell(), url)); + + auto provider = std::make_unique<MockSmsProvider>(); + MockSmsProvider* mock_provider_ptr = provider.get(); + BrowserMainLoop::GetInstance()->SetSmsProviderForTesting(std::move(provider)); + + shell()->web_contents()->SetDelegate(&delegate_); + + EXPECT_CALL(*mock_provider_ptr, Retrieve(_)) + .WillOnce(Invoke([&mock_provider_ptr]() { + mock_provider_ptr->NotifyFailure(FailureType::kBackendNotAvailable); + })); + + base::RunLoop ukm_loop; + + // Wait for UKM to be recorded to avoid race condition between outcome + // capture and evaluation. + ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, + ukm_loop.QuitClosure()); + + EXPECT_TRUE(ExecJs(shell(), R"( + navigator.credentials.get({otp: {transport: ["sms"]}}); + )")); + + ukm_loop.Run(); + + ExpectOutcomeUKM(url, blink::WebOTPServiceOutcome::kBackendNotAvailable); +} + IN_PROC_BROWSER_TEST_F(SmsBrowserTest, NotRecordFailureForMultiplePendingOrigins) { auto provider = std::make_unique<MockSmsProvider>();
diff --git a/content/browser/theme_helper_mac.mm b/content/browser/theme_helper_mac.mm index ee1f314..fd8671a 100644 --- a/content/browser/theme_helper_mac.mm +++ b/content/browser/theme_helper_mac.mm
@@ -126,36 +126,6 @@ alpha:1.]); } -SkColor MenuBackgroundColor() { - base::scoped_nsobject<NSBitmapImageRep> offscreen_rep( - [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil - pixelsWide:1 - pixelsHigh:1 - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bytesPerRow:4 - bitsPerPixel:32]); - - CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext - graphicsContextWithBitmapImageRep:offscreen_rep] graphicsPort]); - CGRect rect = CGRectMake(0, 0, 1, 1); - HIThemeMenuDrawInfo draw_info; - draw_info.version = 0; - draw_info.menuType = kThemeMenuTypePopUp; - HIThemeDrawMenuBackground(&rect, &draw_info, context, - kHIThemeOrientationInverted); - - NSUInteger pixel[4]; - [offscreen_rep getPixel:pixel atX:0 y:0]; - return NSColorToSkColor([NSColor colorWithDeviceRed:pixel[0] / 255. - green:pixel[1] / 255. - blue:pixel[2] / 255. - alpha:1.]); -} - } // namespace @interface SystemThemeObserver : NSObject { @@ -328,9 +298,6 @@ for (size_t i = 0; i < blink::kMacSystemColorIDCount; ++i) { blink::MacSystemColorID color_id = static_cast<blink::MacSystemColorID>(i); switch (color_id) { - case blink::MacSystemColorID::kAlternateSelectedControl: - values[i] = NSColorToSkColor([NSColor alternateSelectedControlColor]); - break; case blink::MacSystemColorID::kControlAccentBlueColor: { NSColor* color = [NSColor colorWithCatalogName:@"System" @@ -353,69 +320,15 @@ values[i] = NSColorToSkColor([NSColor keyboardFocusIndicatorColor]); } break; - case blink::MacSystemColorID::kControlBackground: - values[i] = NSColorToSkColor([NSColor controlBackgroundColor]); - break; - case blink::MacSystemColorID::kControlDarkShadow: - values[i] = NSColorToSkColor([NSColor controlDarkShadowColor]); - break; - case blink::MacSystemColorID::kControlHighlight: - values[i] = NSColorToSkColor([NSColor controlHighlightColor]); - break; - case blink::MacSystemColorID::kControlLightHighlight: - values[i] = NSColorToSkColor([NSColor controlLightHighlightColor]); - break; - case blink::MacSystemColorID::kControlShadow: - values[i] = NSColorToSkColor([NSColor controlShadowColor]); - break; - case blink::MacSystemColorID::kControlText: - values[i] = NSColorToSkColor([NSColor controlTextColor]); - break; - case blink::MacSystemColorID::kDisabledControlText: - values[i] = NSColorToSkColor([NSColor disabledControlTextColor]); - break; - case blink::MacSystemColorID::kHeader: - values[i] = NSColorToSkColor([NSColor headerColor]); - break; - case blink::MacSystemColorID::kHighlight: - values[i] = NSColorToSkColor([NSColor highlightColor]); - break; case blink::MacSystemColorID::kKeyboardFocusIndicator: values[i] = NSColorToSkColor([NSColor keyboardFocusIndicatorColor]); break; - case blink::MacSystemColorID::kMenuBackground: - values[i] = MenuBackgroundColor(); - break; - case blink::MacSystemColorID::kScrollBar: - values[i] = NSColorToSkColor([NSColor scrollBarColor]); - break; case blink::MacSystemColorID::kSecondarySelectedControl: values[i] = NSColorToSkColor([NSColor secondarySelectedControlColor]); break; - case blink::MacSystemColorID::kSelectedMenuItemText: - values[i] = NSColorToSkColor([NSColor selectedMenuItemTextColor]); - break; - case blink::MacSystemColorID::kSelectedText: - values[i] = NSColorToSkColor([NSColor selectedTextColor]); - break; case blink::MacSystemColorID::kSelectedTextBackground: values[i] = NSColorToSkColor([NSColor selectedTextBackgroundColor]); break; - case blink::MacSystemColorID::kShadow: - values[i] = NSColorToSkColor([NSColor shadowColor]); - break; - case blink::MacSystemColorID::kText: - values[i] = NSColorToSkColor([NSColor textColor]); - break; - case blink::MacSystemColorID::kWindowBackground: - values[i] = NSColorToSkColor([NSColor windowBackgroundColor]); - break; - case blink::MacSystemColorID::kWindowFrame: - values[i] = NSColorToSkColor([NSColor windowFrameColor]); - break; - case blink::MacSystemColorID::kWindowFrameText: - values[i] = NSColorToSkColor([NSColor windowFrameTextColor]); - break; case blink::MacSystemColorID::kCount: NOTREACHED(); break;
diff --git a/content/common/frame.mojom b/content/common/frame.mojom index 8c41fa66..e959809 100644 --- a/content/common/frame.mojom +++ b/content/common/frame.mojom
@@ -89,13 +89,6 @@ => (mojo_base.mojom.String16 text, mojo_base.mojom.String16 html, gfx.mojom.Rect clip_rect); - // Notifies the renderer whether hiding/showing the browser controls is - // enabled, what the current state should be, and whether or not to - // animate to the proper state. - UpdateBrowserControlsState(cc.mojom.BrowserControlsState constraints, - cc.mojom.BrowserControlsState current, - bool animate); - // Requests a one-time snapshot of the accessibility tree without enabling // accessibility if it wasn't already enabled. // See ui/accessibility/ax_mode.h for valid values of |ax_mode|.
diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn index 21ffa6c..090eeadd 100644 --- a/content/gpu/BUILD.gn +++ b/content/gpu/BUILD.gn
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chromeos/ui_mode.gni") import("//build/config/ui.gni") import("//gpu/vulkan/features.gni") import("//media/media_options.gni") @@ -48,6 +49,8 @@ deps = [ "//base", "//base/third_party/dynamic_annotations", + "//build:branding_buildflags", + "//build:chromeos_buildflags", "//components/viz/service", "//content:export", "//content/child", @@ -72,8 +75,6 @@ "//sandbox/policy:chromecast_sandbox_allowlist_buildflags", "//services/service_manager/public/cpp", "//services/service_manager/public/mojom", - "//services/shape_detection:lib", - "//services/shape_detection/public/mojom", "//services/tracing/public/cpp", "//services/viz/privileged/mojom", "//skia", @@ -84,6 +85,13 @@ "//ui/latency/ipc", ] + if (!is_ash || !is_chrome_branded) { + deps += [ + "//services/shape_detection:lib", + "//services/shape_detection/public/mojom", + ] + } + if (is_linux || is_chromeos) { sources += [ "gpu_sandbox_hook_linux.cc",
diff --git a/content/gpu/gpu_child_thread_receiver_bindings.cc b/content/gpu/gpu_child_thread_receiver_bindings.cc index 5248ec8..9e4175b 100644 --- a/content/gpu/gpu_child_thread_receiver_bindings.cc +++ b/content/gpu/gpu_child_thread_receiver_bindings.cc
@@ -7,9 +7,14 @@ #include "content/gpu/gpu_child_thread.h" #include "base/no_destructor.h" +#include "build/branding_buildflags.h" +#include "build/chromeos_buildflags.h" #include "media/mojo/buildflags.h" -#include "services/shape_detection/public/mojom/shape_detection_service.mojom.h" -#include "services/shape_detection/shape_detection_service.h" + +#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) || !BUILDFLAG(IS_ASH) +#include "services/shape_detection/public/mojom/shape_detection_service.mojom.h" // nogncheck +#include "services/shape_detection/shape_detection_service.h" // nogncheck +#endif #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) #include "content/gpu/gpu_service_factory.h" @@ -25,12 +30,14 @@ return; } +#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) || !BUILDFLAG(IS_ASH) if (auto shape_detection_receiver = receiver.As<shape_detection::mojom::ShapeDetectionService>()) { static base::NoDestructor<shape_detection::ShapeDetectionService> service{ std::move(shape_detection_receiver)}; return; } +#endif #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) if (auto r = receiver.As<media::mojom::MediaService>()) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java index 025c76a..6d2d0b2 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
@@ -1369,8 +1369,10 @@ } @CalledByNative - private void addAccessibilityNodeInfoChild(AccessibilityNodeInfo node, int childId) { - node.addChild(mView, childId); + private void addAccessibilityNodeInfoChildren(AccessibilityNodeInfo node, int[] childIds) { + for (int childId : childIds) { + node.addChild(mView, childId); + } } @CalledByNative @@ -1535,7 +1537,9 @@ @CalledByNative private void setAccessibilityNodeInfoBaseAttributes(AccessibilityNodeInfo node, boolean isRoot, - String className, String role, String roleDescription, String hint, String targetUrl) { + String className, String role, String roleDescription, String hint, String targetUrl, + boolean canOpenPopup, boolean dismissable, boolean multiLine, int inputType, + int liveRegion, String errorMessage) { node.setClassName(className); Bundle bundle = node.getExtras(); @@ -1549,6 +1553,22 @@ bundle.putCharSequence( "ACTION_ARGUMENT_HTML_ELEMENT_STRING_VALUES", mSupportedHtmlElementTypes); } + + node.setCanOpenPopup(canOpenPopup); + node.setDismissable(dismissable); + node.setMultiLine(multiLine); + node.setInputType(inputType); + + // Deliberately don't call setLiveRegion because TalkBack speaks + // the entire region anytime it changes. Instead Chrome will + // call announceLiveRegionText() only on the nodes that change. + // node.setLiveRegion(liveRegion); + + // We only apply the |errorMessage| if {@link setAccessibilityNodeInfoBooleanAttributes} + // set |contentInvalid| to true based on throttle delay. + if (node.isContentInvalid()) { + node.setError(errorMessage); + } } @SuppressLint("NewApi") @@ -1697,27 +1717,6 @@ } @CalledByNative - protected void setAccessibilityNodeInfoAttributes(AccessibilityNodeInfo node, - boolean canOpenPopup, boolean dismissable, boolean multiLine, int inputType, - int liveRegion, String errorMessage) { - node.setCanOpenPopup(canOpenPopup); - node.setDismissable(dismissable); - node.setMultiLine(multiLine); - node.setInputType(inputType); - - // Deliberately don't call setLiveRegion because TalkBack speaks - // the entire region anytime it changes. Instead Chrome will - // call announceLiveRegionText() only on the nodes that change. - // node.setLiveRegion(liveRegion); - - // We only apply the |errorMessage| if {@link setAccessibilityNodeInfoBooleanAttributes} - // set |contentInvalid| to true based on throttle delay. - if (node.isContentInvalid()) { - node.setError(errorMessage); - } - } - - @CalledByNative protected void setAccessibilityNodeInfoCollectionInfo( AccessibilityNodeInfo node, int rowCount, int columnCount, boolean hierarchical) { node.setCollectionInfo( @@ -1762,33 +1761,21 @@ } @CalledByNative - private void setAccessibilityEventBooleanAttributes(AccessibilityEvent event, boolean checked, - boolean enabled, boolean password, boolean scrollable) { + private void setAccessibilityEventBaseAttributes(AccessibilityEvent event, boolean checked, + boolean enabled, boolean password, boolean scrollable, int currentItemIndex, + int itemCount, int scrollX, int scrollY, int maxScrollX, int maxScrollY, + String className) { event.setChecked(checked); event.setEnabled(enabled); event.setPassword(password); event.setScrollable(scrollable); - } - - @CalledByNative - private void setAccessibilityEventClassName(AccessibilityEvent event, String className) { - event.setClassName(className); - } - - @CalledByNative - private void setAccessibilityEventListAttributes( - AccessibilityEvent event, int currentItemIndex, int itemCount) { event.setCurrentItemIndex(currentItemIndex); event.setItemCount(itemCount); - } - - @CalledByNative - private void setAccessibilityEventScrollAttributes( - AccessibilityEvent event, int scrollX, int scrollY, int maxScrollX, int maxScrollY) { event.setScrollX(scrollX); event.setScrollY(scrollY); event.setMaxScrollX(maxScrollX); event.setMaxScrollY(maxScrollY); + event.setClassName(className); } @CalledByNative @@ -1810,10 +1797,37 @@ event.getText().add(text); } + boolean isCompatAutofillOnlyPossibleAccessibilityConsumer() { + // Compatibility Autofill is only available on Android P+. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { + return false; + } + // The Android Autofill CompatibilityBridge, which is responsible for translating + // Accessibility information to Autofill events, directly hooks into the + // AccessibilityManager via an AccessibilityPolicy rather than by running an + // AccessibilityService. We can thus check whether it is the only consumer of Accessibility + // information by reading the names of active accessibility services from settings. + // + // Note that the CompatibilityBridge makes getEnabledAccessibilityServicesList return a mock + // service to indicate its presence. It is thus easier to read the setting directly than + // to filter out this service from the returned list. Furthermore, since Accessibility is + // only initialized if there is at least one actual service or if Autofill is enabled, + // there is no need to check that Autofill is enabled here. + // + // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/autofill/AutofillManager.java;l=2817;drc=dd7d52f9632a0dbb8b14b69520c5ea31e0b3b4a2 + String activeServices = Settings.Secure.getString( + mContext.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + if (activeServices != null && !activeServices.isEmpty()) { + return false; + } + return true; + } + /** - * On Android O and higher, we should respect whatever is displayed - * in a password box and report that via accessibility APIs, whether - * that's the unobscured password, or all dots. + * On Android O and higher, we should respect whatever is displayed in a password box and + * report that via accessibility APIs, whether that's the unobscured password, or all dots. + * However, we deviate from this rule if the only consumer of accessibility information is + * Autofill in order to allow third-party Autofill services to save the real, unmasked password. * * Previous to O, shouldExposePasswordText() returns a system setting * that determines whether we should return the unobscured password or all @@ -1821,14 +1835,24 @@ */ @CalledByNative boolean shouldRespectDisplayedPasswordText() { + if (isCompatAutofillOnlyPossibleAccessibilityConsumer()) { + return false; + } return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; } /** - * Only relevant prior to Android O, see shouldRespectDisplayedPasswordText. + * Only relevant prior to Android O, see shouldRespectDisplayedPasswordText, unless the only + * Accessibility consumer is compatibility Autofill. */ @CalledByNative boolean shouldExposePasswordText() { + // Should always expose the actual password text to Autofill so that third-party Autofill + // services can save it rather than obtain only the masking characters. + if (isCompatAutofillOnlyPossibleAccessibilityConsumer()) { + return true; + } + ContentResolver contentResolver = mContext.getContentResolver(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
diff --git a/content/public/browser/download_manager_delegate.cc b/content/public/browser/download_manager_delegate.cc index 22aff7a..065441e 100644 --- a/content/public/browser/download_manager_delegate.cc +++ b/content/public/browser/download_manager_delegate.cc
@@ -106,4 +106,10 @@ DownloadManagerDelegate::~DownloadManagerDelegate() {} +std::unique_ptr<download::DownloadItemRenameHandler> +DownloadManagerDelegate::GetRenameHandlerForDownload( + download::DownloadItem* download_item) { + return nullptr; +} + } // namespace content
diff --git a/content/public/browser/download_manager_delegate.h b/content/public/browser/download_manager_delegate.h index 100a2e4..4e451a3c 100644 --- a/content/public/browser/download_manager_delegate.h +++ b/content/public/browser/download_manager_delegate.h
@@ -13,6 +13,7 @@ #include "base/time/time.h" #include "components/download/public/common/download_danger_type.h" #include "components/download/public/common/download_item.h" +#include "components/download/public/common/download_item_rename_handler.h" #include "components/download/public/common/download_schedule.h" #include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/quarantine_connection.h" @@ -212,6 +213,13 @@ virtual download::QuarantineConnectionCallback GetQuarantineConnectionCallback(); + // Gets a handler to perform the rename for a download item. If no special + // rename handling is required, dont override this, as the default + // implementation returns null, which indicates that the default rename + // handling should be performed. + virtual std::unique_ptr<download::DownloadItemRenameHandler> + GetRenameHandlerForDownload(download::DownloadItem* download_item); + protected: virtual ~DownloadManagerDelegate(); };
diff --git a/content/public/test/fake_download_item.cc b/content/public/test/fake_download_item.cc index fa34b78..6d96449 100644 --- a/content/public/test/fake_download_item.cc +++ b/content/public/test/fake_download_item.cc
@@ -417,6 +417,10 @@ return nullptr; } +download::DownloadItemRenameHandler* FakeDownloadItem::GetRenameHandler() { + return nullptr; +} + bool FakeDownloadItem::IsDangerous() const { NOTREACHED(); return false;
diff --git a/content/public/test/fake_download_item.h b/content/public/test/fake_download_item.h index d2458a3..ade0e26 100644 --- a/content/public/test/fake_download_item.h +++ b/content/public/test/fake_download_item.h
@@ -89,6 +89,7 @@ const std::string& GetHash() const override; void DeleteFile(base::OnceCallback<void(bool)> callback) override; download::DownloadFile* GetDownloadFile() override; + download::DownloadItemRenameHandler* GetRenameHandler() override; bool IsDangerous() const override; bool IsMixedContent() const override; download::DownloadDangerType GetDangerType() const override;
diff --git a/content/renderer/dom_serializer_browsertest.cc b/content/renderer/dom_serializer_browsertest.cc index f6c69fc..0217abc 100644 --- a/content/renderer/dom_serializer_browsertest.cc +++ b/content/renderer/dom_serializer_browsertest.cc
@@ -86,11 +86,8 @@ } void SetUpOnMainThread() override { - render_view_routing_id_ = shell() - ->web_contents() - ->GetMainFrame() - ->GetRenderViewHost() - ->GetRoutingID(); + main_frame_token_ = + shell()->web_contents()->GetMainFrame()->GetFrameToken(); } // DomSerializerDelegate. @@ -107,16 +104,10 @@ serialization_reported_end_of_data_ = true; } - RenderView* GetRenderView() { - return RenderView::FromRoutingID(render_view_routing_id_); - } - - WebView* GetWebView() { - return GetRenderView()->GetWebView(); - } + WebView* GetWebView() { return GetMainFrame()->View(); } WebLocalFrame* GetMainFrame() { - return GetRenderView()->GetMainRenderFrame()->GetWebFrame(); + return WebFrame::FromFrameToken(main_frame_token_)->ToWebLocalFrame(); } WebLocalFrame* FindSubFrameByURL(const GURL& url) { @@ -139,11 +130,8 @@ navigation_observer.Wait(); // After navigations, the RenderView for the new document might be a new // one. - render_view_routing_id_ = shell() - ->web_contents() - ->GetMainFrame() - ->GetRenderViewHost() - ->GetRoutingID(); + main_frame_token_ = + shell()->web_contents()->GetMainFrame()->GetFrameToken(); } class SingleLinkRewritingDelegate @@ -198,7 +186,7 @@ private: // Written only on the browser main UI thread. Read only from the in-process // renderer thread via posted tasks: - int32_t render_view_routing_id_ = -1; + base::UnguessableToken main_frame_token_; std::string serialized_contents_; bool serialization_reported_end_of_data_ = false; };
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc index 1e3f2e7d..14eadec 100644 --- a/content/renderer/loader/web_url_loader_impl.cc +++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -1010,7 +1010,8 @@ if (status.trust_token_operation_status != network::mojom::TrustTokenOperationStatus::kOk) { - DCHECK(status.error_code == net::ERR_TRUST_TOKEN_OPERATION_CACHE_HIT || + DCHECK(status.error_code == + net::ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST || status.error_code == net::ERR_TRUST_TOKEN_OPERATION_FAILED) << "Unexpected error code on Trust Token operation failure (or cache " "hit): "
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index de76a54..f1df03c2 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2635,22 +2635,6 @@ SwapInInternal(); } -void RenderFrameImpl::UpdateBrowserControlsState( - cc::BrowserControlsState constraints, - cc::BrowserControlsState current, - bool animate) { - TRACE_EVENT2("renderer", "RenderFrameImpl::UpdateBrowserControlsState", - "Constraint", static_cast<int>(constraints), "Current", - static_cast<int>(current)); - TRACE_EVENT_INSTANT1("renderer", "is_animated", TRACE_EVENT_SCOPE_THREAD, - "animated", animate); - - DCHECK(is_main_frame_); - - cc::LayerTreeHost* host = render_widget_->layer_tree_host(); - host->UpdateBrowserControlsState(constraints, current, animate); -} - void RenderFrameImpl::SnapshotAccessibilityTree( uint32_t ax_mode, SnapshotAccessibilityTreeCallback callback) {
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 0798db2..3a72bb5 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -436,9 +436,6 @@ GetCanonicalUrlForSharingCallback callback) override; void BlockRequests() override; void ResumeBlockedRequests() override; - void UpdateBrowserControlsState(cc::BrowserControlsState constraints, - cc::BrowserControlsState current, - bool animate) override; void SnapshotAccessibilityTree( uint32_t ax_mode, SnapshotAccessibilityTreeCallback callback) override;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 7f890b6..0b36869c 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -13,7 +13,6 @@ #include "base/callback_helpers.h" #include "base/logging.h" #include "base/macros.h" -#include "cc/trees/layer_tree_host.h" #include "cc/trees/ukm_manager.h" #include "content/renderer/render_thread_impl.h" #include "ppapi/buildflags/buildflags.h" @@ -76,12 +75,11 @@ void RenderWidget::InitCompositing(const blink::ScreenInfo& screen_info) { TRACE_EVENT0("blink", "RenderWidget::InitializeLayerTreeView"); - layer_tree_host_ = webwidget_->InitializeCompositing( + webwidget_->InitializeCompositing( compositor_deps_->GetWebMainThreadScheduler(), compositor_deps_->GetTaskGraphRunner(), screen_info, compositor_deps_->CreateUkmRecorderFactory(), /*settings=*/nullptr); - DCHECK(layer_tree_host_); } void RenderWidget::Close(std::unique_ptr<RenderWidget> widget) { @@ -94,11 +92,6 @@ webwidget_->Close(); webwidget_ = nullptr; - - // |layer_tree_host_| is valid only when |webwidget_| is valid. Close may - // use the WebWidgetClient while unloading the Frame so we clear this - // after. - layer_tree_host_ = nullptr; } } // namespace content
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index 4c95a54..34c38e3 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h
@@ -106,8 +106,6 @@ // passed into this object to asynchronously delete itself. void CloseForFrame(std::unique_ptr<RenderWidget> widget); - cc::LayerTreeHost* layer_tree_host() { return layer_tree_host_; } - private: // Destroy the RenderWidget. The |widget| is the owning pointer of |this|. void Close(std::unique_ptr<RenderWidget> widget); @@ -128,9 +126,6 @@ // Becomes null once close is initiated on the RenderWidget. blink::WebWidget* webwidget_ = nullptr; - // This is valid while |webwidget_| is valid. - cc::LayerTreeHost* layer_tree_host_ = nullptr; - // True once Close() is called, during the self-destruction process, and to // verify destruction always goes through Close(). bool closing_ = false;
diff --git a/content/renderer/theme_helper_mac.mm b/content/renderer/theme_helper_mac.mm index 1db1297..c15f3a6 100644 --- a/content/renderer/theme_helper_mac.mm +++ b/content/renderer/theme_helper_mac.mm
@@ -21,7 +21,7 @@ // Register the defaults in the NSArgumentDomain, which is considered // volatile. Registering in the normal application domain fails from within - // the sandbox on 10.10+. + // the sandbox. [defaults removeVolatileDomainForName:NSArgumentDomain]; NSDictionary* domain_values = @{
diff --git a/content/shell/fuchsia/content_shell.cmx b/content/shell/fuchsia/content_shell.cmx index 52b93fa..083f4ea 100644 --- a/content/shell/fuchsia/content_shell.cmx +++ b/content/shell/fuchsia/content_shell.cmx
@@ -19,7 +19,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Launcher", @@ -31,4 +31,4 @@ "fuchsia.vulkan.loader.Loader" ] } -} \ No newline at end of file +}
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 3f001ba8..3fdc206 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -387,6 +387,7 @@ "//third_party/blink/public:blink", "//third_party/blink/public:test_support", "//third_party/blink/public/strings:strings_grit", + "//ui/gl:test_support", ] deps = [ @@ -459,7 +460,6 @@ "//ui/events/blink", "//ui/gfx:test_support", "//ui/gl", - "//ui/gl:test_support", "//ui/native_theme", "//ui/resources", "//ui/shell_dialogs:shell_dialogs",
diff --git a/content/test/content_browser_test_test.cc b/content/test/content_browser_test_test.cc index 36a4f825..24f2cc4 100644 --- a/content/test/content_browser_test_test.cc +++ b/content/test/content_browser_test_test.cc
@@ -145,9 +145,16 @@ } } +#ifdef __clang__ +// Don't optimize this out of stack traces in ThinLTO builds. +#pragma clang optimize off +#endif IN_PROC_BROWSER_TEST_F(ContentBrowserTest, MANUAL_BrowserCrash) { CHECK(false); } +#ifdef __clang__ +#pragma clang optimize on +#endif // Tests that browser tests print the callstack on asserts. // Disabled on Windows crbug.com/1034784
diff --git a/content/test/data/do-not-treat-as-public-address.html b/content/test/data/do-not-treat-as-public-address.html deleted file mode 100644 index 02fe90d..0000000 --- a/content/test/data/do-not-treat-as-public-address.html +++ /dev/null
@@ -1,42 +0,0 @@ -<!DOCTYPE html> -<head><title>WAITING</title></head> -<body> - <script> - let total_loads = 0; - function loaded() { - total_loads++; - if (total_loads == 5) - document.title = "LOADED"; - } - - let b = new Blob(["Blob!"], {type: "text/html"}); - let i = document.createElement('iframe'); - i.src = URL.createObjectURL(b); - i.onload = loaded; - document.body.appendChild(i); - - window.webkitRequestFileSystem( - window.TEMPORARY, - 1024*1024, - fs => { - fs.root.getFile('hello.html', {create:true}, file => { - file.createWriter(writer => { - writer.onwriteend = _ => { - let i = document.createElement('iframe'); - i.src = file.toURL(); - i.onload = loaded; - document.body.appendChild(i); - }; - - let b = new Blob(["Filesystem!"], {type: "text/html"}); - writer.write(b); - }); - }, - _ = {}); - }, - _ => {}); - </script> - <iframe id="data" src="data:text/html,Data!" onload="loaded()"></iframe> - <iframe id="about-blank" src="about:blank" onload="loaded()"></iframe> - <iframe id="srcdoc" srcdoc="Srcdoc!" onload="loaded()"></iframe> -</body>
diff --git a/content/test/data/treat-as-public-address.html b/content/test/data/treat-as-public-address.html deleted file mode 100644 index 02fe90d..0000000 --- a/content/test/data/treat-as-public-address.html +++ /dev/null
@@ -1,42 +0,0 @@ -<!DOCTYPE html> -<head><title>WAITING</title></head> -<body> - <script> - let total_loads = 0; - function loaded() { - total_loads++; - if (total_loads == 5) - document.title = "LOADED"; - } - - let b = new Blob(["Blob!"], {type: "text/html"}); - let i = document.createElement('iframe'); - i.src = URL.createObjectURL(b); - i.onload = loaded; - document.body.appendChild(i); - - window.webkitRequestFileSystem( - window.TEMPORARY, - 1024*1024, - fs => { - fs.root.getFile('hello.html', {create:true}, file => { - file.createWriter(writer => { - writer.onwriteend = _ => { - let i = document.createElement('iframe'); - i.src = file.toURL(); - i.onload = loaded; - document.body.appendChild(i); - }; - - let b = new Blob(["Filesystem!"], {type: "text/html"}); - writer.write(b); - }); - }, - _ = {}); - }, - _ => {}); - </script> - <iframe id="data" src="data:text/html,Data!" onload="loaded()"></iframe> - <iframe id="about-blank" src="about:blank" onload="loaded()"></iframe> - <iframe id="srcdoc" srcdoc="Srcdoc!" onload="loaded()"></iframe> -</body>
diff --git a/content/test/data/treat-as-public-address.html.mock-http-headers b/content/test/data/treat-as-public-address.html.mock-http-headers deleted file mode 100644 index 374554ae1..0000000 --- a/content/test/data/treat-as-public-address.html.mock-http-headers +++ /dev/null
@@ -1,2 +0,0 @@ -HTTP/1.1 200 OK -Content-Security-Policy: treat-as-public-address
diff --git a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt index e939b2a..b2be3f1d 100644 --- a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/depth_capture_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/depth_capture_expectations.txt index 02896b5..75a2d32d 100644 --- a/content/test/gpu/gpu_tests/test_expectations/depth_capture_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/depth_capture_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt index b93cb0d..fdd31d9 100644 --- a/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/gpu_process_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/hardware_accelerated_feature_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/hardware_accelerated_feature_expectations.txt index 7c3ec5f..7b18106 100644 --- a/content/test/gpu/gpu_tests/test_expectations/hardware_accelerated_feature_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/hardware_accelerated_feature_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/info_collection_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/info_collection_expectations.txt index d4eac93..bfd4a22 100644 --- a/content/test/gpu/gpu_tests/test_expectations/info_collection_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/info_collection_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/maps_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/maps_expectations.txt index 28770c7..3f66d0b7 100644 --- a/content/test/gpu/gpu_tests/test_expectations/maps_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/maps_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt index 02639c9..aecbdbf 100644 --- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/power_measurement_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/power_measurement_expectations.txt index 0fe8735..d5dc090 100644 --- a/content/test/gpu/gpu_tests/test_expectations/power_measurement_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/power_measurement_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/screenshot_sync_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/screenshot_sync_expectations.txt index 9aa35cc1..4677533 100644 --- a/content/test/gpu/gpu_tests/test_expectations/screenshot_sync_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/screenshot_sync_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt index 62f7e14..97ea658 100644 --- a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z) @@ -182,9 +182,6 @@ crbug.com/1119491 [ win intel ] OverlayModeTraceTest_DirectComposition_Video_MP4_BGRA [ Skip ] crbug.com/1119491 [ win intel ] OverlayModeTraceTest_DirectComposition_Video_VP9_BGRA [ Skip ] -# YUY2 swap chains don't work on AMD. -crbug.com/1132381 [ win amd-0x699f ] VideoPathTraceTest_DirectComposition_Video_MP4_YUY2 [ Failure ] -crbug.com/1132381 [ win amd-0x699f ] VideoPathTraceTest_DirectComposition_Video_VP9_YUY2 [ Failure ] # Failed to create YUY2 swap chain on Win10 AMD RX 5500 XT crbug.com/1151767 [ win10 amd-0x7340 ] VideoPathTraceTest_DirectComposition_Video_MP4_YUY2 [ Failure ] crbug.com/1151767 [ win10 amd-0x7340 ] VideoPathTraceTest_DirectComposition_Video_VP9_YUY2 [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt index b4b5b319..e9af929 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z) @@ -334,9 +334,6 @@ # be coming up correctly. crbug.com/687374 [ win amd-0x6613 ] deqp/functional/gles3/multisample.html [ RetryOnFailure ] -# Failing on AMD RX 550 -crbug.com/angleproject/3354 [ win amd-0x699f ] deqp/functional/gles3/fborender/shared_colorbuffer_02.html [ Skip ] - # Failing on AMD RX 5500 XT crbug.com/1152597 [ win amd-0x7340 angle-d3d11 ] conformance/renderbuffers/framebuffer-state-restoration.html [ Failure ] crbug.com/1152599 [ win amd-0x7340 angle-d3d11 ] conformance/rendering/polygon-offset.html [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt index d818f36..dc6d03e 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -21,7 +21,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/gpu/validate_tag_consistency.py b/content/test/gpu/validate_tag_consistency.py index 59487f49..a642c9f 100755 --- a/content/test/gpu/validate_tag_consistency.py +++ b/content/test/gpu/validate_tag_consistency.py
@@ -32,7 +32,7 @@ # debug debug-x64 # release release-x64 ] # GPU -# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x699f amd-0x7340 +# tags: [ amd amd-0x6613 amd-0x679e amd-0x6821 amd-0x7340 # apple apple-apple-a12z # arm # google google-0xffff google-angle-(metal-renderer:-apple-a12z)
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h index 11c5ec41..86d9438a 100644 --- a/content/test/test_render_view_host.h +++ b/content/test/test_render_view_host.h
@@ -89,7 +89,6 @@ uint32_t GetCaptureSequenceNumber() const override; void InitAsPopup(RenderWidgetHostView* parent_host_view, const gfx::Rect& bounds) override {} - void InitAsFullscreen(RenderWidgetHostView* reference_host_view) override {} void Focus() override {} void SetIsLoading(bool is_loading) override {} void UpdateCursor(const WebCursor& cursor) override;
diff --git a/content/utility/BUILD.gn b/content/utility/BUILD.gn index dade09e9..7c333c6 100644 --- a/content/utility/BUILD.gn +++ b/content/utility/BUILD.gn
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chromeos/ui_mode.gni") import("//device/vr/buildflags/buildflags.gni") import("//media/media_options.gni") @@ -34,6 +35,8 @@ deps = [ "//base", + "//build:branding_buildflags", + "//build:chromeos_buildflags", "//components/services/storage", "//components/services/storage/public/mojom", "//content:export", @@ -78,6 +81,13 @@ ] } + if (is_ash && is_chrome_branded) { + deps += [ + "//services/shape_detection:lib", + "//services/shape_detection/public/mojom", + ] + } + # PAC execution is done in process on Android. if (!is_android) { deps += [ "//services/proxy_resolver:lib" ]
diff --git a/content/utility/services.cc b/content/utility/services.cc index 3d10eb1..288afc5 100644 --- a/content/utility/services.cc +++ b/content/utility/services.cc
@@ -9,7 +9,9 @@ #include "base/command_line.h" #include "base/no_destructor.h" #include "base/threading/thread_task_runner_handle.h" +#include "build/branding_buildflags.h" #include "build/build_config.h" +#include "build/chromeos_buildflags.h" #include "components/services/storage/public/mojom/storage_service.mojom.h" #include "components/services/storage/storage_service_impl.h" #include "content/child/child_process.h" @@ -61,6 +63,11 @@ #include "sandbox/policy/sandbox_type.h" #endif // defined(OS_LINUX) || defined(OS_CHROMEOS) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && BUILDFLAG(IS_ASH) +#include "services/shape_detection/public/mojom/shape_detection_service.mojom.h" // nogncheck +#include "services/shape_detection/shape_detection_service.h" // nogncheck +#endif + namespace content { namespace { @@ -168,6 +175,15 @@ return audio::CreateStandaloneService(std::move(receiver)); } +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && BUILDFLAG(IS_ASH) +auto RunShapeDetectionService( + mojo::PendingReceiver<shape_detection::mojom::ShapeDetectionService> + receiver) { + return std::make_unique<shape_detection::ShapeDetectionService>( + std::move(receiver)); +} +#endif + #if BUILDFLAG(ENABLE_LIBRARY_CDMS) auto RunCdmService(mojo::PendingReceiver<media::mojom::CdmService> receiver) { return std::make_unique<media::CdmService>( @@ -225,6 +241,10 @@ services.Add(RunTracing); services.Add(RunVideoCapture); +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && BUILDFLAG(IS_ASH) + services.Add(RunShapeDetectionService); +#endif + #if BUILDFLAG(ENABLE_LIBRARY_CDMS) services.Add(RunCdmService); #endif
diff --git a/device/vr/BUILD.gn b/device/vr/BUILD.gn index dc30104..16b26b2 100644 --- a/device/vr/BUILD.gn +++ b/device/vr/BUILD.gn
@@ -358,6 +358,7 @@ generate_jni("jni_headers") { sources = java_sources_needing_jni + split_name = "vr" } android_library("java") {
diff --git a/device/vr/android/arcore/BUILD.gn b/device/vr/android/arcore/BUILD.gn index e733c1c..c2d7326 100644 --- a/device/vr/android/arcore/BUILD.gn +++ b/device/vr/android/arcore/BUILD.gn
@@ -21,8 +21,6 @@ "arcore_anchor_manager.h", "arcore_device.cc", "arcore_device.h", - "arcore_device_provider_factory.cc", - "arcore_device_provider_factory.h", "arcore_gl.cc", "arcore_gl.h", "arcore_gl_thread.cc",
diff --git a/device/vr/android/arcore/arcore_device_provider_factory.cc b/device/vr/android/arcore/arcore_device_provider_factory.cc deleted file mode 100644 index b9440845..0000000 --- a/device/vr/android/arcore/arcore_device_provider_factory.cc +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "device/vr/android/arcore/arcore_device_provider_factory.h" - -#include "base/logging.h" -#include "device/vr/public/cpp/vr_device_provider.h" - -namespace device { - -namespace { -ArCoreDeviceProviderFactory* g_arcore_device_provider_factory = nullptr; -bool create_called = false; -} // namespace - -// static -std::unique_ptr<device::VRDeviceProvider> -ArCoreDeviceProviderFactory::Create() { - DVLOG(2) << __func__; - - create_called = true; - if (!g_arcore_device_provider_factory) - return nullptr; - return g_arcore_device_provider_factory->CreateDeviceProvider(); -} - -// static -void ArCoreDeviceProviderFactory::Install( - std::unique_ptr<ArCoreDeviceProviderFactory> factory) { - DVLOG(2) << __func__; - - DCHECK_NE(g_arcore_device_provider_factory, factory.get()); - if (g_arcore_device_provider_factory) { - delete g_arcore_device_provider_factory; - } else if (create_called) { - // TODO(crbug.com/1050470): Remove this logging after investigation. - // We only hit this code path if "Install" is called for the first time - // after a call to ArCoreDeviceProviderFactory::Create. This indicates that - // we previously did not return an ARCoreDeviceProvider, but the system we - // are on actually *can* support an ARCoreDeviceProvider. - LOG(ERROR) << "AR provider factory installed after create"; - } - - g_arcore_device_provider_factory = factory.release(); -} - -} // namespace device
diff --git a/device/vr/android/arcore/arcore_device_provider_factory.h b/device/vr/android/arcore/arcore_device_provider_factory.h deleted file mode 100644 index 7f68a8e4..0000000 --- a/device/vr/android/arcore/arcore_device_provider_factory.h +++ /dev/null
@@ -1,35 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef DEVICE_VR_ANDROID_ARCORE_ARCORE_DEVICE_PROVIDER_FACTORY_H_ -#define DEVICE_VR_ANDROID_ARCORE_ARCORE_DEVICE_PROVIDER_FACTORY_H_ - -#include <memory> - -#include "base/component_export.h" -#include "base/macros.h" - -namespace device { - -class VRDeviceProvider; - -class COMPONENT_EXPORT(VR_ARCORE) ArCoreDeviceProviderFactory { - public: - static std::unique_ptr<device::VRDeviceProvider> Create(); - static void Install(std::unique_ptr<ArCoreDeviceProviderFactory> factory); - - virtual ~ArCoreDeviceProviderFactory() = default; - - protected: - ArCoreDeviceProviderFactory() = default; - - virtual std::unique_ptr<device::VRDeviceProvider> CreateDeviceProvider() = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(ArCoreDeviceProviderFactory); -}; - -} // namespace device - -#endif // DEVICE_VR_ANDROID_ARCORE_ARCORE_DEVICE_PROVIDER_FACTORY_H_
diff --git a/docs/windows_build_instructions.md b/docs/windows_build_instructions.md index 05fe102f..5a58b355 100644 --- a/docs/windows_build_instructions.md +++ b/docs/windows_build_instructions.md
@@ -17,7 +17,7 @@ * At least 100GB of free disk space on an NTFS-formatted hard drive. FAT32 will not work, as some of the Git packfiles are larger than 4GB. * An appropriate version of Visual Studio, as described below. -* Windows 7 or newer. +* Windows 10 or newer. ## Setting up Windows
diff --git a/extensions/browser/api/app_window/app_window_apitest.cc b/extensions/browser/api/app_window/app_window_apitest.cc index 4bfc235d..41b305c 100644 --- a/extensions/browser/api/app_window/app_window_apitest.cc +++ b/extensions/browser/api/app_window/app_window_apitest.cc
@@ -26,10 +26,6 @@ #include "ui/base/win/shell.h" #endif -#if defined(OS_MAC) -#include "base/mac/mac_util.h" -#endif - namespace extensions { using AppWindowApiTest = PlatformAppBrowserTest; @@ -70,30 +66,18 @@ #endif // defined(OS_LINUX) || defined(OS_CHROMEOS) IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnMinimizedEvent) { -#if defined(OS_MAC) - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582, -#endif EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties", "minimized")) << message_; } IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnMaximizedEvent) { -#if defined(OS_MAC) - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582, -#endif EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties", "maximized")) << message_; } IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnRestoredEvent) { -#if defined(OS_MAC) - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582, -#endif EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties", "restored")) << message_;
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.cc b/extensions/browser/api/declarative_net_request/action_tracker.cc index 5393dbd..521f6c3 100644 --- a/extensions/browser/api/declarative_net_request/action_tracker.cc +++ b/extensions/browser/api/declarative_net_request/action_tracker.cc
@@ -20,6 +20,7 @@ #include "extensions/browser/event_router.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/extensions_browser_client.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" #include "extensions/common/manifest.h" @@ -70,6 +71,24 @@ return g_test_clock ? g_test_clock->Now() : base::Time::Now(); } +bool g_check_tab_id_on_rule_match = true; + +// Returns the tab ID to use for tracking a matched rule. Any ID corresponding +// to a tab that no longer exists will be mapped to the unknown tab ID. This is +// similar to when a tab is destroyed, its matched rules are re-mapped to the +// unknown tab ID. +int GetTabIdForMatchedRule(content::BrowserContext* browser_context, + int request_tab_id) { + if (!g_check_tab_id_on_rule_match) + return request_tab_id; + + DCHECK(ExtensionsBrowserClient::Get()); + return ExtensionsBrowserClient::Get()->IsValidTabId(browser_context, + request_tab_id) + ? request_tab_id + : extension_misc::kUnknownTabId; +} + } // namespace // static @@ -97,13 +116,22 @@ StartTrimRulesTask(); } +void ActionTracker::SetCheckTabIdOnRuleMatchForTest(bool check_tab_id) { + g_check_tab_id_on_rule_match = check_tab_id; +} + void ActionTracker::OnRuleMatched(const RequestAction& request_action, const WebRequestInfo& request_info) { + const int tab_id = + GetTabIdForMatchedRule(browser_context_, request_info.frame_data.tab_id); + + dnr_api::RequestDetails request_details = CreateRequestDetails(request_info); + request_details.tab_id = tab_id; + DispatchOnRuleMatchedDebugIfNeeded(request_action, - CreateRequestDetails(request_info)); + std::move(request_details)); const ExtensionId& extension_id = request_action.extension_id; - const int tab_id = request_info.frame_data.tab_id; const bool should_record_rule = ShouldRecordMatchedRule(browser_context_, extension_id, tab_id);
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.h b/extensions/browser/api/declarative_net_request/action_tracker.h index f2d0161..486d1af 100644 --- a/extensions/browser/api/declarative_net_request/action_tracker.h +++ b/extensions/browser/api/declarative_net_request/action_tracker.h
@@ -56,6 +56,11 @@ void SetTimerForTest( std::unique_ptr<base::RetainingOneShotTimer> injected_trim_rules_timer); + // Disables checking whether a tab ID corresponds to an existing tab when a + // rule is matched. Used for unit tests where WebContents/actual tabs do not + // exist. + void SetCheckTabIdOnRuleMatchForTest(bool check_tab_id); + // Called whenever a request matches with a rule. void OnRuleMatched(const RequestAction& request_action, const WebRequestInfo& request_info);
diff --git a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc index 4cd65fe76..9b7f2a41 100644 --- a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc +++ b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc
@@ -185,8 +185,13 @@ auto* rules_monitor_service = declarative_net_request::RulesMonitorService::Get(browser_context()); DCHECK(rules_monitor_service); - rules_monitor_service->UpdateSessionRules( - extension_id(), std::move(rule_ids_to_remove), std::move(rules_to_add)); + std::string update_error; + if (!rules_monitor_service->UpdateSessionRules( + extension_id(), std::move(rule_ids_to_remove), + std::move(rules_to_add), &update_error)) { + return RespondNow(Error(std::move(update_error))); + } + return RespondNow(NoArguments()); } @@ -303,9 +308,12 @@ DCHECK(extension()); public_ids = GetPublicRulesetIDs(*extension(), *matcher); - // Exclude the dynamic ruleset ID if present, as expected by the API - // function. - base::Erase(public_ids, dnr_api::DYNAMIC_RULESET_ID); + // Exclude any reserved ruleset IDs since they would correspond to + // non-static rulesets. + base::EraseIf(public_ids, [](const std::string& id) { + DCHECK(!id.empty()); + return id[0] == declarative_net_request::kReservedRulesetIDPrefix; + }); } return RespondNow(
diff --git a/extensions/browser/api/declarative_net_request/rules_monitor_service.cc b/extensions/browser/api/declarative_net_request/rules_monitor_service.cc index c14912f..4b51d92 100644 --- a/extensions/browser/api/declarative_net_request/rules_monitor_service.cc +++ b/extensions/browser/api/declarative_net_request/rules_monitor_service.cc
@@ -26,6 +26,7 @@ #include "extensions/browser/api/declarative_net_request/constants.h" #include "extensions/browser/api/declarative_net_request/file_backed_ruleset_source.h" #include "extensions/browser/api/declarative_net_request/file_sequence_helper.h" +#include "extensions/browser/api/declarative_net_request/parse_info.h" #include "extensions/browser/api/declarative_net_request/ruleset_manager.h" #include "extensions/browser/api/declarative_net_request/ruleset_matcher.h" #include "extensions/browser/api/web_request/permission_helper.h" @@ -57,6 +58,10 @@ BrowserContextKeyedAPIFactory<RulesMonitorService>>::Leaky g_factory = LAZY_INSTANCE_INITIALIZER; +// TODO(crbug.com/1043200): Remove this constant once a shared rule limit is +// implemented for dynamic and session-scoped rules. +constexpr size_t kSessionRulesetLimit = 5000; + bool RulesetInfoCompareByID(const RulesetInfo& lhs, const RulesetInfo& rhs) { return lhs.source().id() < rhs.source().id(); } @@ -89,6 +94,41 @@ return reason == UnloadedExtensionReason::BLOCKLIST; } +// Helper to create a RulesetMatcher for the session-scoped ruleset +// corresponding to the given |rules|. On failure, null is returned and |error| +// is populated. +std::unique_ptr<RulesetMatcher> CreateSessionScopedMatcher( + const ExtensionId& extension_id, + std::vector<api::declarative_net_request::Rule> rules, + std::string* error) { + DCHECK(error); + RulesetSource source(kSessionRulesetID, kSessionRulesetLimit, extension_id, + true /* enabled */); + + // TODO(crbug.com/1043200): Rules which exceed the regex memory limit + // |info.regex_limit_exceeded_rules()| should be treated as errors. + ParseInfo info = source.IndexRules(std::move(rules)); + if (info.has_error()) { + *error = info.error(); + return nullptr; + } + + base::span<const uint8_t> buffer = info.GetBuffer(); + std::unique_ptr<RulesetMatcher> matcher; + LoadRulesetResult result = source.CreateVerifiedMatcher( + std::string(reinterpret_cast<const char*>(buffer.data()), buffer.size()), + &matcher); + + // Creating a verified matcher for session scoped rules should never result in + // an error, since these are not persisted to disk and are not affected by + // related corruption and verification issues. + DCHECK_EQ(LoadRulesetResult::kSuccess, result) + << "Loading session scoped ruleset failed unexpectedly " + << static_cast<int>(result); + + return matcher; +} + } // namespace // Helper to bridge tasks to FileSequenceHelper. Lives on the UI thread. @@ -212,10 +252,16 @@ return result; } -void RulesMonitorService::UpdateSessionRules( +bool RulesMonitorService::UpdateSessionRules( const ExtensionId& extension_id, std::vector<int> rule_ids_to_remove, - std::vector<api::declarative_net_request::Rule> rules_to_add) { + std::vector<api::declarative_net_request::Rule> rules_to_add, + std::string* error) { + DCHECK(error); + + // Sanity check that this is only called for an enabled extension. + DCHECK(extension_registry_->enabled_extensions().Contains(extension_id)); + std::vector<api::declarative_net_request::Rule> new_rules = GetSessionRules(extension_id); @@ -229,11 +275,32 @@ std::make_move_iterator(rules_to_add.begin()), std::make_move_iterator(rules_to_add.end())); - // TODO(crbug.com/1043200): Index and evaluate session scoped rules. + // TODO(crbug.com/1043200): Implement a shared rules and regex rules limit for + // dynamic and session-scoped rules. + if (new_rules.size() > kSessionRulesetLimit) { + *error = "Number of session scoped rules exceeded"; + return false; + } + std::unique_ptr<base::ListValue> new_rules_value = base::ListValue::From( json_schema_compiler::util::CreateValueFromArray(new_rules)); DCHECK(new_rules_value); + + std::unique_ptr<RulesetMatcher> matcher = + CreateSessionScopedMatcher(extension_id, std::move(new_rules), error); + if (!matcher) + return false; // |error| should be already populated. + session_rules_[extension_id] = std::move(*new_rules_value); + + // Update the RulesetMatcher if the extension is not currently loading its + // initial rulesets in response to extension load. If it is, then the + // session-scoped ruleset will be loaded subsequently in + // OnInitialRulesetsLoadedFromDisk. + if (!base::Contains(tasks_pending_on_load_, extension_id)) + UpdateRulesetMatcher(extension_id, std::move(matcher)); + + return true; } RulesMonitorService::RulesMonitorService( @@ -350,9 +417,7 @@ } if (load_data.rulesets.empty()) { - if (test_observer_) - test_observer_->OnRulesetLoadComplete(extension->id()); - + OnInitialRulesetsLoadedFromDisk(std::move(load_data)); return; } @@ -365,7 +430,7 @@ DCHECK(inserted); auto load_ruleset_callback = - base::BindOnce(&RulesMonitorService::OnInitialRulesetsLoaded, + base::BindOnce(&RulesMonitorService::OnInitialRulesetsLoadedFromDisk, weak_factory_.GetWeakPtr()); file_sequence_bridge_->LoadRulesets(std::move(load_data), std::move(load_ruleset_callback)); @@ -403,6 +468,8 @@ UninstallReason reason) { DCHECK_EQ(context_, browser_context); + session_rules_.erase(extension->id()); + // Skip if the extension will be reinstalled soon. if (reason == UNINSTALL_REASON_REINSTALL) return; @@ -503,8 +570,42 @@ std::move(load_ruleset_callback)); } -void RulesMonitorService::OnInitialRulesetsLoaded(LoadRequestData load_data) { - DCHECK(!load_data.rulesets.empty()); +void RulesMonitorService::OnInitialRulesetsLoadedFromDisk( + LoadRequestData load_data) { + if (test_observer_) + test_observer_->OnRulesetLoadComplete(load_data.extension_id); + + // Load session-scoped ruleset. + std::vector<api::declarative_net_request::Rule> session_rules = + GetSessionRules(load_data.extension_id); + + // Allocate one additional space for the session-scoped ruleset if needed. + CompositeMatcher::MatcherList matchers; + matchers.reserve(load_data.rulesets.size() + (session_rules.empty() ? 0 : 1)); + + if (!session_rules.empty()) { + std::string error; + std::unique_ptr<RulesetMatcher> session_matcher = + CreateSessionScopedMatcher(load_data.extension_id, + std::move(session_rules), &error); + DCHECK(session_matcher) + << "Loading session scoped ruleset failed unexpectedly: " << error; + matchers.push_back(std::move(session_matcher)); + } + + if (load_data.rulesets.empty()) { + // No file backed ruleset to load. + DCHECK(!base::Contains(tasks_pending_on_load_, load_data.extension_id)); + DCHECK(extension_registry_->enabled_extensions().Contains( + load_data.extension_id)); + + if (!matchers.empty()) { + AddCompositeMatcher( + load_data.extension_id, + std::make_unique<CompositeMatcher>(std::move(matchers))); + } + return; + } // Signal ruleset load completion. { @@ -515,9 +616,6 @@ tasks_pending_on_load_.erase(it); } - if (test_observer_) - test_observer_->OnRulesetLoadComplete(load_data.extension_id); - LogMetricsAndUpdateChecksumsIfNeeded(load_data); // It's possible that the extension has been disabled since the initial load @@ -527,9 +625,8 @@ return; } - // Sort by ruleset IDs. This would ensure the dynamic ruleset comes first - // followed by static rulesets, which would be in the order in which they were - // defined in the manifest. + // Sort by ruleset IDs. This will ensure that the static rulesets are in the + // order in which they are defined in the manifest. std::sort(load_data.rulesets.begin(), load_data.rulesets.end(), &RulesetInfoCompareByID); @@ -538,8 +635,6 @@ // at install time (by raising a hard error) to maintain forwards // compatibility. Since we iterate based on the order of ruleset ID, we'll // give more preference to rulesets occurring first in the manifest. - CompositeMatcher::MatcherList matchers; - matchers.reserve(load_data.rulesets.size()); size_t static_rules_count = 0; size_t static_regex_rules_count = 0; bool notify_ruleset_failed_to_load = false; @@ -782,6 +877,7 @@ void RulesMonitorService::AddCompositeMatcher( const ExtensionId& extension_id, std::unique_ptr<CompositeMatcher> matcher) { + DCHECK(extension_registry_->enabled_extensions().Contains(extension_id)); bool had_extra_headers_matcher = ruleset_manager_.HasAnyExtraHeadersMatcher(); ruleset_manager_.AddRuleset(extension_id, std::move(matcher)); AdjustExtraHeaderListenerCountIfNeeded(had_extra_headers_matcher);
diff --git a/extensions/browser/api/declarative_net_request/rules_monitor_service.h b/extensions/browser/api/declarative_net_request/rules_monitor_service.h index 267f2f7..05b5b3f 100644 --- a/extensions/browser/api/declarative_net_request/rules_monitor_service.h +++ b/extensions/browser/api/declarative_net_request/rules_monitor_service.h
@@ -105,11 +105,13 @@ std::vector<api::declarative_net_request::Rule> GetSessionRules( const ExtensionId& extension_id) const; - // Updates the session scoped rules for the given |extension_id|. - void UpdateSessionRules( + // Updates the session scoped rules for the given |extension_id|. On failure, + // returns false and populates |error|. + bool UpdateSessionRules( const ExtensionId& extension_id, std::vector<int> rule_ids_to_remove, - std::vector<api::declarative_net_request::Rule> rules_to_add); + std::vector<api::declarative_net_request::Rule> rules_to_add, + std::string* error); RulesetManager* ruleset_manager() { return &ruleset_manager_; } @@ -167,7 +169,7 @@ // Invoked when we have loaded the rulesets in |load_data| on // |file_task_runner_| in response to OnExtensionLoaded. - void OnInitialRulesetsLoaded(LoadRequestData load_data); + void OnInitialRulesetsLoadedFromDisk(LoadRequestData load_data); // Invoked when rulesets are loaded in response to // UpdateEnabledStaticRulesets. @@ -241,6 +243,10 @@ tasks_pending_on_load_; // Session scoped rules value corresponding to extensions. + // TODO(crbug.com/1152430): Currently we are storing session scoped rules in + // two forms: one as a base::ListValue and second in the indexed format as + // part of RulesetMatcher, leading to double memory usage. We should be able + // to do away with the base::ListValue representation. std::map<ExtensionId, base::ListValue> session_rules_; // Must be the last member variable. See WeakPtrFactory documentation for
diff --git a/extensions/browser/api/declarative_net_request/utils.cc b/extensions/browser/api/declarative_net_request/utils.cc index 0eda6b5..4dc30e7 100644 --- a/extensions/browser/api/declarative_net_request/utils.cc +++ b/extensions/browser/api/declarative_net_request/utils.cc
@@ -262,6 +262,8 @@ RulesetID ruleset_id) { if (ruleset_id == kDynamicRulesetID) return dnr_api::DYNAMIC_RULESET_ID; + if (ruleset_id == kSessionRulesetID) + return dnr_api::SESSION_RULESET_ID; DCHECK_GE(ruleset_id, kMinValidStaticRulesetID); return DNRManifestData::GetRuleset(extension, ruleset_id).manifest_id;
diff --git a/extensions/browser/api/declarative_net_request/utils.h b/extensions/browser/api/declarative_net_request/utils.h index d195c59d..9405214 100644 --- a/extensions/browser/api/declarative_net_request/utils.h +++ b/extensions/browser/api/declarative_net_request/utils.h
@@ -82,8 +82,9 @@ api::declarative_net_request::RuleActionType action_type); // Returns the extension-specified ID for the given |ruleset_id| if it -// corresponds to a static ruleset ID. For the dynamic ruleset ID, it returns -// the |DYNAMIC_RULESET_ID| API constant. +// corresponds to a static ruleset ID. For the dynamic or session-scoped ruleset +// ID, it returns the |DYNAMIC_RULESET_ID| and |SESSION_RULESET_ID| API +// constants respectively. std::string GetPublicRulesetID(const Extension& extension, RulesetID ruleset_id);
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc index 045cc6e..1602d7c 100644 --- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc
@@ -106,8 +106,10 @@ void MimeHandlerViewEmbedder::DidFinishNavigation( content::NavigationHandle* handle) { - if (frame_tree_node_id_ != handle->GetFrameTreeNodeId()) + if (!render_frame_host_ || + frame_tree_node_id_ != handle->GetFrameTreeNodeId()) { return; + } // We should've deleted the MimeHandlerViewEmbedder at this point if the frame // is sandboxed. DCHECK(!render_frame_host_->IsSandboxed(
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl index 405d770..8ac0ad79 100644 --- a/extensions/common/api/declarative_net_request.idl +++ b/extensions/common/api/declarative_net_request.idl
@@ -494,15 +494,15 @@ // an error, $(ref:runtime.lastError) will be set and no change will be made // to the rule set. This can happen for multiple reasons, such as invalid // rule format, duplicate rule ID, rule count limit exceeded, and others. - // TODO(crbug.com/1043200): Add documentation once implementation is - // complete. + // <!-- TODO(crbug.com/1043200): Add documentation once implementation is + // complete. --> [nodoc] static void updateSessionRules(UpdateRuleOptions options, optional EmptyCallback callback); // Returns the current set of session scoped rules for the extension. // |callback|: Called with the set of session scoped rules. - // TODO(crbug.com/1043200): Add documentation once implementation is - // complete. + // <!-- TODO(crbug.com/1043200): Add documentation once implementation is + // complete. --> [nodoc] static void getSessionRules(GetRulesCallback callback); // Updates the set of enabled static rulesets for the extension. The @@ -558,7 +558,8 @@ // Returns the number of static rules an extension can enable before the // global static rule limit is reached. - // TODO(crbug.com/983299): Add documentation once implementation is complete. + // <!-- TODO(crbug.com/983299): Add documentation once implementation is + // complete. --> [nodoc] static void getAvailableStaticRuleCount( GetAvailableStaticRuleCountCallback callback); }; @@ -573,19 +574,18 @@ // static rulesets that will not count towards the global total. Up to this // number of rules can be enabled regardless of the number of rules that // count towards the global total. - // TODO(crbug.com/983299): Add documentation once implementation is - // complete. + // <!-- TODO(crbug.com/983299): Add documentation once implementation is + // complete. --> [nodoc, value=30000] static long GUARANTEED_MINIMUM_STATIC_RULES(); // The maximum number of dynamic rules that an extension can add. - // TODO(crbug.com/1043200): Deprecate this once implementation of session - // scoped rules is complete. [value=5000] static long MAX_NUMBER_OF_DYNAMIC_RULES(); // The maximum number of combined dynamic or session scoped rules an // extension can add. - // TODO(crbug.com/1043200): Add documentation once implementation is - // complete. + // <!--TODO(crbug.com/1043200): Add documentation once implementation is + // complete. Also deprecate MAX_NUMBER_OF_DYNAMIC_RULES. + // --> [nodoc, value=5000] static long MAX_NUMBER_OF_DYNAMIC_OR_SESSION_RULES(); // Time interval within which <code>MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL @@ -610,6 +610,12 @@ // Ruleset ID for the dynamic rules added by the extension. [value="_dynamic"] static DOMString DYNAMIC_RULESET_ID(); + + // Ruleset ID for the session-scoped rules added by the extension. + // <!-- TODO(crbug.com/1043200): Add documentation once implementation is + // complete. Also describe it in MatchedRule.rulesetId. + // --> + [nodoc, value="_session"] static DOMString SESSION_RULESET_ID(); }; interface Events {
diff --git a/extensions/common/api/declarative_net_request/constants.h b/extensions/common/api/declarative_net_request/constants.h index bd11880c..fef4fd06 100644 --- a/extensions/common/api/declarative_net_request/constants.h +++ b/extensions/common/api/declarative_net_request/constants.h
@@ -23,10 +23,15 @@ constexpr int kMinValidPriority = 1; using RulesetID = - ::util::IdType<class RulesetIDTag, int, -1 /* invalid value */>; + ::util::IdType<class RulesetIDTag, int, -2 /* invalid value */>; constexpr RulesetID kMinValidStaticRulesetID(1); constexpr RulesetID kDynamicRulesetID(0); +constexpr RulesetID kSessionRulesetID(-1); + +// Prefix for reserved ruleset public IDs. Extensions can't specify static +// rulesets beginning with this. +constexpr char kReservedRulesetIDPrefix = '_'; // Default priority used for rules when the priority is not explicity provided // by an extension.
diff --git a/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc b/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc index 5d6d590..b8b564de 100644 --- a/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc +++ b/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc
@@ -80,10 +80,10 @@ // ID validation. const std::string& manifest_id = rulesets[index].id; - constexpr char kReservedRulesetIDPrefix = '_'; - // Ensure that the dynamic ruleset ID is reserved. + // Sanity check that the dynamic and session ruleset IDs are reserved. DCHECK_EQ(kReservedRulesetIDPrefix, dnr_api::DYNAMIC_RULESET_ID[0]); + DCHECK_EQ(kReservedRulesetIDPrefix, dnr_api::SESSION_RULESET_ID[0]); if (manifest_id.empty() || !ruleset_ids.insert(manifest_id).second || manifest_id[0] == kReservedRulesetIDPrefix) {
diff --git a/fuchsia/BUILD.gn b/fuchsia/BUILD.gn index e0317124..eed0288 100644 --- a/fuchsia/BUILD.gn +++ b/fuchsia/BUILD.gn
@@ -37,6 +37,7 @@ "engine:web_engine_unittests", "http:http_service_tests", "mojom:fuchsia_mojo_unittests", + "release:fuchsia_sizes", "runners:cast_runner", "runners:cast_runner_browsertests", "runners:cast_runner_integration_tests",
diff --git a/fuchsia/engine/test/web_engine_shell.cmx b/fuchsia/engine/test/web_engine_shell.cmx index fdd25ae..935c7709 100644 --- a/fuchsia/engine/test/web_engine_shell.cmx +++ b/fuchsia/engine/test/web_engine_shell.cmx
@@ -1,8 +1,8 @@ { "sandbox": { "features": [ - "isolated-persistent-storage", - "deprecated-ambient-replace-as-executable" + "deprecated-ambient-replace-as-executable", + "isolated-persistent-storage" ], "services": [ "fuchsia.accessibility.semantics.SemanticsManager", @@ -17,7 +17,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Launcher",
diff --git a/fuchsia/engine/web_engine_integration_tests.cmx b/fuchsia/engine/web_engine_integration_tests.cmx index a3647d1..a389cdc 100644 --- a/fuchsia/engine/web_engine_integration_tests.cmx +++ b/fuchsia/engine/web_engine_integration_tests.cmx
@@ -16,7 +16,7 @@ "fuchsia.media.SessionAudioConsumerFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Launcher",
diff --git a/fuchsia/http/http.cmx b/fuchsia/http/http.cmx index 16d0c8a..7247ee2 100644 --- a/fuchsia/http/http.cmx +++ b/fuchsia/http/http.cmx
@@ -1,15 +1,15 @@ { "sandbox": { "features": [ - "root-ssl-certificates", - "deprecated-ambient-replace-as-executable" + "deprecated-ambient-replace-as-executable", + "root-ssl-certificates" ], "services": [ "fuchsia.device.NameProvider", "fuchsia.intl.PropertyProvider", "fuchsia.logger.LogSink", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider" ] }
diff --git a/fuchsia/release/BUILD.gn b/fuchsia/release/BUILD.gn new file mode 100644 index 0000000..5b9d723 --- /dev/null +++ b/fuchsia/release/BUILD.gn
@@ -0,0 +1,14 @@ +# 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. + +assert(is_fuchsia) + +import("//build/config/fuchsia/sizes.gni") + +compute_fuchsia_package_sizes("fuchsia_sizes") { + data_deps = [ + "//fuchsia/engine:web_engine", + "//fuchsia/runners:cast_runner_pkg", + ] +}
diff --git a/fuchsia/runners/cast/cast_runner.cc b/fuchsia/runners/cast/cast_runner.cc index b89df1c..b142a84 100644 --- a/fuchsia/runners/cast/cast_runner.cc +++ b/fuchsia/runners/cast/cast_runner.cc
@@ -43,7 +43,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.settings.Display",
diff --git a/fuchsia/runners/cast/cast_runner.cmx b/fuchsia/runners/cast/cast_runner.cmx index 27ad9c6..4b64d37 100644 --- a/fuchsia/runners/cast/cast_runner.cmx +++ b/fuchsia/runners/cast/cast_runner.cmx
@@ -20,7 +20,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.settings.Display",
diff --git a/fuchsia/runners/runners_integration_tests.test-cmx b/fuchsia/runners/runners_integration_tests.test-cmx index 61e545c..6c199c78 100644 --- a/fuchsia/runners/runners_integration_tests.test-cmx +++ b/fuchsia/runners/runners_integration_tests.test-cmx
@@ -5,7 +5,7 @@ "fuchsia.fonts.Provider": "fuchsia-pkg://fuchsia.com/fonts#meta/fonts.cmx", "fuchsia.intl.PropertyProvider": "fuchsia-pkg://fuchsia.com/intl_property_manager#meta/intl_property_manager.cmx", "fuchsia.memorypressure.Provider": "fuchsia-pkg://fuchsia.com/memory_monitor#meta/memory_monitor.cmx", - "fuchsia.netstack.Netstack": "fuchsia-pkg://fuchsia.com/netstack#meta/netstack.cmx", + "fuchsia.net.interfaces.State": "fuchsia-pkg://fuchsia.com/netstack#meta/netstack.cmx", "fuchsia.posix.socket.Provider": "fuchsia-pkg://fuchsia.com/netstack#meta/netstack.cmx", "fuchsia.web.ContextProvider": "fuchsia-pkg://fuchsia.com/web_engine#meta/context_provider.cmx" }, @@ -26,11 +26,11 @@ "fuchsia.fonts.Provider", "fuchsia.intl.PropertyProvider", "fuchsia.memorypressure.Provider", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sys.Launcher", "fuchsia.web.ContextProvider" ] } -} \ No newline at end of file +}
diff --git a/fuchsia/runners/web/web_runner.cmx b/fuchsia/runners/web/web_runner.cmx index 6216390..36fc69d 100644 --- a/fuchsia/runners/web/web_runner.cmx +++ b/fuchsia/runners/web/web_runner.cmx
@@ -5,8 +5,8 @@ ], "services": [ "fuchsia.accessibility.semantics.SemanticsManager", - "fuchsia.device.NameProvider", "fuchsia.camera3.DeviceWatcher", + "fuchsia.device.NameProvider", "fuchsia.fonts.Provider", "fuchsia.intl.PropertyProvider", "fuchsia.logger.LogSink", @@ -16,7 +16,7 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.NameLookup", - "fuchsia.netstack.Netstack", + "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sysmem.Allocator",
diff --git a/gin/v8_platform.cc b/gin/v8_platform.cc index 813e0a9..27c300ff 100644 --- a/gin/v8_platform.cc +++ b/gin/v8_platform.cc
@@ -304,8 +304,7 @@ class JobHandleImpl : public v8::JobHandle { public: - JobHandleImpl(base::JobHandle handle, std::unique_ptr<v8::JobTask> job_task) - : handle_(std::move(handle)), job_task_(std::move(job_task)) {} + explicit JobHandleImpl(base::JobHandle handle) : handle_(std::move(handle)) {} ~JobHandleImpl() override = default; JobHandleImpl(const JobHandleImpl&) = delete; @@ -342,7 +341,6 @@ } base::JobHandle handle_; - std::unique_ptr<v8::JobTask> job_task_; }; } // namespace @@ -532,22 +530,25 @@ task_traits = kBlockingTaskTraits; break; } + // Ownership of |job_task| is assumed by |worker_task|, while + // |max_concurrency_callback| uses an unretained pointer. + auto* job_task_ptr = job_task.get(); auto handle = base::PostJob(FROM_HERE, task_traits, base::BindRepeating( - [](v8::JobTask* job_task, base::JobDelegate* delegate) { + [](const std::unique_ptr<v8::JobTask>& job_task, + base::JobDelegate* delegate) { JobDelegateImpl delegate_impl(delegate); job_task->Run(&delegate_impl); }, - base::Unretained(job_task.get())), + std::move(job_task)), base::BindRepeating( [](v8::JobTask* job_task, size_t worker_count) { return job_task->GetMaxConcurrency(worker_count); }, - base::Unretained(job_task.get()))); + base::Unretained(job_task_ptr))); - return std::make_unique<JobHandleImpl>(std::move(handle), - std::move(job_task)); + return std::make_unique<JobHandleImpl>(std::move(handle)); } bool V8Platform::IdleTasksEnabled(v8::Isolate* isolate) {
diff --git a/gin/v8_platform_unittest.cc b/gin/v8_platform_unittest.cc index 8dbfbd43..332e0f7 100644 --- a/gin/v8_platform_unittest.cc +++ b/gin/v8_platform_unittest.cc
@@ -6,7 +6,9 @@ #include <atomic> +#include "base/barrier_closure.h" #include "base/test/task_environment.h" +#include "base/test/test_waitable_event.h" #include "base/trace_event/trace_event.h" #include "testing/gtest/include/gtest/gtest.h" @@ -84,10 +86,65 @@ auto handle = V8Platform::Get()->PostJob(v8::TaskPriority::kUserVisible, std::make_unique<Task>(&num_tasks_to_run)); - EXPECT_TRUE(handle->IsRunning()); + EXPECT_TRUE(handle->IsValid()); handle->Join(); - EXPECT_FALSE(handle->IsRunning()); + EXPECT_FALSE(handle->IsValid()); DCHECK_EQ(num_tasks_to_run, 0U); } +// Tests that JobTask's lifetime is extended beyond job handle, until no +// references are left; and is gracefully destroyed. +TEST(V8PlatformTest, PostJobLifetime) { + std::atomic_size_t num_tasks_to_run(4); + + base::TestWaitableEvent threads_running; + base::TestWaitableEvent threads_continue; + base::RepeatingClosure threads_running_barrier = base::BarrierClosure( + num_tasks_to_run, + BindOnce(&base::TestWaitableEvent::Signal, Unretained(&threads_running))); + + class Task : public v8::JobTask { + public: + explicit Task(std::atomic_size_t* num_tasks_to_run, + base::RepeatingClosure threads_running_barrier, + base::TestWaitableEvent* threads_continue) + : num_tasks_to_run_(num_tasks_to_run), + threads_running_barrier_(std::move(threads_running_barrier)), + threads_continue_(threads_continue) {} + ~Task() override { + // This should only be destroyed once all workers returned. + EXPECT_EQ(*num_tasks_to_run_, 0U); + } + + void Run(v8::JobDelegate* delegate) override { + threads_running_barrier_.Run(); + threads_continue_->Wait(); + --(*num_tasks_to_run_); + } + + size_t GetMaxConcurrency(size_t /* worker_count*/) const override { + return *num_tasks_to_run_; + } + + std::atomic_size_t* num_tasks_to_run_; + base::RepeatingClosure threads_running_barrier_; + base::TestWaitableEvent* threads_continue_; + }; + + base::test::TaskEnvironment task_environment; + + auto handle = V8Platform::Get()->PostJob( + v8::TaskPriority::kUserVisible, + std::make_unique<Task>(&num_tasks_to_run, + std::move(threads_running_barrier), + &threads_continue)); + EXPECT_TRUE(handle->IsValid()); + threads_running.Wait(); + handle->CancelAndDetach(); + handle.reset(); + + // Release workers and let the job get destroyed. + threads_continue.Signal(); +} + } // namespace gin
diff --git a/gpu/command_buffer/service/external_vk_image_backing.cc b/gpu/command_buffer/service/external_vk_image_backing.cc index c7bc8d3..1da47c8 100644 --- a/gpu/command_buffer/service/external_vk_image_backing.cc +++ b/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -187,8 +187,9 @@ auto* device_queue = context_state->vk_context_provider()->GetDeviceQueue(); VkFormat vk_format = ToVkFormat(format); constexpr auto kUsageNeedsColorAttachment = - SHARED_IMAGE_USAGE_GLES2 | SHARED_IMAGE_USAGE_RASTER | - SHARED_IMAGE_USAGE_OOP_RASTERIZATION | SHARED_IMAGE_USAGE_WEBGPU; + SHARED_IMAGE_USAGE_GLES2 | SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT | + SHARED_IMAGE_USAGE_RASTER | SHARED_IMAGE_USAGE_OOP_RASTERIZATION | + SHARED_IMAGE_USAGE_WEBGPU; VkImageUsageFlags vk_usage = VK_IMAGE_USAGE_SAMPLED_BIT; if (usage & kUsageNeedsColorAttachment) { vk_usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
diff --git a/gpu/command_buffer/service/external_vk_image_skia_representation.cc b/gpu/command_buffer/service/external_vk_image_skia_representation.cc index f562e80..3f5cf05 100644 --- a/gpu/command_buffer/service/external_vk_image_skia_representation.cc +++ b/gpu/command_buffer/service/external_vk_image_skia_representation.cc
@@ -80,10 +80,21 @@ access_mode_ = kWrite; - // If Vulkan/GL/Dawn share the same memory backing, we need set - // |end_state| VK_QUEUE_FAMILY_EXTERNAL, and then the caller will set the - // VkImage to VK_QUEUE_FAMILY_EXTERNAL before calling EndAccess(). - if (backing_impl()->need_synchronization()) { + if (backing_impl()->usage() & SHARED_IMAGE_USAGE_SCANOUT) { + // If the backing is used for scanout, we need to to set + // |end_state| VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, and then the caller will + // set the VkImage to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR before calling + // EndAccess(). + auto queue_index = backing_impl() + ->context_provider() + ->GetDeviceQueue() + ->GetVulkanQueueIndex(); + *end_state = std::make_unique<GrBackendSurfaceMutableState>( + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, queue_index); + } else if (backing_impl()->need_synchronization()) { + // If Vulkan/GL/Dawn share the same memory backing, we need to set + // |end_state| VK_QUEUE_FAMILY_EXTERNAL, and then the caller will set the + // VkImage to VK_QUEUE_FAMILY_EXTERNAL before calling EndAccess(). *end_state = std::make_unique<GrBackendSurfaceMutableState>( VK_IMAGE_LAYOUT_UNDEFINED, VK_QUEUE_FAMILY_EXTERNAL); }
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm index d7ba9665..aca940a 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm +++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
@@ -35,11 +35,11 @@ namespace { -base::scoped_nsprotocol<id<MTLTexture>> API_AVAILABLE(macos(10.11)) - CreateMetalTexture(id<MTLDevice> mtl_device, - IOSurfaceRef io_surface, - const gfx::Size& size, - viz::ResourceFormat format) { +base::scoped_nsprotocol<id<MTLTexture>> CreateMetalTexture( + id<MTLDevice> mtl_device, + IOSurfaceRef io_surface, + const gfx::Size& size, + viz::ResourceFormat format) { TRACE_EVENT0("gpu", "SharedImageBackingFactoryIOSurface::CreateMetalTexture"); base::scoped_nsprotocol<id<MTLTexture>> mtl_texture; MTLPixelFormat mtl_pixel_format = @@ -175,26 +175,23 @@ SharedImageBacking* backing, scoped_refptr<SharedContextState> context_state, scoped_refptr<gl::GLImage> image) { - if (@available(macOS 10.11, *)) { - DCHECK(context_state->GrContextIsMetal()); + DCHECK(context_state->GrContextIsMetal()); - base::ScopedCFTypeRef<IOSurfaceRef> io_surface = - static_cast<gl::GLImageIOSurface*>(image.get())->io_surface(); + base::ScopedCFTypeRef<IOSurfaceRef> io_surface = + static_cast<gl::GLImageIOSurface*>(image.get())->io_surface(); - id<MTLDevice> mtl_device = - context_state->metal_context_provider()->GetMTLDevice(); - auto mtl_texture = CreateMetalTexture(mtl_device, io_surface.get(), - backing->size(), backing->format()); - DCHECK(mtl_texture); + id<MTLDevice> mtl_device = + context_state->metal_context_provider()->GetMTLDevice(); + auto mtl_texture = CreateMetalTexture(mtl_device, io_surface.get(), + backing->size(), backing->format()); + DCHECK(mtl_texture); - GrMtlTextureInfo info; - info.fTexture.retain(mtl_texture.get()); - auto gr_backend_texture = - GrBackendTexture(backing->size().width(), backing->size().height(), - GrMipMapped::kNo, info); - return SkPromiseImageTexture::Make(gr_backend_texture); - } - return nullptr; + GrMtlTextureInfo info; + info.fTexture.retain(mtl_texture.get()); + auto gr_backend_texture = + GrBackendTexture(backing->size().width(), backing->size().height(), + GrMipMapped::kNo, info); + return SkPromiseImageTexture::Make(gr_backend_texture); } // static
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 3a82d739..08ec6cc 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -14786,7 +14786,7 @@ cmd: "recipes" } properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium\",\"recipe\":\"chromium\"}" - execution_timeout_secs: 14400 + execution_timeout_secs: 25200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { @@ -27083,12 +27083,11 @@ name: "chromeos-amd64-generic-rel" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper" - dimensions: "builderless:1" + dimensions: "builder:chromeos-amd64-generic-rel" dimensions: "cores:8" dimensions: "cpu:x86-64" dimensions: "os:Ubuntu-16.04" dimensions: "pool:luci.chromium.try" - dimensions: "ssd:0" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master"
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index aa66c4bd..3539a7a4 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -1086,10 +1086,9 @@ cores = 32, tree_closing = False, - # See https://crbug.com/1153349. In 3 hours, the android-official builder - # was able to complete only 98% of the target. This gives a bit more time to - # finish. - execution_timeout = 4 * time.hour, + # See https://crbug.com/1153349#c22, as we update symbol_level=2, build + # needs longer time to complete. + execution_timeout = 7 * time.hour, ) ci.chromium_builder(
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index c4c4deb..4c0bc53 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -649,6 +649,7 @@ try_.chromium_chromiumos_builder( name = "chromeos-amd64-generic-rel", branch_selector = branches.ALL_BRANCHES, + builderless = not settings.is_master, main_list_view = "try", tryjob = try_.job(), )
diff --git a/ios/chrome/app/startup/BUILD.gn b/ios/chrome/app/startup/BUILD.gn index 326cfe0..0deb841 100644 --- a/ios/chrome/app/startup/BUILD.gn +++ b/ios/chrome/app/startup/BUILD.gn
@@ -101,6 +101,7 @@ deps = [ ":startup", "//base", + "//base/test:test_support", "//ios/chrome/app", "//ios/chrome/browser", "//ios/chrome/common/app_group",
diff --git a/ios/chrome/app/startup/chrome_app_startup_parameters_unittest.mm b/ios/chrome/app/startup/chrome_app_startup_parameters_unittest.mm index 06ac5cd9..ab0673f 100644 --- a/ios/chrome/app/startup/chrome_app_startup_parameters_unittest.mm +++ b/ios/chrome/app/startup/chrome_app_startup_parameters_unittest.mm
@@ -7,6 +7,7 @@ #import <Foundation/Foundation.h> #include "base/strings/stringprintf.h" +#include "base/test/metrics/histogram_tester.h" #import "ios/chrome/app/app_startup_parameters.h" #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/common/app_group/app_group_constants.h" @@ -301,4 +302,112 @@ @"http://www.google.com/search?query=pony¬safarisab=1&abc=def"); } +// Tests that search widget url is parsed correctly, and the right metric is +// recorded. +TEST_F(AppStartupParametersTest, ParseSearchWidgetKit) { + base::HistogramTester histogram_tester; + NSURL* url = [NSURL URLWithString:@"chromewidgetkit://search-widget/search"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + std::string expected_url_string = + base::StringPrintf("%s://%s/", kChromeUIScheme, kChromeUINewTabHost); + + EXPECT_EQ(params.externalURL.spec(), expected_url_string); + EXPECT_EQ(params.postOpeningAction, FOCUS_OMNIBOX); + EXPECT_FALSE(params.launchInIncognito); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 1, 1); +} + +// Tests that quick actions widget search url is parsed correctly, and the right +// metric is recorded. +TEST_F(AppStartupParametersTest, ParseQuickActionsWidgetKitSearch) { + base::HistogramTester histogram_tester; + NSURL* url = + [NSURL URLWithString:@"chromewidgetkit://quick-actions-widget/search"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + std::string expected_url_string = + base::StringPrintf("%s://%s/", kChromeUIScheme, kChromeUINewTabHost); + + EXPECT_EQ(params.externalURL.spec(), expected_url_string); + EXPECT_EQ(params.postOpeningAction, FOCUS_OMNIBOX); + EXPECT_FALSE(params.launchInIncognito); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 2, 1); +} + +// Tests that quick actions widget incognito url is parsed correctly, and the +// right metric is recorded. +TEST_F(AppStartupParametersTest, ParseQuickActionsWidgetKitIncognito) { + base::HistogramTester histogram_tester; + NSURL* url = + [NSURL URLWithString:@"chromewidgetkit://quick-actions-widget/incognito"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + std::string expected_url_string = + base::StringPrintf("%s://%s/", kChromeUIScheme, kChromeUINewTabHost); + + EXPECT_EQ(params.externalURL.spec(), expected_url_string); + EXPECT_EQ(params.postOpeningAction, FOCUS_OMNIBOX); + EXPECT_TRUE(params.launchInIncognito); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 3, 1); +} + +// Tests that quick actions widget voice search url is parsed correctly, and the +// right metric is recorded. +TEST_F(AppStartupParametersTest, ParseQuickActionsWidgetKitVoiceSearch) { + base::HistogramTester histogram_tester; + NSURL* url = [NSURL + URLWithString:@"chromewidgetkit://quick-actions-widget/voicesearch"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + std::string expected_url_string = + base::StringPrintf("%s://%s/", kChromeUIScheme, kChromeUINewTabHost); + + EXPECT_EQ(params.externalURL.spec(), expected_url_string); + EXPECT_EQ(params.postOpeningAction, START_VOICE_SEARCH); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 4, 1); +} + +// Tests that quick actions widget QR reader url is parsed correctly, and the +// right metric is recorded. +TEST_F(AppStartupParametersTest, ParseQuickActionsWidgetKitQRReader) { + base::HistogramTester histogram_tester; + NSURL* url = + [NSURL URLWithString:@"chromewidgetkit://quick-actions-widget/qrreader"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + std::string expected_url_string = + base::StringPrintf("%s://%s/", kChromeUIScheme, kChromeUINewTabHost); + + EXPECT_EQ(params.externalURL.spec(), expected_url_string); + EXPECT_EQ(params.postOpeningAction, START_QR_CODE_SCANNER); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 5, 1); +} + +// Tests that dino widget game url is parsed correctly, and the right metric is +// recorded. +TEST_F(AppStartupParametersTest, ParseDinoWidgetKit) { + base::HistogramTester histogram_tester; + NSURL* url = [NSURL URLWithString:@"chromewidgetkit://dino-game-widget/game"]; + ChromeAppStartupParameters* params = + [ChromeAppStartupParameters newChromeAppStartupParametersWithURL:url + fromSourceApplication:nil]; + + GURL expected_url = + GURL(base::StringPrintf("%s://%s", kChromeUIScheme, kChromeUIDinoHost)); + + EXPECT_EQ(params.externalURL, expected_url); + histogram_tester.ExpectUniqueSample("IOS.WidgetKit.Action", 0, 1); +} + } // namespace
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 61dc5109..d0cd074 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1679,8 +1679,8 @@ <message name="IDS_IOS_PASSWORDS" desc="Title for the view in Settings for managing saved passwords. [Length: 15em] [iOS only]"> Passwords </message> - <message name="IDS_IOS_ENTERPRISE_MANAGED_SETTING_DESC_WITH_COMPANY_NAME" desc="Text displayed to inform the user that the browser is managed by Enterprise policies with company name. [iOS only]"> - Managed by <ph name="COMPANY">$1<ex>Google</ex></ph>. <ph name="BEGIN_LINK">BEGIN_LINK</ph>Learn more<ph name="END_LINK">END_LINK</ph> + <message name="IDS_IOS_ENTERPRISE_MANAGED_SETTING_DESC_WITH_COMPANY_NAME" desc="Text displayed to inform the user that the browser is managed by Enterprise policies. MANAGER can be a domain or an email address. [iOS only]"> + Managed by <ph name="MANAGER">$1<ex>Google</ex></ph>. <ph name="BEGIN_LINK">BEGIN_LINK</ph>Learn more<ph name="END_LINK">END_LINK</ph> </message> <message name="IDS_IOS_ENTERPRISE_MANAGED_SETTING_DESC_WITHOUT_COMPANY_NAME" desc="Text displayed to inform the user that the browser is managed by Enterprise policies without company name. [iOS only]"> Managed by your organization. <ph name="BEGIN_LINK">BEGIN_LINK</ph>Learn more<ph name="END_LINK">END_LINK</ph>
diff --git a/ios/chrome/browser/chrome_switches.cc b/ios/chrome/browser/chrome_switches.cc index ce986bd..d0e3a68 100644 --- a/ios/chrome/browser/chrome_switches.cc +++ b/ios/chrome/browser/chrome_switches.cc
@@ -39,10 +39,6 @@ const char kEnableThirdPartyKeyboardWorkaround[] = "enable-third-party-keyboard-workaround"; -// Installs the managed bookmarks policy handler. -const char kInstallManagedBookmarksHandler[] = - "install-managed-bookmarks-handler"; - // Installs the URLBlocklist and URLAllowlist handlers. const char kInstallURLBlocklistHandlers[] = "install-url-blocklist-handlers";
diff --git a/ios/chrome/browser/chrome_switches.h b/ios/chrome/browser/chrome_switches.h index dae3d7bc..6978c33d 100644 --- a/ios/chrome/browser/chrome_switches.h +++ b/ios/chrome/browser/chrome_switches.h
@@ -17,7 +17,6 @@ extern const char kEnableIOSHandoffToOtherDevices[]; extern const char kEnableSpotlightActions[]; extern const char kEnableThirdPartyKeyboardWorkaround[]; -extern const char kInstallManagedBookmarksHandler[]; extern const char kInstallURLBlocklistHandlers[]; extern const char kUserAgent[];
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index b67da64..0d1f13d 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -95,26 +95,6 @@ namespace { -const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerous}}; -const FeatureEntry::FeatureParam kMarkHttpAsWarningAndDangerousOnFormEdits[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features:: - kMarkHttpAsParameterWarningAndDangerousOnFormEdits}}; -const FeatureEntry::FeatureParam kMarkHttpAsDangerWarning[] = { - {security_state::features::kMarkHttpAsFeatureParameterName, - security_state::features::kMarkHttpAsParameterDangerWarning}}; - -const FeatureEntry::FeatureVariation kMarkHttpAsFeatureVariations[] = { - {"(mark as actively dangerous)", kMarkHttpAsDangerous, - base::size(kMarkHttpAsDangerous), nullptr}, - {"(mark with a Not Secure warning and dangerous on form edits)", - kMarkHttpAsWarningAndDangerousOnFormEdits, - base::size(kMarkHttpAsWarningAndDangerousOnFormEdits), nullptr}, - {"(mark with a grey triangle icon)", kMarkHttpAsDangerWarning, - base::size(kMarkHttpAsDangerWarning), nullptr}}; - const FeatureEntry::Choice kAutofillIOSDelayBetweenFieldsChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {"0", autofill::switches::kAutofillIOSDelayBetweenFields, "0"}, @@ -267,12 +247,6 @@ // // When adding a new choice, add it to the end of the list. const flags_ui::FeatureEntry kFeatureEntries[] = { - {"enable-mark-http-as", flag_descriptions::kMarkHttpAsName, - flag_descriptions::kMarkHttpAsDescription, flags_ui::kOsIos, - FEATURE_WITH_PARAMS_VALUE_TYPE( - security_state::features::kMarkHttpAsFeature, - kMarkHttpAsFeatureVariations, - "MarkHttpAs")}, {"in-product-help-demo-mode-choice", flag_descriptions::kInProductHelpDemoModeName, flag_descriptions::kInProductHelpDemoModeDescription, flags_ui::kOsIos, @@ -558,10 +532,6 @@ flag_descriptions::kExtendOpenInFilesSupportName, flag_descriptions::kExtendOpenInFilesSupportDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kExtendOpenInFilesSupport)}, - {"well-known-change-password", - flag_descriptions::kWellKnownChangePasswordName, - flag_descriptions::kWellKnownChangePasswordDescription, flags_ui::kOsIos, - FEATURE_VALUE_TYPE(password_manager::features::kWellKnownChangePassword)}, {"enable-close-all-tabs-confirmation", flag_descriptions::kEnableCloseAllTabsConfirmationName, flag_descriptions::kEnableCloseAllTabsConfirmationDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index e544932..cd467fe 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -307,9 +307,6 @@ "When enabled, managed bookmarks set by an enterprise policy can be shown " "in the bookmarks UI on iOS"; -const char kMarkHttpAsName[] = "Mark non-secure origins as non-secure"; -const char kMarkHttpAsDescription[] = "Change the UI treatment for HTTP pages"; - const char kMobileGoogleSRPName[] = "Mobile version of Google SRP by default"; const char kMobileGoogleSRPDescription[] = "Request the Mobile version of Google SRP by default when the desktop mode " @@ -467,14 +464,6 @@ "When enabled, the native context menu are displayed when the user long " "press on a link or an image."; -const char kWellKnownChangePasswordName[] = - "Support for .well-known/change-password"; -const char kWellKnownChangePasswordDescription[] = - "If enabled the 'change password' button in password checkup redirects to " - "the .well-known/change-password path. The path is supposed to point to " - "the password change form of the site. When the site doesn't support " - ".well-known/change-password it is checked if a fallback url is available. " - "Otherwise the user is redirected to the origin."; // Please insert your name/description above in alphabetical order. } // namespace flag_descriptions
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index 1e0c39b..fdfb0e31 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -271,11 +271,6 @@ extern const char kManagedBookmarksIOSName[]; extern const char kManagedBookmarksIOSDescription[]; -// Title, description, and options for the MarkHttpAs setting that controls -// display of omnibox warnings about non-secure pages. -extern const char kMarkHttpAsName[]; -extern const char kMarkHttpAsDescription[]; - // Title and description for the flag where the Google SRP is requested in // mobile mode by default. extern const char kMobileGoogleSRPName[]; @@ -420,9 +415,6 @@ extern const char kWebViewNativeContextMenuName[]; extern const char kWebViewNativeContextMenuDescription[]; -extern const char kWellKnownChangePasswordName[]; -extern const char kWellKnownChangePasswordDescription[]; - extern const char kRestoreGaiaCookiesIfDeletedName[]; extern const char kRestoreGaiaCookiesIfDeletedDescription[];
diff --git a/ios/chrome/browser/passwords/well_known_change_password_tab_helper.mm b/ios/chrome/browser/passwords/well_known_change_password_tab_helper.mm index 05aec75..0460a60 100644 --- a/ios/chrome/browser/passwords/well_known_change_password_tab_helper.mm +++ b/ios/chrome/browser/passwords/well_known_change_password_tab_helper.mm
@@ -7,7 +7,6 @@ #import <Foundation/Foundation.h> #include "base/logging.h" -#include "components/password_manager/core/common/password_manager_features.h" #import "components/ukm/ios/ukm_url_recorder.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/passwords/ios_chrome_change_password_url_service_factory.h" @@ -57,15 +56,11 @@ // The custom behaviour is only used if the .well-known/change-password // request if the request is the main frame opened in a new tab. if (processing_state_ == kWaitingForFirstRequest) { - // Boolean order important, feature flag last. Otherwise it messes - // with usage statistics of control and experimental group (UMA). if (request_info.target_frame_is_main && ui::PageTransitionCoreTypeIs(request_info.transition_type, ui::PAGE_TRANSITION_TYPED) && web_state_->GetLastCommittedURL().is_empty() && // empty tab history - IsWellKnownChangePasswordUrl(request_url) && - base::FeatureList::IsEnabled( - password_manager::features::kWellKnownChangePassword)) { + IsWellKnownChangePasswordUrl(request_url)) { request_url_ = request_url; change_password_url_service_->PrefetchURLs(); auto url_loader_factory = @@ -89,9 +84,7 @@ // True if the TabHelper expects the response from .well-known/change-password // and only that navigation was started. if (processing_state_ == kWaitingForResponse && - [response isKindOfClass:[NSHTTPURLResponse class]] && - base::FeatureList::IsEnabled( - password_manager::features::kWellKnownChangePassword)) { + [response isKindOfClass:[NSHTTPURLResponse class]]) { processing_state_ = kResponesReceived; DCHECK(url.SchemeIsHTTPOrHTTPS()); response_policy_callback_ = std::move(callback);
diff --git a/ios/chrome/browser/passwords/well_known_change_password_tab_helper_unittest.mm b/ios/chrome/browser/passwords/well_known_change_password_tab_helper_unittest.mm index 17f7e83db..e3bcf00 100644 --- a/ios/chrome/browser/passwords/well_known_change_password_tab_helper_unittest.mm +++ b/ios/chrome/browser/passwords/well_known_change_password_tab_helper_unittest.mm
@@ -7,9 +7,7 @@ #include "base/run_loop.h" #import "base/test/ios/wait_util.h" -#include "base/test/scoped_feature_list.h" #include "components/password_manager/core/browser/well_known_change_password_util.h" -#include "components/password_manager/core/common/password_manager_features.h" #include "components/ukm/test_ukm_recorder.h" #include "ios/chrome/browser/passwords/ios_chrome_change_password_url_service_factory.h" #import "ios/web/public/navigation/navigation_manager.h" @@ -95,8 +93,6 @@ using UkmBuilder = ukm::builders::PasswordManager_WellKnownChangePasswordResult; WellKnownChangePasswordTabHelperTest() { - feature_list_.InitAndEnableFeature( - password_manager::features::kWellKnownChangePassword); test_server_->RegisterRequestHandler(base::BindRepeating( &WellKnownChangePasswordTabHelperTest::HandleRequest, base::Unretained(this))); @@ -159,7 +155,6 @@ // |path_response_map_|. std::unique_ptr<HttpResponse> HandleRequest(const HttpRequest& request); - base::test::ScopedFeatureList feature_list_; network::TestURLLoaderFactory test_url_loader_factory_; web::TestWebStateDelegate delegate_; };
diff --git a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm index 12702ae..586b43f2c 100644 --- a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm +++ b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm
@@ -126,12 +126,9 @@ handlers->AddHandler(std::make_unique<policy::DefaultSearchPolicyHandler>()); handlers->AddHandler( std::make_unique<safe_browsing::SafeBrowsingPolicyHandler>()); - - if (ShouldInstallManagedBookmarksPolicyHandler()) { - handlers->AddHandler( - std::make_unique<bookmarks::ManagedBookmarksPolicyHandler>( - chrome_schema)); - } + handlers->AddHandler( + std::make_unique<bookmarks::ManagedBookmarksPolicyHandler>( + chrome_schema)); if (ShouldInstallURLBlocklistPolicyHandlers()) { handlers->AddHandler(std::make_unique<policy::URLBlocklistPolicyHandler>(
diff --git a/ios/chrome/browser/policy/policy_features.cc b/ios/chrome/browser/policy/policy_features.cc index ae29da1..bff0b42 100644 --- a/ios/chrome/browser/policy/policy_features.cc +++ b/ios/chrome/browser/policy/policy_features.cc
@@ -13,10 +13,10 @@ #include "ios/web/common/features.h" const base::Feature kEditBookmarksIOS{"EditBookmarksIOS", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kManagedBookmarksIOS{"ManagedBookmarksIOS", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kEnableIncognitoModeAvailabilityIOS{ "EnableIncognitoModeAvailabilityIOS", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -59,13 +59,8 @@ return IsEnterprisePolicyEnabled(); } -bool ShouldInstallManagedBookmarksPolicyHandler() { - return HasSwitch(switches::kInstallManagedBookmarksHandler); -} - bool IsManagedBookmarksEnabled() { - return ShouldInstallManagedBookmarksPolicyHandler() && - base::FeatureList::IsEnabled(kManagedBookmarksIOS); + return base::FeatureList::IsEnabled(kManagedBookmarksIOS); } bool ShouldInstallURLBlocklistPolicyHandlers() {
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn index e4c0672..fb2b0288 100644 --- a/ios/chrome/browser/ui/bookmarks/BUILD.gn +++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -76,6 +76,7 @@ "//ios/chrome/browser/ui/table_view:feature_flags", "//ios/chrome/browser/ui/table_view:presentation", "//ios/chrome/browser/ui/table_view:styler", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view:views", "//ios/chrome/browser/ui/util:multiwindow_util", "//ios/chrome/browser/url_loading",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index 66999daa..71c4d020 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -62,7 +62,9 @@ #import "ios/chrome/browser/ui/table_view/table_view_illustrated_empty_view.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" #import "ios/chrome/browser/ui/table_view/table_view_navigation_controller_constants.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/ui/ui_feature_flags.h" +#include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/menu_util.h" #import "ios/chrome/browser/ui/util/multi_window_support.h" #import "ios/chrome/browser/ui/util/rtl_geometry.h" @@ -241,7 +243,11 @@ - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - self = [super initWithStyle:UITableViewStylePlain]; + + UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) + ? ChromeTableViewStyle() + : UITableViewStylePlain; + self = [super initWithStyle:style]; if (self) { _browser = browser; _browserState =
diff --git a/ios/chrome/browser/ui/bookmarks/managed_bookmarks_egtest.mm b/ios/chrome/browser/ui/bookmarks/managed_bookmarks_egtest.mm index db03f84a..66ace934 100644 --- a/ios/chrome/browser/ui/bookmarks/managed_bookmarks_egtest.mm +++ b/ios/chrome/browser/ui/bookmarks/managed_bookmarks_egtest.mm
@@ -38,10 +38,6 @@ AppLaunchConfiguration config; config.additional_args.push_back(std::string("--") + switches::kEnableEnterprisePolicy); - config.additional_args.push_back(std::string("--") + - switches::kInstallManagedBookmarksHandler); - config.additional_args.push_back( - std::string("--enable-features=ManagedBookmarksIOS")); // Remove whitespace from the policy data, because the XML parser does not // tolerate newlines.
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index 15c957d2..2f73973b 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -480,14 +480,9 @@ // Starts mediators owned by this coordinator. - (void)startMediators { if (self.browser->GetBrowserState()->IsOffTheRecord()) { - IncognitoReauthSceneAgent* reauthAgent = nil; - for (id agent in SceneStateBrowserAgent::FromBrowser(self.browser) - ->GetSceneState() - .connectedAgents) { - if ([agent isKindOfClass:[IncognitoReauthSceneAgent class]]) { - reauthAgent = agent; - } - } + IncognitoReauthSceneAgent* reauthAgent = [IncognitoReauthSceneAgent + agentFromScene:SceneStateBrowserAgent::FromBrowser(self.browser) + ->GetSceneState()]; self.incognitoAuthMediator = [[IncognitoReauthMediator alloc] initWithConsumer:self.viewController
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index b48639b5..18b29131 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -193,6 +193,7 @@ "discover_feed_metrics_recorder.mm", ] deps = [ + ":feature_flags", "//base", "//components/feed/core/v2:common", ]
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recorder.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recorder.mm index f40d73f1..a5bec4b4 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recorder.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recorder.mm
@@ -5,10 +5,12 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recorder.h" #include "base/mac/foundation_util.h" +#import "base/metrics/histogram_macros.h" #include "components/ntp_snippets/content_suggestions_metrics.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_item.h" #import "ios/chrome/browser/ui/content_suggestions/cells/suggested_content.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_category_wrapper.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" #import "ios/chrome/browser/ui/content_suggestions/identifier/content_suggestion_identifier.h" #import "ios/chrome/browser/ui/content_suggestions/identifier/content_suggestions_section_information.h" @@ -16,6 +18,48 @@ #error "This file requires ARC support." #endif +// Values for the UMA ContentSuggestions.Feed.EngagementType +// histogram. These values are persisted to logs. Entries should not be +// renumbered and numeric values should never be reused. This must be kept +// in sync with FeedEngagementType in enums.xml. +enum class FeedEngagementType { + kFeedEngaged = 0, + kFeedEngagedSimple = 1, + kFeedInteracted = 2, + kDeprecatedFeedScrolled = 3, + kFeedScrolled = 4, + kMaxValue = kFeedScrolled, +}; + +namespace { +// Histogram name for the feed engagement types. +const char kDiscoverFeedEngagementTypeHistogram[] = + "ContentSuggestions.Feed.EngagementType"; + +// Minimum scrolling amount to record a FeedEngagementType::kFeedEngaged due to +// scrolling. +const int kMinScrollThreshold = 160; + +// Time between two metrics recorded to consider it a new session. +const int kMinutesBetweenSessions = 5; +} + +@interface ContentSuggestionsMetricsRecorder () + +// Tracking property to avoid duplicate recordings of +// FeedEngagementType::kFeedEngagedSimple. +@property(nonatomic, assign) BOOL engagedSimpleReported; +// Tracking property to avoid duplicate recordings of +// FeedEngagementType::kFeedEngaged. +@property(nonatomic, assign) BOOL engagedReported; +// Tracking property to avoid duplicate recordings of +// FeedEngagementType::kFeedScrolled. +@property(nonatomic, assign) BOOL scrolledReported; +// The time when the first metric is being recorded for this session. +@property(nonatomic, assign) base::Time sessionStartTime; + +@end + @implementation ContentSuggestionsMetricsRecorder @synthesize delegate = _delegate; @@ -36,6 +80,7 @@ suggestionsAbove + indexPath.item, [categoryWrapper category], sectionsShownAbove, indexPath.item, item.publishDate, item.score, action, /*is_prefetched=*/false, /*is_offline=*/false); + [self recordInteraction]; } - (void)onMenuOpenedForSuggestion:(ContentSuggestionsItem*)item @@ -49,6 +94,7 @@ ntp_snippets::metrics::OnSuggestionMenuOpened( suggestionsAbove + indexPath.item, [categoryWrapper category], indexPath.item, item.publishDate, item.score); + [self recordInteraction]; } #pragma mark - ContentSuggestionsMetricsRecording @@ -77,6 +123,7 @@ ntp_snippets::metrics::OnMoreButtonClicked([categoryWrapper category], position); + [self recordInteraction]; } - (void)onSuggestionDismissed:(CollectionViewItem<SuggestedContent>*)item @@ -90,6 +137,74 @@ ntp_snippets::metrics::OnSuggestionDismissed( suggestionsAbove + indexPath.item, [categoryWrapper category], indexPath.item, /*visited=*/false); + [self recordInteraction]; +} + +- (void)recordFeedScrolled:(int)scrollDistance { + DCHECK(!IsDiscoverFeedEnabled()); + [self recordEngagement:scrollDistance interacted:NO]; + + if (!self.scrolledReported) { + [self recordEngagementTypeHistogram:FeedEngagementType::kFeedScrolled]; + self.scrolledReported = YES; + } +} + +#pragma mark - Private + +// Records Feed engagement. +- (void)recordEngagement:(int)scrollDistance interacted:(BOOL)interacted { + scrollDistance = abs(scrollDistance); + + // Determine if this interaction is part of a new 'session'. + base::Time now = base::Time::Now(); + base::TimeDelta visitTimeout = + base::TimeDelta::FromMinutes(kMinutesBetweenSessions); + if (now - self.sessionStartTime > visitTimeout) { + [self finalizeSession]; + } + // Reset the last active time for session measurement. + self.sessionStartTime = now; + + // Report the user as engaged-simple if they have scrolled any amount or + // interacted with the card, and we have not already reported it for this + // chrome run. + if (!self.engagedSimpleReported && (scrollDistance > 0 || interacted)) { + [self recordEngagementTypeHistogram:FeedEngagementType::kFeedEngagedSimple]; + self.engagedSimpleReported = YES; + } + + // Report the user as engaged if they have scrolled more than the threshold or + // interacted with the card, and we have not already reported it this chrome + // run. + if (!self.engagedReported && + (scrollDistance > kMinScrollThreshold || interacted)) { + [self recordEngagementTypeHistogram:FeedEngagementType::kFeedEngaged]; + self.engagedReported = YES; + } +} + +// Records Engagement histograms of |engagementType|. +- (void)recordEngagementTypeHistogram:(FeedEngagementType)engagementType { + UMA_HISTOGRAM_ENUMERATION(kDiscoverFeedEngagementTypeHistogram, + engagementType); +} + +// Records any direct interaction with the Feed, this doesn't include scrolling. +- (void)recordInteraction { + DCHECK(!IsDiscoverFeedEnabled()); + [self recordEngagement:0 interacted:YES]; + [self recordEngagementTypeHistogram:FeedEngagementType::kFeedInteracted]; +} + +// Resets the session tracking values, this occurs if there's been +// kMinutesBetweenSessions minutes between sessions. +- (void)finalizeSession { + if (!self.engagedSimpleReported) + return; + self.engagedReported = NO; + self.engagedSimpleReported = NO; + self.scrolledReported = NO; } @end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recording.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recording.h index 6931f1a..2af2f0a 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recording.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_metrics_recording.h
@@ -34,6 +34,9 @@ atIndexPath:(NSIndexPath*)indexPath suggestionsShownAbove:(NSInteger)suggestionsAbove; +// Record metrics for when the user has scrolled |scrollDistance| in the Feed. +- (void)recordFeedScrolled:(int)scrollDistance; + @end #endif // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_METRICS_RECORDING_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm index 433b834b..b820090 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -750,8 +750,14 @@ willDecelerate:decelerate]; [self.panGestureHandler scrollViewDidEndDragging:scrollView willDecelerate:decelerate]; - [self.discoverFeedMetricsRecorder - recordFeedScrolled:scrollView.contentOffset.y - self.scrollStartPosition]; + if (IsDiscoverFeedEnabled()) { + [self.discoverFeedMetricsRecorder + recordFeedScrolled:scrollView.contentOffset.y - + self.scrollStartPosition]; + } else { + [self.metricsRecorder recordFeedScrolled:scrollView.contentOffset.y - + self.scrollStartPosition]; + } } - (void)scrollViewWillEndDragging:(UIScrollView*)scrollView
diff --git a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm index eba4187..1c1e653 100644 --- a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm +++ b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm
@@ -10,6 +10,7 @@ #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "components/feed/core/v2/common_enums.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -144,6 +145,7 @@ #pragma mark - Public - (void)recordFeedScrolled:(int)scrollDistance { + DCHECK(IsDiscoverFeedEnabled()); [self recordEngagement:scrollDistance interacted:NO]; if (!self.scrolledReported) { @@ -339,6 +341,7 @@ // Records any direct interaction with the Feed, this doesn't include scrolling. - (void)recordInteraction { + DCHECK(IsDiscoverFeedEnabled()); [self recordEngagement:0 interacted:YES]; [self recordEngagementTypeHistogram:FeedEngagementType::kFeedInteracted]; }
diff --git a/ios/chrome/browser/ui/history/BUILD.gn b/ios/chrome/browser/ui/history/BUILD.gn index f8a5e22..f0986c1 100644 --- a/ios/chrome/browser/ui/history/BUILD.gn +++ b/ios/chrome/browser/ui/history/BUILD.gn
@@ -101,6 +101,7 @@ "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:presentation", "//ios/chrome/browser/ui/table_view:styler", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/history/history_table_view_controller.mm b/ios/chrome/browser/ui/history/history_table_view_controller.mm index 9abf7511..fefeacf 100644 --- a/ios/chrome/browser/ui/history/history_table_view_controller.mm +++ b/ios/chrome/browser/ui/history/history_table_view_controller.mm
@@ -39,6 +39,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" #import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h" #import "ios/chrome/browser/ui/table_view/table_view_navigation_controller_constants.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/menu_util.h" #import "ios/chrome/browser/ui/util/multi_window_support.h" @@ -139,7 +140,10 @@ #pragma mark - ViewController Lifecycle. - (instancetype)init { - return [super initWithStyle:UITableViewStylePlain]; + UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) + ? ChromeTableViewStyle() + : UITableViewStylePlain; + return [super initWithStyle:style]; } - (void)viewWillAppear:(BOOL)animated {
diff --git a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn index 2fcb38e..27e265c7 100644 --- a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn +++ b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
@@ -42,7 +42,7 @@ "//ios/chrome/browser:pref_names", "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/main:browser_interface_provider", - "//ios/chrome/browser/ui/main:scene_state_header", + "//ios/chrome/browser/ui/main:observing_scene_agent", "//ios/chrome/browser/ui/util:multiwindow_util", "//ios/chrome/browser/web_state_list", "//ios/chrome/common/ui/reauthentication",
diff --git a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.h b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.h index ff17653..a0d516f3 100644 --- a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.h +++ b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.h
@@ -5,7 +5,7 @@ #ifndef IOS_CHROME_BROWSER_UI_INCOGNITO_REAUTH_INCOGNITO_REAUTH_SCENE_AGENT_H_ #define IOS_CHROME_BROWSER_UI_INCOGNITO_REAUTH_INCOGNITO_REAUTH_SCENE_AGENT_H_ -#import "ios/chrome/browser/ui/main/scene_state.h" +#import "ios/chrome/browser/ui/main/observing_scene_state_agent.h" #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_commands.h" @@ -27,7 +27,7 @@ // A scene agent that tracks the incognito authentication status for the current // scene. @interface IncognitoReauthSceneAgent - : NSObject <IncognitoReauthCommands, SceneAgent> + : ObservingSceneAgent <IncognitoReauthCommands> // Designated initializer. // The |reauthModule| is used for authentication.
diff --git a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm index 96407cb..67aeec1 100644 --- a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm +++ b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm
@@ -28,10 +28,7 @@ #pragma mark - IncognitoReauthSceneAgent -@interface IncognitoReauthSceneAgent () <SceneStateObserver> - -// Scene state this agent serves. -@property(nonatomic, weak) SceneState* sceneState; +@interface IncognitoReauthSceneAgent () // Set when the scene goes foreground. Checks if any incognito tabs were open. @property(nonatomic, assign) BOOL windowHadIncognitoContentOnForeground; @@ -144,14 +141,6 @@ } } -#pragma mark - SceneAgent - -- (void)setSceneState:(SceneState*)sceneState { - DCHECK(!_sceneState); - _sceneState = sceneState; - [sceneState addObserver:self]; -} - #pragma mark - private - (PrefService*)localState {
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn index 406ec0f..919d45e 100644 --- a/ios/chrome/browser/ui/main/BUILD.gn +++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -17,6 +17,22 @@ frameworks = [ "UIKit.framework" ] } +source_set("observing_scene_agent") { + configs += [ "//build/config/compiler:enable_arc" ] + + sources = [ + "observing_scene_state_agent.h", + "observing_scene_state_agent.mm", + ] + + frameworks = [ "UIKit.framework" ] + + public_deps = [ + ":scene_state_header", + ":scene_state_observer", + ] +} + source_set("scene_state_header") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ @@ -63,6 +79,7 @@ deps = [ ":incognito_blocker_scene_agent", ":main", + ":observing_scene_agent", ":scene_testing", "//base", "//components/infobars/core",
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm index d859111..3e6f259 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -433,12 +433,8 @@ } - (void)dispatchToEndpointsForBrowser:(Browser*)browser { - IncognitoReauthSceneAgent* reauthAgent = nil; - for (id agent in _sceneState.connectedAgents) { - if ([agent isKindOfClass:[IncognitoReauthSceneAgent class]]) { - reauthAgent = agent; - } - } + IncognitoReauthSceneAgent* reauthAgent = + [IncognitoReauthSceneAgent agentFromScene:_sceneState]; CommandDispatcher* dispatcher = browser->GetCommandDispatcher(); [dispatcher startDispatchingToTarget:reauthAgent
diff --git a/ios/chrome/browser/ui/main/default_browser_scene_agent.h b/ios/chrome/browser/ui/main/default_browser_scene_agent.h index 22234c5..95d94c4 100644 --- a/ios/chrome/browser/ui/main/default_browser_scene_agent.h +++ b/ios/chrome/browser/ui/main/default_browser_scene_agent.h
@@ -5,13 +5,13 @@ #ifndef IOS_CHROME_BROWSER_UI_MAIN_DEFAULT_BROWSER_SCENE_AGENT_H_ #define IOS_CHROME_BROWSER_UI_MAIN_DEFAULT_BROWSER_SCENE_AGENT_H_ -#import "ios/chrome/browser/ui/main/scene_state.h" +#import "ios/chrome/browser/ui/main/observing_scene_state_agent.h" @class CommandDispatcher; // A scene agent that shows the default browser fullscreen promo UI based on the // SceneActivationLevel changes. -@interface DefaultBrowserSceneAgent : NSObject <SceneAgent> +@interface DefaultBrowserSceneAgent : ObservingSceneAgent - (instancetype)initWithCommandDispatcher:(CommandDispatcher*)dispatcher;
diff --git a/ios/chrome/browser/ui/main/default_browser_scene_agent.mm b/ios/chrome/browser/ui/main/default_browser_scene_agent.mm index 07d17c75..446dc79 100644 --- a/ios/chrome/browser/ui/main/default_browser_scene_agent.mm +++ b/ios/chrome/browser/ui/main/default_browser_scene_agent.mm
@@ -16,11 +16,8 @@ #error "This file requires ARC support." #endif -@interface DefaultBrowserSceneAgent () <SceneStateObserver> +@interface DefaultBrowserSceneAgent () -// Scene to which this agent is attached. -// Implements the setter from SceneAgent protocol. -@property(nonatomic, weak) SceneState* sceneState; // Command Dispatcher. @property(nonatomic, weak) CommandDispatcher* dispatcher; @@ -34,14 +31,6 @@ return self; } -#pragma mark - SceneAgent - -- (void)setSceneState:(SceneState*)sceneState { - DCHECK(!_sceneState); - _sceneState = sceneState; - [sceneState addObserver:self]; -} - #pragma mark - SceneStateObserver - (void)sceneState:(SceneState*)sceneState
diff --git a/ios/chrome/browser/ui/main/observing_scene_state_agent.h b/ios/chrome/browser/ui/main/observing_scene_state_agent.h new file mode 100644 index 0000000..65624380 --- /dev/null +++ b/ios/chrome/browser/ui/main/observing_scene_state_agent.h
@@ -0,0 +1,30 @@ +// 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 IOS_CHROME_BROWSER_UI_MAIN_OBSERVING_SCENE_STATE_AGENT_H_ +#define IOS_CHROME_BROWSER_UI_MAIN_OBSERVING_SCENE_STATE_AGENT_H_ + +#import "ios/chrome/browser/ui/main/scene_state.h" +#import "ios/chrome/browser/ui/main/scene_state_observer.h" + +// A scene agent that acts as a scene state observer. +// Since most agents are also scene state observers, this is a convenience base +// class that provides universally useful functionality for scene agents. +@interface ObservingSceneAgent : NSObject <SceneAgent, SceneStateObserver> + +// Scene state this agent serves and observes. +// See also allowsMultipleAgentsOfSameTypePerScene. +@property(nonatomic, weak) SceneState* sceneState; + +// Returns the agent of this class iff one is already added to |sceneState|. ++ (instancetype)agentFromScene:(SceneState*)sceneState; + +// You can override this in your subclass. The default is NO. +// When calling -sceneState, if this is NO, the setter will DCHECK if +// another agent of its class is already added to the scene. ++ (BOOL)allowsMultipleAgentsOfSameTypePerScene; + +@end + +#endif // IOS_CHROME_BROWSER_UI_MAIN_OBSERVING_SCENE_STATE_AGENT_H_
diff --git a/ios/chrome/browser/ui/main/observing_scene_state_agent.mm b/ios/chrome/browser/ui/main/observing_scene_state_agent.mm new file mode 100644 index 0000000..ae2eb54 --- /dev/null +++ b/ios/chrome/browser/ui/main/observing_scene_state_agent.mm
@@ -0,0 +1,56 @@ +// 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 "ios/chrome/browser/ui/main/observing_scene_state_agent.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@implementation ObservingSceneAgent + +#pragma mark - SceneAgent + ++ (instancetype)agentFromScene:(SceneState*)sceneState { + for (id agent in sceneState.connectedAgents) { + if ([agent isKindOfClass:[self class]]) { + return agent; + } + } + + return nil; +} + ++ (BOOL)allowsMultipleAgentsOfSameTypePerScene { + return NO; +} + +#pragma mark - public + +- (void)setSceneState:(SceneState*)sceneState { + DCHECK(!_sceneState); + + // Sanity check: most of the time only one object of the same type per scene + // is required, and multiple of them is a programming error. + if (![[self class] allowsMultipleAgentsOfSameTypePerScene]) { + // Verify that no other agent of this class is added to the scene state. + // Note that this object is already added, and it's ok. + for (id agent in sceneState.connectedAgents) { + if ([agent isKindOfClass:[self class]]) { + DCHECK(agent == self); + } + } + } + + _sceneState = sceneState; + [sceneState addObserver:self]; +} + +#pragma mark - private + +- (void)dealloc { + [_sceneState removeObserver:self]; +} + +@end
diff --git a/ios/chrome/browser/ui/main/ui_blocker_scene_agent.h b/ios/chrome/browser/ui/main/ui_blocker_scene_agent.h index c8eac9c..19b475c 100644 --- a/ios/chrome/browser/ui/main/ui_blocker_scene_agent.h +++ b/ios/chrome/browser/ui/main/ui_blocker_scene_agent.h
@@ -5,11 +5,11 @@ #ifndef IOS_CHROME_BROWSER_UI_MAIN_UI_BLOCKER_SCENE_AGENT_H_ #define IOS_CHROME_BROWSER_UI_MAIN_UI_BLOCKER_SCENE_AGENT_H_ -#import "ios/chrome/browser/ui/main/scene_state.h" +#import "ios/chrome/browser/ui/main/observing_scene_state_agent.h" // A scene agent that shows a UI overlay on the scene based on modal overlay // show/hide events. -@interface UIBlockerSceneAgent : NSObject <SceneAgent> +@interface UIBlockerSceneAgent : ObservingSceneAgent @end #endif // IOS_CHROME_BROWSER_UI_MAIN_UI_BLOCKER_SCENE_AGENT_H_
diff --git a/ios/chrome/browser/ui/main/ui_blocker_scene_agent.mm b/ios/chrome/browser/ui/main/ui_blocker_scene_agent.mm index fb78fef1..55ca4b6e 100644 --- a/ios/chrome/browser/ui/main/ui_blocker_scene_agent.mm +++ b/ios/chrome/browser/ui/main/ui_blocker_scene_agent.mm
@@ -15,11 +15,7 @@ #error "This file requires ARC support." #endif -@interface UIBlockerSceneAgent () <SceneStateObserver> - -// Scene to which this agent is attached. -// Implements the setter from SceneAgent protocol. -@property(nonatomic, weak) SceneState* sceneState; +@interface UIBlockerSceneAgent () // TODO(crbug.com/1107873): Create a coordinator to own this view controller. // The view controller that blocks all interactions with the scene. @@ -30,14 +26,6 @@ @implementation UIBlockerSceneAgent -#pragma mark - SceneAgent - -- (void)setSceneState:(SceneState*)sceneState { - DCHECK(!_sceneState); - _sceneState = sceneState; - [sceneState addObserver:self]; -} - #pragma mark - SceneStateObserver - (void)sceneStateWillShowModalOverlay:(SceneState*)sceneState {
diff --git a/ios/chrome/browser/ui/ntp/OWNERS b/ios/chrome/browser/ui/ntp/OWNERS index fd55b2b..7bfb863 100644 --- a/ios/chrome/browser/ui/ntp/OWNERS +++ b/ios/chrome/browser/ui/ntp/OWNERS
@@ -1,3 +1,4 @@ rohitrao@chromium.org justincohen@chromium.org gambard@chromium.org +sczs@chromium.org
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm index 1a02c0c..40bcdaa3 100644 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm +++ b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm
@@ -409,6 +409,7 @@ TEST_F(PopupMenuMediatorTest, TestReadLaterDisabled) { const GURL kUrl("https://chromium.test"); web_state_->SetCurrentURL(kUrl); + CreatePrefs(); CreateMediator(PopupMenuTypeToolsMenu, /*is_incognito=*/NO, /*trigger_incognito_hint=*/NO); mediator_.webStateList = web_state_list_.get(); @@ -416,6 +417,7 @@ browser_.get(), OverlayModality::kWebContentArea); FakePopupMenuConsumer* consumer = [[FakePopupMenuConsumer alloc] init]; mediator_.popupMenu = consumer; + mediator_.prefService = prefs_.get(); SetUpActiveWebState(); ASSERT_TRUE(HasItem(consumer, kToolsMenuReadLater, /*enabled=*/YES)); @@ -512,12 +514,14 @@ web_state_->SetCurrentURL(url); CreateMediator(PopupMenuTypeToolsMenu, /*is_incognito=*/NO, /*trigger_incognito_hint=*/NO); + CreatePrefs(); SetUpBookmarks(); bookmarks::AddIfNotBookmarked(bookmark_model_, url, base::SysNSStringToUTF16(@"Test bookmark")); mediator_.webStateList = web_state_list_.get(); FakePopupMenuConsumer* consumer = [[FakePopupMenuConsumer alloc] init]; mediator_.popupMenu = consumer; + mediator_.prefService = prefs_.get(); EXPECT_TRUE(HasItem(consumer, kToolsMenuAddToBookmarks, /*enabled=*/YES));
diff --git a/ios/chrome/browser/ui/reading_list/BUILD.gn b/ios/chrome/browser/ui/reading_list/BUILD.gn index 72d63555..5617969 100644 --- a/ios/chrome/browser/ui/reading_list/BUILD.gn +++ b/ios/chrome/browser/ui/reading_list/BUILD.gn
@@ -126,6 +126,7 @@ "//ios/chrome/browser/ui/list_model", "//ios/chrome/browser/ui/material_components", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells/resources:table_view_cell_check_mark", "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm b/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm index 45557b24..e70c26f8 100644 --- a/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm +++ b/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm
@@ -31,6 +31,7 @@ #import "ios/chrome/browser/ui/reading_list/reading_list_toolbar_button_commands.h" #import "ios/chrome/browser/ui/reading_list/reading_list_toolbar_button_manager.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/menu_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" @@ -111,7 +112,10 @@ @synthesize needsSectionCleanupAfterEditing = _needsSectionCleanupAfterEditing; - (instancetype)init { - self = [super initWithStyle:UITableViewStylePlain]; + UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) + ? ChromeTableViewStyle() + : UITableViewStylePlain; + self = [super initWithStyle:style]; if (self) { _toolbarManager = [[ReadingListToolbarButtonManager alloc] init]; _toolbarManager.commandHandler = self;
diff --git a/ios/chrome/browser/ui/recent_tabs/BUILD.gn b/ios/chrome/browser/ui/recent_tabs/BUILD.gn index dee52c79a..f6291ab8 100644 --- a/ios/chrome/browser/ui/recent_tabs/BUILD.gn +++ b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
@@ -95,6 +95,7 @@ "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:presentation", "//ios/chrome/browser/ui/table_view:styler", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/url_loading",
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm index e490ee9..ce0af12 100644 --- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm +++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
@@ -52,6 +52,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" #import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/menu_util.h" #include "ios/chrome/browser/ui/util/ui_util.h" @@ -152,7 +153,10 @@ #pragma mark - Public Interface - (instancetype)init { - self = [super initWithStyle:UITableViewStylePlain]; + UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) + ? ChromeTableViewStyle() + : UITableViewStylePlain; + self = [super initWithStyle:style]; if (self) { _sessionState = SessionsSyncUserState::USER_SIGNED_OUT; _syncedSessions.reset(new synced_sessions::SyncedSessions());
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn index 460e2d5..8f18cd4 100644 --- a/ios/chrome/browser/ui/settings/BUILD.gn +++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -176,6 +176,7 @@ "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:styler", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/table_view/cells/resources:table_view_cell_check_mark", @@ -322,6 +323,7 @@ "//ios/chrome/browser/ui/settings/cells", "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:test_support", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/voice", "//ios/chrome/browser/web", "//ios/chrome/browser/web:test_support",
diff --git a/ios/chrome/browser/ui/settings/about_chrome_table_view_controller.mm b/ios/chrome/browser/ui/settings/about_chrome_table_view_controller.mm index 1c46529..d81bb74d 100644 --- a/ios/chrome/browser/ui/settings/about_chrome_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/about_chrome_table_view_controller.mm
@@ -21,6 +21,7 @@ #import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/common/channel_info.h" @@ -60,7 +61,7 @@ #pragma mark - Public - (instancetype)init { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_IOS_ABOUT_PRODUCT_NAME); }
diff --git a/ios/chrome/browser/ui/settings/autofill/BUILD.gn b/ios/chrome/browser/ui/settings/autofill/BUILD.gn index 137a5c12..6cd4765 100644 --- a/ios/chrome/browser/ui/settings/autofill/BUILD.gn +++ b/ios/chrome/browser/ui/settings/autofill/BUILD.gn
@@ -51,8 +51,8 @@ "//ios/chrome/browser/ui/settings/autofill/cells", "//ios/chrome/browser/ui/settings/cells", "//ios/chrome/browser/ui/settings/elements:enterprise_info_popover_view_controller", - "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm index d1d721b..dea998e 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm
@@ -10,11 +10,11 @@ #include "components/autofill/core/common/autofill_payments_features.h" #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller_delegate.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item_delegate.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -76,7 +76,7 @@ - (instancetype)initWithDelegate: (id<AddCreditCardViewControllerDelegate>)delegate { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _delegate = delegate;
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm index 2571b088..6fb78abf 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
@@ -25,8 +25,8 @@ #import "ios/chrome/browser/ui/settings/autofill/autofill_constants.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_edit_table_view_controller+protected.h" #import "ios/chrome/browser/ui/settings/cells/copied_to_chrome_item.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item_delegate.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_chromium_strings.h" @@ -70,7 +70,7 @@ - (instancetype)initWithCreditCard:(const autofill::CreditCard&)creditCard personalDataManager:(autofill::PersonalDataManager*)dataManager { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { DCHECK(dataManager);
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm index 588fe77..79ce5fe 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_table_view_controller.mm
@@ -25,12 +25,12 @@ #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #include "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -96,7 +96,7 @@ - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_AUTOFILL_PAYMENT_METHODS); self.shouldHideDoneButton = YES;
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm index e50b44d..f5276bbe 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.mm
@@ -19,8 +19,8 @@ #include "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_constants.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -96,7 +96,7 @@ personalDataManager:(autofill::PersonalDataManager*)dataManager { DCHECK(dataManager); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _personalDataManager = dataManager; _autofillProfile = profile;
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm index c004b1b..8374ec5a 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
@@ -23,7 +23,6 @@ #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h" @@ -31,6 +30,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -87,7 +87,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { DCHECK(browserState); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE); self.shouldHideDoneButton = YES;
diff --git a/ios/chrome/browser/ui/settings/bandwidth_management_table_view_controller.mm b/ios/chrome/browser/ui/settings/bandwidth_management_table_view_controller.mm index e11a44e..b019025 100644 --- a/ios/chrome/browser/ui/settings/bandwidth_management_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/bandwidth_management_table_view_controller.mm
@@ -14,12 +14,12 @@ #include "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/ui/settings/dataplan_usage_table_view_controller.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_chromium_strings.h" @@ -62,7 +62,7 @@ @implementation BandwidthManagementTableViewController - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_IOS_BANDWIDTH_MANAGEMENT_SETTINGS); _browserState = browserState;
diff --git a/ios/chrome/browser/ui/settings/block_popups_table_view_controller.mm b/ios/chrome/browser/ui/settings/block_popups_table_view_controller.mm index ecb32c9a..afe4dae 100644 --- a/ios/chrome/browser/ui/settings/block_popups_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/block_popups_table_view_controller.mm
@@ -21,11 +21,11 @@ #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/grit/ios_strings.h" #import "net/base/mac/url_conversions.h" @@ -81,7 +81,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { DCHECK(browserState); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browserState = browserState; HostContentSettingsMap* settingsMap =
diff --git a/ios/chrome/browser/ui/settings/content_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/content_settings_table_view_controller.mm index e923ca3..4415e103 100644 --- a/ios/chrome/browser/ui/settings/content_settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/content_settings_table_view_controller.mm
@@ -18,9 +18,9 @@ #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" #import "ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_multi_detail_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" #include "ios/chrome/grit/ios_strings.h" @@ -75,7 +75,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { DCHECK(browserState); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browserState = browserState; self.title = l10n_util::GetNSString(IDS_IOS_CONTENT_SETTINGS_TITLE);
diff --git a/ios/chrome/browser/ui/settings/dataplan_usage_table_view_controller.mm b/ios/chrome/browser/ui/settings/dataplan_usage_table_view_controller.mm index f449856..0a232cf9 100644 --- a/ios/chrome/browser/ui/settings/dataplan_usage_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/dataplan_usage_table_view_controller.mm
@@ -9,10 +9,10 @@ #include "components/prefs/pref_member.h" #include "components/prefs/pref_service.h" #import "ios/chrome/browser/prerender/prerender_pref.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" #include "ios/chrome/grit/ios_strings.h" @@ -83,7 +83,7 @@ - (instancetype)initWithPrefs:(PrefService*)prefs settingPref:(const char*)settingPreference title:(NSString*)title { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = title; _settingPreference.Init(settingPreference, prefs);
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn index ded64559..fec7b25 100644 --- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn +++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -72,6 +72,7 @@ "//ios/chrome/browser/ui/settings/sync/utils", "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util", "//ios/chrome/common/ui/colors",
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm index 1e219e0..0313157 100644 --- a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
@@ -32,12 +32,12 @@ #import "ios/chrome/browser/ui/icons/chrome_icon.h" #import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h" #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #include "ios/chrome/grit/ios_chromium_strings.h" @@ -129,7 +129,7 @@ DCHECK(browser); DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; _closeSettingsOnAddAccount = closeSettingsOnAddAccount;
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm index 2930ceb..c1e104e 100644 --- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm
@@ -30,7 +30,7 @@ #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.h" #import "ios/chrome/browser/ui/settings/google_services/sync_error_settings_command_handler.h" #import "ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" @@ -96,7 +96,7 @@ self.authService->WaitUntilCacheIsPopulated(); GoogleServicesSettingsViewController* viewController = [[GoogleServicesSettingsViewController alloc] - initWithStyle:SettingsTableViewStyle()]; + initWithStyle:ChromeTableViewStyle()]; viewController.presentationDelegate = self; self.viewController = viewController; SyncSetupService* syncSetupService =
diff --git a/ios/chrome/browser/ui/settings/import_data_table_view_controller.mm b/ios/chrome/browser/ui/settings/import_data_table_view_controller.mm index cedab48..403649fe 100644 --- a/ios/chrome/browser/ui/settings/import_data_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/import_data_table_view_controller.mm
@@ -8,9 +8,9 @@ #import "base/mac/foundation_util.h" #include "base/strings/sys_string_conversions.h" #import "ios/chrome/browser/ui/settings/cells/settings_multiline_detail_item.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" @@ -61,7 +61,7 @@ DCHECK(fromEmail); DCHECK(toEmail); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _delegate = delegate; _fromEmail = [fromEmail copy];
diff --git a/ios/chrome/browser/ui/settings/language/BUILD.gn b/ios/chrome/browser/ui/settings/language/BUILD.gn index 7dbe345..c3a2d28 100644 --- a/ios/chrome/browser/ui/settings/language/BUILD.gn +++ b/ios/chrome/browser/ui/settings/language/BUILD.gn
@@ -54,8 +54,8 @@ "//ios/chrome/browser/ui/settings/cells:public", "//ios/chrome/browser/ui/settings/elements:enterprise_info_popover_view_controller", "//ios/chrome/browser/ui/settings/language/cells", - "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants",
diff --git a/ios/chrome/browser/ui/settings/language/add_language_table_view_controller.mm b/ios/chrome/browser/ui/settings/language/add_language_table_view_controller.mm index af52fd2..63429402 100644 --- a/ios/chrome/browser/ui/settings/language/add_language_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/language/add_language_table_view_controller.mm
@@ -11,8 +11,8 @@ #import "ios/chrome/browser/ui/settings/language/language_settings_data_source.h" #import "ios/chrome/browser/ui/settings/language/language_settings_histograms.h" #import "ios/chrome/browser/ui/settings/language/language_settings_ui_constants.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/table_view_navigation_controller_constants.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -66,7 +66,7 @@ DCHECK(dataSource); DCHECK(delegate); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _dataSource = dataSource; _delegate = delegate;
diff --git a/ios/chrome/browser/ui/settings/language/language_details_table_view_controller.mm b/ios/chrome/browser/ui/settings/language/language_details_table_view_controller.mm index 3ef38de..a9c6455 100644 --- a/ios/chrome/browser/ui/settings/language/language_details_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/language/language_details_table_view_controller.mm
@@ -11,9 +11,9 @@ #import "ios/chrome/browser/ui/settings/language/language_settings_data_source.h" #import "ios/chrome/browser/ui/settings/language/language_settings_histograms.h" #import "ios/chrome/browser/ui/settings/language/language_settings_ui_constants.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -57,7 +57,7 @@ DCHECK(languageItem); DCHECK(delegate); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _languageItem = languageItem; _delegate = delegate;
diff --git a/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm index d3ca5a4..51478c2 100644 --- a/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm
@@ -26,12 +26,12 @@ #import "ios/chrome/browser/ui/settings/language/language_settings_histograms.h" #import "ios/chrome/browser/ui/settings/language/language_settings_ui_constants.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" @@ -95,7 +95,7 @@ DCHECK(dataSource); DCHECK(commandHandler); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _dataSource = dataSource; _commandHandler = commandHandler;
diff --git a/ios/chrome/browser/ui/settings/password/BUILD.gn b/ios/chrome/browser/ui/settings/password/BUILD.gn index c80b267..4283f76 100644 --- a/ios/chrome/browser/ui/settings/password/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/BUILD.gn
@@ -32,7 +32,7 @@ "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/coordinators:chrome_coordinators", "//ios/chrome/browser/ui/settings/password/password_details", - "//ios/chrome/browser/ui/settings/utils", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/common", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/reauthentication", @@ -87,6 +87,7 @@ "//ios/chrome/browser/ui/settings/password/password_details", "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn index be9b518..b48ddcca 100644 --- a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
@@ -25,8 +25,8 @@ "//ios/chrome/browser/ui/alert_coordinator", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/coordinators:chrome_coordinators", - "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/reauthentication",
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm index a6cd13f1..da4610b5 100644 --- a/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm +++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm
@@ -21,7 +21,7 @@ #import "ios/chrome/browser/ui/settings/password/password_details/password_details_handler.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_mediator.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h" #include "ios/chrome/grit/ios_strings.h" @@ -89,7 +89,7 @@ - (void)start { self.viewController = [[PasswordDetailsTableViewController alloc] - initWithStyle:SettingsTableViewStyle()]; + initWithStyle:ChromeTableViewStyle()]; self.mediator = [[PasswordDetailsMediator alloc] initWithPassword:_password passwordCheckManager:_manager];
diff --git a/ios/chrome/browser/ui/settings/password/password_issues_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_issues_coordinator.mm index ce2d6cb..bfc4d4e 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues_coordinator.mm +++ b/ios/chrome/browser/ui/settings/password/password_issues_coordinator.mm
@@ -15,7 +15,7 @@ #import "ios/chrome/browser/ui/settings/password/password_issues_mediator.h" #import "ios/chrome/browser/ui/settings/password/password_issues_presenter.h" #import "ios/chrome/browser/ui/settings/password/password_issues_table_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h" #include "ui/base/l10n/l10n_util.h" @@ -67,7 +67,7 @@ DCHECK(_manager); self.viewController = [[PasswordIssuesTableViewController alloc] - initWithStyle:SettingsTableViewStyle()]; + initWithStyle:ChromeTableViewStyle()]; self.mediator = [[PasswordIssuesMediator alloc] initWithPasswordCheckManager:_manager];
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm index 97d0791..22624c9 100644 --- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller.mm
@@ -51,6 +51,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/table_view_navigation_controller_constants.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" @@ -247,7 +248,7 @@ - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; _browserState = browser->GetBrowserState();
diff --git a/ios/chrome/browser/ui/settings/privacy/BUILD.gn b/ios/chrome/browser/ui/settings/privacy/BUILD.gn index 9b378b0f..d3efc5f 100644 --- a/ios/chrome/browser/ui/settings/privacy/BUILD.gn +++ b/ios/chrome/browser/ui/settings/privacy/BUILD.gn
@@ -36,6 +36,7 @@ "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:styler", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/common/ui/colors",
diff --git a/ios/chrome/browser/ui/settings/privacy/handoff_table_view_controller.mm b/ios/chrome/browser/ui/settings/privacy/handoff_table_view_controller.mm index 0e5f1f34..dbc30bb 100644 --- a/ios/chrome/browser/ui/settings/privacy/handoff_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/privacy/handoff_table_view_controller.mm
@@ -11,8 +11,8 @@ #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -51,7 +51,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { DCHECK(browserState); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_CONTINUITY_LABEL); _handoffEnabled = [[PrefBackedBoolean alloc]
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm index ef501b7..91b2e070 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
@@ -26,9 +26,9 @@ #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_protocol.h" #include "ios/chrome/grit/ios_chromium_strings.h" @@ -100,7 +100,7 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthModule { DCHECK(browser); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; _reauthModule = reauthModule;
diff --git a/ios/chrome/browser/ui/settings/safety_check/BUILD.gn b/ios/chrome/browser/ui/settings/safety_check/BUILD.gn index a3007fc0..c8e5d4f 100644 --- a/ios/chrome/browser/ui/settings/safety_check/BUILD.gn +++ b/ios/chrome/browser/ui/settings/safety_check/BUILD.gn
@@ -64,6 +64,7 @@ "//ios/chrome/browser/ui/settings/password", "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/upgrade",
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm index 91db7411..5673e17 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
@@ -37,10 +37,10 @@ #import "ios/chrome/browser/ui/settings/safety_check/safety_check_utils.h" #import "ios/chrome/browser/ui/settings/utils/observable_boolean.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/browser/upgrade/upgrade_constants.h"
diff --git a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm index cceeff5..53b81bda 100644 --- a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
@@ -19,9 +19,9 @@ #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h" #include "ios/chrome/browser/search_engines/template_url_service_factory.h" #import "ios/chrome/browser/ui/settings/cells/search_engine_item.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/favicon/favicon_view.h" #include "ios/chrome/grit/ios_strings.h" @@ -83,7 +83,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { DCHECK(browserState); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _templateURLService = ios::TemplateURLServiceFactory::GetForBrowserState(browserState);
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm index 1a61bea..befb055 100644 --- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -21,7 +21,7 @@ #import "ios/chrome/browser/ui/settings/password/passwords_coordinator.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller.h" #import "ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" @@ -292,6 +292,11 @@ self.view.backgroundColor = UIColor.cr_systemBackgroundColor; if (base::FeatureList::IsEnabled(kSettingsRefresh)) { + self.navigationBar.translucent = NO; + self.toolbar.translucent = NO; + self.navigationBar.barTintColor = + [UIColor colorNamed:kSecondaryBackgroundColor]; + self.toolbar.barTintColor = [UIColor colorNamed:kSecondaryBackgroundColor]; self.view.backgroundColor = [UIColor colorNamed:kSecondaryBackgroundColor]; }
diff --git a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm index be07bb4..5ce7ed5 100644 --- a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm
@@ -121,13 +121,7 @@ action:nil]; [self setToolbarItems:@[ flexibleSpace, self.deleteButton, flexibleSpace ] animated:YES]; - if (base::FeatureList::IsEnabled(kSettingsRefresh)) { - self.styler.tableViewBackgroundColor = - [UIColor colorNamed:kSecondaryBackgroundColor]; - } else { - self.styler.tableViewBackgroundColor = - UIColor.cr_systemGroupedBackgroundColor; - } + [super viewDidLoad]; self.styler.cellBackgroundColor = UIColor.cr_secondarySystemGroupedBackgroundColor;
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm index 8846ab1..ede7673 100644 --- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -77,7 +77,6 @@ #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h" #import "ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/settings/voice_search_table_view_controller.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #include "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" @@ -86,6 +85,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/browser/upgrade/upgrade_utils.h" @@ -287,7 +287,7 @@ DCHECK(browser); DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; _browserState = _browser->GetBrowserState();
diff --git a/ios/chrome/browser/ui/settings/sync/BUILD.gn b/ios/chrome/browser/ui/settings/sync/BUILD.gn index ffc333ec..574a6645 100644 --- a/ios/chrome/browser/ui/settings/sync/BUILD.gn +++ b/ios/chrome/browser/ui/settings/sync/BUILD.gn
@@ -44,6 +44,7 @@ "//ios/chrome/browser/ui/settings/sync/utils", "//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/table_view", + "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm index 1ffc7cc..3d6e4a0e 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
@@ -33,9 +33,9 @@ #import "ios/chrome/browser/ui/settings/cells/passphrase_error_item.h" #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/multi_window_support.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" @@ -87,7 +87,7 @@ - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; ChromeBrowserState* browserState = self.browser->GetBrowserState();
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm index cb07fca..bf9f18f 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm
@@ -22,12 +22,12 @@ #import "ios/chrome/browser/sync/sync_observer_bridge.h" #import "ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.h" #import "ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" @@ -69,7 +69,7 @@ - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _browser = browser; ChromeBrowserState* browserState = self.browser->GetBrowserState();
diff --git a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm index 17d87ca..4e1357c 100644 --- a/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm +++ b/ios/chrome/browser/ui/settings/table_cell_catalog_view_controller.mm
@@ -18,7 +18,6 @@ #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_image_item.h" @@ -32,6 +31,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" @@ -93,7 +93,7 @@ @implementation TableCellCatalogViewController - (instancetype)init { - return [super initWithStyle:SettingsTableViewStyle()]; + return [super initWithStyle:ChromeTableViewStyle()]; } - (void)viewDidLoad {
diff --git a/ios/chrome/browser/ui/settings/translate_table_view_controller.mm b/ios/chrome/browser/ui/settings/translate_table_view_controller.mm index 92c095c..ddda843 100644 --- a/ios/chrome/browser/ui/settings/translate_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/translate_table_view_controller.mm
@@ -23,10 +23,10 @@ #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_chromium_strings.h" @@ -73,7 +73,7 @@ - (instancetype)initWithPrefs:(PrefService*)prefs { DCHECK(prefs); - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { _prefs = prefs; _translationEnabled = [[PrefBackedBoolean alloc]
diff --git a/ios/chrome/browser/ui/settings/utils/settings_utils.h b/ios/chrome/browser/ui/settings/utils/settings_utils.h index 29a9964..a3d41bf 100644 --- a/ios/chrome/browser/ui/settings/utils/settings_utils.h +++ b/ios/chrome/browser/ui/settings/utils/settings_utils.h
@@ -16,8 +16,4 @@ ProceduralBlockWithURL BlockToOpenURL(UIResponder* responder, id<ApplicationCommands> handler); -// Returns an UITableViewStyle according to the state of the kSettingsRefresh -// flag and the width of the current device. -UITableViewStyle SettingsTableViewStyle(); - #endif // IOS_CHROME_BROWSER_UI_SETTINGS_UTILS_SETTINGS_UTILS_H_
diff --git a/ios/chrome/browser/ui/settings/utils/settings_utils.mm b/ios/chrome/browser/ui/settings/utils/settings_utils.mm index d851cb8c..cf906cec 100644 --- a/ios/chrome/browser/ui/settings/utils/settings_utils.mm +++ b/ios/chrome/browser/ui/settings/utils/settings_utils.mm
@@ -6,8 +6,6 @@ #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" -#include "ios/chrome/browser/ui/ui_feature_flags.h" -#import "ios/chrome/browser/ui/util/ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -27,11 +25,3 @@ }; return [blockToOpenURL copy]; } - -UITableViewStyle SettingsTableViewStyle() { - if (@available(iOS 13, *)) { - if (base::FeatureList::IsEnabled(kSettingsRefresh) && !IsSmallDevice()) - return UITableViewStyleInsetGrouped; - } - return UITableViewStyleGrouped; -}
diff --git a/ios/chrome/browser/ui/settings/voice_search_table_view_controller.mm b/ios/chrome/browser/ui/settings/voice_search_table_view_controller.mm index 459af60..8e197592 100644 --- a/ios/chrome/browser/ui/settings/voice_search_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/voice_search_table_view_controller.mm
@@ -13,8 +13,8 @@ #include "components/prefs/pref_service.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" -#import "ios/chrome/browser/ui/settings/utils/settings_utils.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" +#import "ios/chrome/browser/ui/table_view/table_view_utils.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #include "ios/chrome/browser/voice/speech_input_locale_config.h" #include "ios/chrome/grit/ios_strings.h" @@ -55,7 +55,7 @@ @implementation VoiceSearchTableViewController - (instancetype)initWithPrefs:(PrefService*)prefs { - self = [super initWithStyle:SettingsTableViewStyle()]; + self = [super initWithStyle:ChromeTableViewStyle()]; if (self) { self.title = l10n_util::GetNSString(IDS_IOS_VOICE_SEARCH_SETTING_TITLE); _prefs = prefs;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm index 86f82b9..0b9bb24c 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm
@@ -369,9 +369,9 @@ GridCell* gridCell = base::mac::ObjCCastStrict<GridCell>(cell); [self configureCell:gridCell withItem:item]; } - // Set the z index of cells so that lower rows are superposed during - // transitions between grid and horizontal layouts. - cell.layer.zPosition = itemIndex; + // Set the z index of cells so that lower rows are moving behind the upper + // rows during transitions between grid and horizontal layouts. + cell.layer.zPosition = self.items.count - itemIndex; #if defined(__IPHONE_13_4) if (@available(iOS 13.4, *)) { @@ -710,6 +710,8 @@ [self performModelUpdates:modelUpdates collectionViewUpdates:collectionViewUpdates collectionViewUpdatesCompletion:completion]; + + [self updateVisibleCellZIndex]; } - (void)removeItemWithID:(NSString*)removedItemID @@ -750,6 +752,8 @@ [self performModelUpdates:modelUpdates collectionViewUpdates:collectionViewUpdates collectionViewUpdatesCompletion:completion]; + + [self updateVisibleCellZIndex]; } - (void)selectItemWithID:(NSString*)selectedItemID { @@ -804,6 +808,8 @@ [self performModelUpdates:modelUpdates collectionViewUpdates:collectionViewUpdates collectionViewUpdatesCompletion:completion]; + + [self updateVisibleCellZIndex]; } #pragma mark - LayoutSwitcher @@ -1010,6 +1016,19 @@ 1 - offset / kScrollThresholdForPlusSignButtonHide, 0, 1); } +// Updates the ZIndex of the visible cells to have the cells of the upper rows +// be above the cell of the lower rows. +- (void)updateVisibleCellZIndex { + for (NSIndexPath* indexPath in self.collectionView + .indexPathsForVisibleItems) { + // Set the z index of cells so that lower rows are moving behind the upper + // rows during transitions between grid and horizontal layouts. + UICollectionViewCell* cell = + [self.collectionView cellForItemAtIndexPath:indexPath]; + cell.layer.zPosition = self.items.count - indexPath.item; + } +} + #pragma mark - Custom Gesture-based Reordering // Handle the long-press gesture used to reorder cells in the collection view.
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm index fafc884..86f191c 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
@@ -306,14 +306,9 @@ #pragma mark - ChromeCoordinator - (void)start { - IncognitoReauthSceneAgent* reauthAgent = nil; - for (id agent in SceneStateBrowserAgent::FromBrowser(_incognitoBrowser) - ->GetSceneState() - .connectedAgents) { - if ([agent isKindOfClass:[IncognitoReauthSceneAgent class]]) { - reauthAgent = agent; - } - } + IncognitoReauthSceneAgent* reauthAgent = [IncognitoReauthSceneAgent + agentFromScene:SceneStateBrowserAgent::FromBrowser(_incognitoBrowser) + ->GetSceneState()]; [self.dispatcher startDispatchingToTarget:reauthAgent forProtocol:@protocol(IncognitoReauthCommands)];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_transition_egtest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_transition_egtest.mm index be655b6..1e04706 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_transition_egtest.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_transition_egtest.mm
@@ -7,6 +7,8 @@ #include "base/bind.h" #include "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/ui/tab_switcher/tab_grid/features.h" +#import "ios/chrome/browser/ui/util/ui_util.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" @@ -21,6 +23,7 @@ #error "This file requires ARC support." #endif +using chrome_test_util::TabGridCloseAllButton; using chrome_test_util::TabGridDoneButton; using chrome_test_util::TabGridIncognitoTabsPanelButton; using chrome_test_util::TabGridNewIncognitoTabButton; @@ -70,6 +73,12 @@ // to fail. @implementation TabSwitcherTransitionTestCase +- (AppLaunchConfiguration)appConfigurationForTestCase { + AppLaunchConfiguration config; + config.features_enabled.push_back(kEnableCloseAllTabsConfirmation); + return config; +} + // Rotate the device back to portrait if needed, since some tests attempt to run // in landscape. - (void)tearDown { @@ -353,4 +362,45 @@ waitForWebStateContainingText:base::SysNSStringToUTF8(tab_title)]; } +// Tests navigating through the switcher displays correctly the Done button. +- (void)testNavigateSwitcherDoneButton { + // Rotate the iPhone in lanscape mode in order to see the Done button when the + // confirmation action sheet is presented. + if (!IsIPadIdiom()) { + [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeLeft + error:nil]; + } + + // Check that the Done button is not greyed out when the tab grid is not + // empty. + [ChromeEarlGrey showTabSwitcher]; + [[EarlGrey selectElementWithMatcher:TabGridDoneButton()] + assertWithMatcher:grey_accessibilityTrait(UIAccessibilityTraitButton)]; + + // Check that the Done button is greyed out when the close all tabs + // confirmation is displayed. + [[EarlGrey selectElementWithMatcher:TabGridCloseAllButton()] + performAction:grey_tap()]; + [[EarlGrey selectElementWithMatcher:TabGridDoneButton()] + assertWithMatcher:grey_accessibilityTrait( + UIAccessibilityTraitNotEnabled)]; + + // Cancel the close all tabs confirmation & check that the Done button is not + // greyed out. + [[EarlGrey selectElementWithMatcher:chrome_test_util::TabGridCellAtIndex(0)] + performAction:grey_tap()]; + [[EarlGrey selectElementWithMatcher:TabGridDoneButton()] + assertWithMatcher:grey_accessibilityTrait(UIAccessibilityTraitButton)]; + + // Close all tabs & check that the Done button is greyed out. + [ChromeEarlGrey closeAllNormalTabs]; + [[EarlGrey selectElementWithMatcher:TabGridDoneButton()] + assertWithMatcher:grey_accessibilityTrait( + UIAccessibilityTraitNotEnabled)]; + + if (!IsIPadIdiom()) { + [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortrait error:nil]; + } +} + @end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm index 3bbc4fb..092e98b3 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm
@@ -130,6 +130,8 @@ @property(nonatomic, weak) UIBarButtonItem* doneButton; @property(nonatomic, weak) UIBarButtonItem* closeAllButton; @property(nonatomic, assign) BOOL undoCloseAllAvailable; +// Bool informing if the confirmation action sheet is displayed. +@property(nonatomic, assign) BOOL closeAllConfirmationDisplayed; @property(nonatomic, assign) TabGridConfiguration configuration; // Setting the current page doesn't scroll the scroll view; use // -scrollToPage:animated: for that. @@ -160,6 +162,7 @@ _regularTabsViewController = [[GridViewController alloc] init]; _incognitoTabsViewController = [[GridViewController alloc] init]; _remoteTabsViewController = [[RecentTabsTableViewController alloc] init]; + _closeAllConfirmationDisplayed = NO; _pageViewControllers = @[ _incognitoTabsViewController, _regularTabsViewController, _remoteTabsViewController @@ -414,7 +417,8 @@ } - (void)closeAllTabsConfirmationClosed { - self.topToolbar.pageControl.userInteractionEnabled = YES; + self.closeAllConfirmationDisplayed = NO; + [self configureButtonsForActiveAndCurrentPage]; } #pragma mark - Public Properties @@ -1068,6 +1072,10 @@ NOTREACHED() << "The done button should not be configured based on the " "contents of the recent tabs page."; } + + if (!self.closeAllConfirmationDisplayed) + self.topToolbar.pageControl.userInteractionEnabled = YES; + // The Done button should have the same behavior as the other buttons on the // top Toolbar. BOOL incognitoTabsNeedsAuth = @@ -1498,6 +1506,7 @@ // toolbar in order to avoid alignment issues when changing the device // orientation to landscape in multi window mode. UIBarButtonItem* buttonAnchor = self.topToolbar.leadingButton; + self.closeAllConfirmationDisplayed = YES; self.topToolbar.pageControl.userInteractionEnabled = NO; switch (self.currentPage) { case TabGridPageIncognitoTabs:
diff --git a/ios/chrome/browser/ui/table_view/BUILD.gn b/ios/chrome/browser/ui/table_view/BUILD.gn index 25ff2706..1fb3642 100644 --- a/ios/chrome/browser/ui/table_view/BUILD.gn +++ b/ios/chrome/browser/ui/table_view/BUILD.gn
@@ -20,6 +20,7 @@ ":styler", ":views", "//base", + "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/list_model", "//ios/chrome/browser/ui/material_components", "//ios/chrome/common/ui/colors", @@ -48,6 +49,7 @@ "chrome_table_view_styler.mm", ] public_deps = [ + "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/common/ui/colors", ] @@ -130,3 +132,15 @@ "//testing/gtest", ] } + +source_set("utils") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "table_view_utils.h", + "table_view_utils.mm", + ] + deps = [ + "//ios/chrome/browser/ui:feature_flags", + "//ios/chrome/browser/ui/util", + ] +}
diff --git a/ios/chrome/browser/ui/table_view/chrome_table_view_styler.mm b/ios/chrome/browser/ui/table_view/chrome_table_view_styler.mm index dcb83af..4f2d4fe 100644 --- a/ios/chrome/browser/ui/table_view/chrome_table_view_styler.mm +++ b/ios/chrome/browser/ui/table_view/chrome_table_view_styler.mm
@@ -4,8 +4,10 @@ #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -15,7 +17,13 @@ - (instancetype)init { if ((self = [super init])) { - _tableViewBackgroundColor = UIColor.cr_systemBackgroundColor; + if (base::FeatureList::IsEnabled(kSettingsRefresh)) { + _tableViewBackgroundColor = + [UIColor colorNamed:kSecondaryBackgroundColor]; + _cellBackgroundColor = UIColor.cr_secondarySystemGroupedBackgroundColor; + } else { + _tableViewBackgroundColor = UIColor.cr_systemGroupedBackgroundColor; + } } return self; }
diff --git a/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm b/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm index e148122c..416f3ef 100644 --- a/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm +++ b/ios/chrome/browser/ui/table_view/table_view_navigation_controller.mm
@@ -7,7 +7,9 @@ #include "base/mac/foundation_util.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -32,12 +34,19 @@ [super viewDidLoad]; self.navigationBar.translucent = NO; - self.navigationBar.barTintColor = UIColor.cr_systemBackgroundColor; - self.view.backgroundColor = UIColor.cr_systemBackgroundColor; self.navigationBar.prefersLargeTitles = YES; - self.toolbar.translucent = NO; - self.toolbar.barTintColor = UIColor.cr_systemBackgroundColor; + + if (base::FeatureList::IsEnabled(kSettingsRefresh)) { + self.navigationBar.barTintColor = + [UIColor colorNamed:kSecondaryBackgroundColor]; + self.toolbar.barTintColor = [UIColor colorNamed:kSecondaryBackgroundColor]; + self.view.backgroundColor = [UIColor colorNamed:kSecondaryBackgroundColor]; + } else { + self.navigationBar.barTintColor = UIColor.cr_systemBackgroundColor; + self.toolbar.barTintColor = UIColor.cr_systemBackgroundColor; + self.view.backgroundColor = UIColor.cr_systemBackgroundColor; + } } @end
diff --git a/ios/chrome/browser/ui/table_view/table_view_utils.h b/ios/chrome/browser/ui/table_view/table_view_utils.h new file mode 100644 index 0000000..ecda7866 --- /dev/null +++ b/ios/chrome/browser/ui/table_view/table_view_utils.h
@@ -0,0 +1,13 @@ +// 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 IOS_CHROME_BROWSER_UI_TABLE_VIEW_TABLE_VIEW_UTILS_H_ +#define IOS_CHROME_BROWSER_UI_TABLE_VIEW_TABLE_VIEW_UTILS_H_ + +#import <UIKit/UIKit.h> + +// Returns an UITableViewStyle according to the width of the current device. +UITableViewStyle ChromeTableViewStyle(); + +#endif // IOS_CHROME_BROWSER_UI_TABLE_VIEW_TABLE_VIEW_UTILS_H_
diff --git a/ios/chrome/browser/ui/table_view/table_view_utils.mm b/ios/chrome/browser/ui/table_view/table_view_utils.mm new file mode 100644 index 0000000..4d180ed --- /dev/null +++ b/ios/chrome/browser/ui/table_view/table_view_utils.mm
@@ -0,0 +1,20 @@ +// 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 "ios/chrome/browser/ui/table_view/table_view_utils.h" + +#include "ios/chrome/browser/ui/ui_feature_flags.h" +#import "ios/chrome/browser/ui/util/ui_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +UITableViewStyle ChromeTableViewStyle() { + if (@available(iOS 13, *)) { + if (base::FeatureList::IsEnabled(kSettingsRefresh) && !IsSmallDevice()) + return UITableViewStyleInsetGrouped; + } + return UITableViewStyleGrouped; +}
diff --git a/media/base/mac/color_space_util_mac.h b/media/base/mac/color_space_util_mac.h index 4089c6d..ab2a4459 100644 --- a/media/base/mac/color_space_util_mac.h +++ b/media/base/mac/color_space_util_mac.h
@@ -19,7 +19,7 @@ CVImageBufferRef image_buffer); MEDIA_EXPORT gfx::ColorSpace GetFormatDescriptionColorSpace( - CMFormatDescriptionRef format_description) API_AVAILABLE(macos(10.11)); + CMFormatDescriptionRef format_description); MEDIA_EXPORT CFDataRef GenerateContentLightLevelInfo(const gfx::HDRMetadata& hdr_metadata);
diff --git a/media/base/mac/color_space_util_mac.mm b/media/base/mac/color_space_util_mac.mm index a3fa3b93..799cfe29 100644 --- a/media/base/mac/color_space_util_mac.mm +++ b/media/base/mac/color_space_util_mac.mm
@@ -57,14 +57,11 @@ supported_primaries.push_back( {kCVImageBufferColorPrimaries_SMPTE_C, kCMFormatDescriptionColorPrimaries_SMPTE_C, - gfx::ColorSpace::PrimaryID::SMPTE240M}); - if (@available(macos 10.11, *)) { - supported_primaries.push_back( - {kCVImageBufferColorPrimaries_ITU_R_2020, - kCMFormatDescriptionColorPrimaries_ITU_R_2020, - gfx::ColorSpace::PrimaryID::BT2020}); - } + supported_primaries.push_back( + {kCVImageBufferColorPrimaries_ITU_R_2020, + kCMFormatDescriptionColorPrimaries_ITU_R_2020, + gfx::ColorSpace::PrimaryID::BT2020}); return supported_primaries; }()); @@ -88,10 +85,6 @@ static const base::NoDestructor<std::vector<CVImageTransferFn>> kSupportedTransferFuncs([] { std::vector<CVImageTransferFn> supported_transfer_funcs; - // The constants kCMFormatDescriptionTransferFunction_ITU_R_709_2, - // SMPTE_240M_1995, and UseGamma will compile against macOS 10.10 - // because they are #defined to their kCVImageBufferTransferFunction - // equivalents. They are technically not present until macOS 10.11. supported_transfer_funcs.push_back( {kCVImageBufferTransferFunction_ITU_R_709_2, kCMFormatDescriptionTransferFunction_ITU_R_709_2, @@ -104,12 +97,10 @@ {kCVImageBufferTransferFunction_UseGamma, kCMFormatDescriptionTransferFunction_UseGamma, gfx::ColorSpace::TransferID::CUSTOM}); - if (@available(macos 10.11, *)) { - supported_transfer_funcs.push_back( - {kCVImageBufferTransferFunction_ITU_R_2020, - kCMFormatDescriptionTransferFunction_ITU_R_2020, - gfx::ColorSpace::TransferID::BT2020_10}); - } + supported_transfer_funcs.push_back( + {kCVImageBufferTransferFunction_ITU_R_2020, + kCMFormatDescriptionTransferFunction_ITU_R_2020, + gfx::ColorSpace::TransferID::BT2020_10}); if (@available(macos 10.12, *)) { supported_transfer_funcs.push_back( {kCVImageBufferTransferFunction_SMPTE_ST_428_1, @@ -200,12 +191,10 @@ {kCVImageBufferYCbCrMatrix_SMPTE_240M_1995, kCMFormatDescriptionYCbCrMatrix_SMPTE_240M_1995, gfx::ColorSpace::MatrixID::SMPTE240M}); - if (@available(macos 10.11, *)) { - supported_matrices.push_back( - {kCVImageBufferYCbCrMatrix_ITU_R_2020, - kCMFormatDescriptionYCbCrMatrix_ITU_R_2020, - gfx::ColorSpace::MatrixID::BT2020_NCL}); - } + supported_matrices.push_back( + {kCVImageBufferYCbCrMatrix_ITU_R_2020, + kCMFormatDescriptionYCbCrMatrix_ITU_R_2020, + gfx::ColorSpace::MatrixID::BT2020_NCL}); return supported_matrices; }());
diff --git a/media/base/pipeline_status.cc b/media/base/pipeline_status.cc index 17e47f1e..a8e2487 100644 --- a/media/base/pipeline_status.cc +++ b/media/base/pipeline_status.cc
@@ -8,6 +8,96 @@ namespace media { +base::Optional<PipelineStatus> StatusCodeToPipelineStatus(StatusCode status) { + switch (status) { + case StatusCode::kOk: + return PIPELINE_OK; + case StatusCode::kPipelineErrorNetwork: + return PIPELINE_ERROR_NETWORK; + case StatusCode::kPipelineErrorDecode: + return PIPELINE_ERROR_DECODE; + case StatusCode::kPipelineErrorAbort: + return PIPELINE_ERROR_ABORT; + case StatusCode::kPipelineErrorInitializationFailed: + return PIPELINE_ERROR_INITIALIZATION_FAILED; + case StatusCode::kPipelineErrorCouldNotRender: + return PIPELINE_ERROR_COULD_NOT_RENDER; + case StatusCode::kPipelineErrorRead: + return PIPELINE_ERROR_READ; + case StatusCode::kPipelineErrorInvalidState: + return PIPELINE_ERROR_INVALID_STATE; + case StatusCode::kPipelineErrorDemuxerErrorCouldNotOpen: + return DEMUXER_ERROR_COULD_NOT_OPEN; + case StatusCode::kPipelineErrorDemuxerErrorCouldNotParse: + return DEMUXER_ERROR_COULD_NOT_PARSE; + case StatusCode::kPipelineErrorDemuxerErrorNoSupportedStreams: + return DEMUXER_ERROR_NO_SUPPORTED_STREAMS; + case StatusCode::kPipelineErrorDecoderErrorNotSupported: + return DECODER_ERROR_NOT_SUPPORTED; + case StatusCode::kPipelineErrorChuckDemuxerErrorAppendFailed: + return CHUNK_DEMUXER_ERROR_APPEND_FAILED; + case StatusCode::kPipelineErrorChunkDemuxerErrorEosStatusDecodeError: + return CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR; + case StatusCode::kPipelineErrorChunkDemuxerErrorEosStatusNetworkError: + return CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR; + case StatusCode::kPipelineErrorAudioRendererError: + return AUDIO_RENDERER_ERROR; + case StatusCode::kPipelineErrorExternalRendererFailed: + return PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED; + case StatusCode::kPipelineErrorDemuxerErrorDetectedHLS: + return DEMUXER_ERROR_DETECTED_HLS; + default: + NOTREACHED(); + return base::nullopt; + } +} + +StatusCode PipelineStatusToStatusCode(PipelineStatus status) { + switch (status) { + case PIPELINE_OK: + return StatusCode::kOk; + case PIPELINE_ERROR_NETWORK: + return StatusCode::kPipelineErrorNetwork; + case PIPELINE_ERROR_DECODE: + return StatusCode::kPipelineErrorDecode; + case PIPELINE_ERROR_ABORT: + return StatusCode::kPipelineErrorAbort; + case PIPELINE_ERROR_INITIALIZATION_FAILED: + return StatusCode::kPipelineErrorInitializationFailed; + case PIPELINE_ERROR_COULD_NOT_RENDER: + return StatusCode::kPipelineErrorCouldNotRender; + case PIPELINE_ERROR_READ: + return StatusCode::kPipelineErrorRead; + case PIPELINE_ERROR_INVALID_STATE: + return StatusCode::kPipelineErrorInvalidState; + case DEMUXER_ERROR_COULD_NOT_OPEN: + return StatusCode::kPipelineErrorDemuxerErrorCouldNotOpen; + case DEMUXER_ERROR_COULD_NOT_PARSE: + return StatusCode::kPipelineErrorDemuxerErrorCouldNotParse; + case DEMUXER_ERROR_NO_SUPPORTED_STREAMS: + return StatusCode::kPipelineErrorDemuxerErrorNoSupportedStreams; + case DECODER_ERROR_NOT_SUPPORTED: + return StatusCode::kPipelineErrorDecoderErrorNotSupported; + case CHUNK_DEMUXER_ERROR_APPEND_FAILED: + return StatusCode::kPipelineErrorChuckDemuxerErrorAppendFailed; + case CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR: + return StatusCode::kPipelineErrorChunkDemuxerErrorEosStatusDecodeError; + case CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR: + return StatusCode::kPipelineErrorChunkDemuxerErrorEosStatusNetworkError; + case AUDIO_RENDERER_ERROR: + return StatusCode::kPipelineErrorAudioRendererError; + case PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED: + return StatusCode::kPipelineErrorExternalRendererFailed; + case DEMUXER_ERROR_DETECTED_HLS: + return StatusCode::kPipelineErrorDemuxerErrorDetectedHLS; + } + + NOTREACHED(); + // TODO(crbug.com/1153465): Log pipeline status that failed to convert. + // Return a generic decode error. + return StatusCode::kPipelineErrorDecode; +} + std::string PipelineStatusToString(PipelineStatus status) { #define STRINGIFY_STATUS_CASE(status) \ case status: \
diff --git a/media/base/pipeline_status.h b/media/base/pipeline_status.h index 0fc1a6b7..f0ed3be 100644 --- a/media/base/pipeline_status.h +++ b/media/base/pipeline_status.h
@@ -10,8 +10,10 @@ #include <string> #include "base/callback.h" +#include "base/optional.h" #include "base/time/time.h" #include "media/base/media_export.h" +#include "media/base/status.h" #include "media/base/timestamp_constants.h" namespace media { @@ -59,6 +61,10 @@ PIPELINE_STATUS_MAX = DEMUXER_ERROR_DETECTED_HLS, }; +MEDIA_EXPORT base::Optional<PipelineStatus> StatusCodeToPipelineStatus( + StatusCode status); +MEDIA_EXPORT StatusCode PipelineStatusToStatusCode(PipelineStatus status); + // Returns a string version of the status, unique to each PipelineStatus, and // not including any ':'. This makes it suitable for usage in // MediaError.message as the UA-specific-error-code.
diff --git a/media/base/status_codes.h b/media/base/status_codes.h index 5c2b7fe..d0b66c5 100644 --- a/media/base/status_codes.h +++ b/media/base/status_codes.h
@@ -122,10 +122,40 @@ kVaapiBadImageSize = 0x0000070C, kVaapiNoTexture = 0x0000070D, - // Format errors: 0x08 + // Format Errors: 0x08 kH264ParsingError = 0x00000801, kH264BufferTooSmall = 0x00000802, + // Pipeline Errors: 0x09 + // Deprecated: kPipelineErrorUrlNotFound = 0x00000901, + kPipelineErrorNetwork = 0x00000902, + kPipelineErrorDecode = 0x00000903, + // Deprecated: kPipelineErrorDecrypt = 0x00000904, + kPipelineErrorAbort = 0x00000905, + kPipelineErrorInitializationFailed = 0x00000906, + // Unused: 0x00000907 + kPipelineErrorCouldNotRender = 0x00000908, + kPipelineErrorRead = 0x00000909, + // Deprecated: kPipelineErrorOperationPending = 0x0000090a, + kPipelineErrorInvalidState = 0x0000090b, + // Demuxer related errors. + kPipelineErrorDemuxerErrorCouldNotOpen = 0x0000090c, + kPipelineErrorDemuxerErrorCouldNotParse = 0x0000090d, + kPipelineErrorDemuxerErrorNoSupportedStreams = 0x0000090e, + // Decoder related errors. + kPipelineErrorDecoderErrorNotSupported = 0x0000090f, + // ChunkDemuxer related errors. + kPipelineErrorChuckDemuxerErrorAppendFailed = 0x00000910, + kPipelineErrorChunkDemuxerErrorEosStatusDecodeError = 0x00000911, + kPipelineErrorChunkDemuxerErrorEosStatusNetworkError = 0x00000912, + // Audio rendering errors. + kPipelineErrorAudioRendererError = 0x00000913, + // Deprecated: kPipelineErrorAudioRendererErrorSpliceFailed = 0x00000914, + kPipelineErrorExternalRendererFailed = 0x00000915, + // Android only. Used as a signal to fallback MediaPlayerRenderer, and thus + // not exactly an 'error' per say. + kPipelineErrorDemuxerErrorDetectedHLS = 0x00000916, + // DecodeStatus temporary codes. These names were chosen to match the // DecodeStatus enum, so that un-converted code can DecodeStatus::OK/etc. // Note that OK must result in Status::is_ok(), since converted code will
diff --git a/media/capture/video/mac/pixel_buffer_transferer_mac_unittest.mm b/media/capture/video/mac/pixel_buffer_transferer_mac_unittest.mm index fa00dfca..ea1334d 100644 --- a/media/capture/video/mac/pixel_buffer_transferer_mac_unittest.mm +++ b/media/capture/video/mac/pixel_buffer_transferer_mac_unittest.mm
@@ -8,6 +8,7 @@ #include <vector> #include "base/logging.h" +#include "build/build_config.h" #include "media/capture/video/mac/pixel_buffer_pool_mac.h" #include "media/capture/video/mac/test/pixel_buffer_test_utils_mac.h" #include "media/capture/video/mac/video_capture_device_avfoundation_utils_mac.h" @@ -59,7 +60,14 @@ kColorR, kColorG, kColorB)); } -TEST(PixelBufferTransfererTest, CanScaleYuvsAndVerifyColor) { +#if defined(ARCH_CPU_ARM64) +// Bulk-disabled as part of arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_CanScaleYuvsAndVerifyColor DISABLED_CanScaleYuvsAndVerifyColor +#else +#define MAYBE_CanScaleYuvsAndVerifyColor CanScaleYuvsAndVerifyColor +#endif + +TEST(PixelBufferTransfererTest, MAYBE_CanScaleYuvsAndVerifyColor) { constexpr OSType kPixelFormat = kPixelFormatYuvs; constexpr int kSourceWidth = 32; constexpr int kSourceHeight = 32; @@ -115,7 +123,16 @@ EXPECT_EQ(num_tiles_across_y, kSourceNumTilesAcross); } -TEST(PixelBufferTransfererTest, CanStretchYuvsAndVerifyCheckerPattern) { +#if defined(ARCH_CPU_ARM64) +// Bulk-disabled as part of arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_CanStretchYuvsAndVerifyCheckerPattern \ + DISABLED_CanStretchYuvsAndVerifyCheckerPattern +#else +#define MAYBE_CanStretchYuvsAndVerifyCheckerPattern \ + CanStretchYuvsAndVerifyCheckerPattern +#endif + +TEST(PixelBufferTransfererTest, MAYBE_CanStretchYuvsAndVerifyCheckerPattern) { // Note: The ARGB -> YUVS -> ARGB conversions results in a small loss of // information, so for the checker pattern to be intact the buffer can't be // tiny (e.g. 4x4). @@ -149,7 +166,14 @@ EXPECT_EQ(num_tiles_across_y, kSourceNumTilesAcross); } -TEST(PixelBufferTransfererTest, CanStretchYuvsAndVerifyColor) { +#if defined(ARCH_CPU_ARM64) +// Bulk-disabled as part of arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_CanStretchYuvsAndVerifyColor DISABLED_CanStretchYuvsAndVerifyColor +#else +#define MAYBE_CanStretchYuvsAndVerifyColor CanStretchYuvsAndVerifyColor +#endif + +TEST(PixelBufferTransfererTest, MAYBE_CanStretchYuvsAndVerifyColor) { constexpr OSType kPixelFormat = kPixelFormatYuvs; constexpr int kSourceWidth = 32; constexpr int kSourceHeight = 32;
diff --git a/media/capture/video/mac/sample_buffer_transformer_mac_unittest.mm b/media/capture/video/mac/sample_buffer_transformer_mac_unittest.mm index 41352ad..f481f8b2 100644 --- a/media/capture/video/mac/sample_buffer_transformer_mac_unittest.mm +++ b/media/capture/video/mac/sample_buffer_transformer_mac_unittest.mm
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/test/scoped_feature_list.h" +#include "build/build_config.h" #include "media/capture/video/mac/test/pixel_buffer_test_utils_mac.h" #include "media/capture/video/mac/video_capture_device_avfoundation_utils_mac.h" #include "testing/gmock/include/gmock/gmock.h" @@ -395,7 +396,14 @@ PixelBufferIsSingleColor(output_pixel_buffer, kColorR, kColorG, kColorB)); } -TEST_P(SampleBufferTransformerPixelTransferTest, CanConvertAndScaleDown) { +#if defined(ARCH_CPU_ARM64) +// Bulk-disabled for arm64 bot stabilization: https://crbug.com/1154345 +#define MAYBE_CanConvertAndScaleDown DISABLED_CanConvertAndScaleDown +#else +#define MAYBE_CanConvertAndScaleDown CanConvertAndScaleDown +#endif + +TEST_P(SampleBufferTransformerPixelTransferTest, MAYBE_CanConvertAndScaleDown) { OSType input_pixel_format; OSType output_pixel_format; std::tie(input_pixel_format, output_pixel_format) = GetParam();
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm index 3ded79d..e4457496 100644 --- a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm +++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
@@ -12,7 +12,6 @@ #include "base/location.h" #include "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" #include "base/metrics/histogram_macros.h" #include "base/sequenced_task_runner.h" #include "base/strings/string_util.h" @@ -782,9 +781,8 @@ } // Last preference is to read the CMSampleBuffer. - gfx::ColorSpace colorSpace; - if (@available(macOS 10.11, *)) - colorSpace = media::GetFormatDescriptionColorSpace(formatDescription); + gfx::ColorSpace colorSpace = + media::GetFormatDescriptionColorSpace(formatDescription); [self processSample:sampleBuffer captureFormat:captureFormat colorSpace:colorSpace
diff --git a/media/gpu/h264_decoder.cc b/media/gpu/h264_decoder.cc index bf05fb5..527abe7 100644 --- a/media/gpu/h264_decoder.cc +++ b/media/gpu/h264_decoder.cc
@@ -89,6 +89,17 @@ return H264Decoder::H264Accelerator::Status::kNotSupported; } +H264Decoder::H264Accelerator::Status +H264Decoder::H264Accelerator::ParseEncryptedSliceHeader( + const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_header_out) { + return H264Decoder::H264Accelerator::Status::kNotSupported; +} + H264Decoder::H264Decoder(std::unique_ptr<H264Accelerator> accelerator, VideoCodecProfile profile, const VideoColorSpace& container_color_space) @@ -140,9 +151,9 @@ state_ = kAfterReset; } -void H264Decoder::PrepareRefPicLists(const H264SliceHeader* slice_hdr) { - ConstructReferencePicListsP(slice_hdr); - ConstructReferencePicListsB(slice_hdr); +void H264Decoder::PrepareRefPicLists() { + ConstructReferencePicListsP(); + ConstructReferencePicListsB(); } bool H264Decoder::ModifyReferencePicLists(const H264SliceHeader* slice_hdr, @@ -421,8 +432,7 @@ } }; -void H264Decoder::ConstructReferencePicListsP( - const H264SliceHeader* slice_hdr) { +void H264Decoder::ConstructReferencePicListsP() { // RefPicList0 (8.2.4.2.1) [[1] [2]], where: // [1] shortterm ref pics sorted by descending pic_num, // [2] longterm ref pics by ascending long_term_pic_num. @@ -456,8 +466,7 @@ } }; -void H264Decoder::ConstructReferencePicListsB( - const H264SliceHeader* slice_hdr) { +void H264Decoder::ConstructReferencePicListsB() { // RefPicList0 (8.2.4.2.3) [[1] [2] [3]], where: // [1] shortterm ref pics with POC < curr_pic's POC sorted by descending POC, // [2] shortterm ref pics with POC > curr_pic's POC by ascending POC, @@ -787,7 +796,7 @@ return H264Accelerator::Status::kFail; UpdatePicNums(frame_num); - PrepareRefPicLists(slice_hdr); + PrepareRefPicLists(); return accelerator_->SubmitFrameMetadata(sps, pps, dpb_, ref_pic_list_p0_, ref_pic_list_b0_, ref_pic_list_b1_, @@ -1239,6 +1248,15 @@ return true; } +H264Decoder::H264Accelerator::Status H264Decoder::ProcessEncryptedSliceHeader( + const std::vector<SubsampleEntry>& subsamples) { + DCHECK(curr_nalu_); + DCHECK(curr_slice_hdr_); + return accelerator_->ParseEncryptedSliceHeader( + curr_nalu_->data, curr_nalu_->size, subsamples, last_sps_nalu_, + last_pps_nalu_, curr_slice_hdr_.get()); +} + H264Decoder::H264Accelerator::Status H264Decoder::PreprocessCurrentSlice() { const H264SliceHeader* slice_hdr = curr_slice_hdr_.get(); DCHECK(slice_hdr); @@ -1286,8 +1304,13 @@ max_pic_num_ = 2 * max_frame_num_; H264Picture::Vector ref_pic_list0, ref_pic_list1; - if (!ModifyReferencePicLists(slice_hdr, &ref_pic_list0, &ref_pic_list1)) + // If we are using full sample encryption then we do not have the information + // we need to update the ref pic lists here, but that's OK because the + // accelerator doesn't actually need to submit them in this case. + if (!slice_hdr->full_sample_encryption && + !ModifyReferencePicLists(slice_hdr, &ref_pic_list0, &ref_pic_list1)) { return H264Accelerator::Status::kFail; + } const H264PPS* pps = parser_.GetPPS(curr_pps_id_); if (!pps) @@ -1415,11 +1438,30 @@ // additional key has been provided, for example), then the remaining // steps will be executed. if (!curr_slice_hdr_) { - curr_slice_hdr_.reset(new H264SliceHeader()); - par_res = - parser_.ParseSliceHeader(*curr_nalu_, curr_slice_hdr_.get()); - if (par_res != H264Parser::kOk) - SET_ERROR_AND_RETURN(); + curr_slice_hdr_ = std::make_unique<H264SliceHeader>(); + state_ = kParseSliceHeader; + } + + if (state_ == kParseSliceHeader) { + // Check if the slice header is encrypted. + bool parsed_header = false; + if (current_decrypt_config_) { + const std::vector<SubsampleEntry>& subsamples = + parser_.GetCurrentSubsamples(); + // There is only a single clear byte for the NALU information for + // full sample encryption, and the rest is encrypted. + if (!subsamples.empty() && subsamples[0].clear_bytes == 1) { + CHECK_ACCELERATOR_RESULT(ProcessEncryptedSliceHeader(subsamples)); + parsed_header = true; + curr_slice_hdr_->pic_parameter_set_id = last_parsed_pps_id_; + } + } + if (!parsed_header) { + par_res = + parser_.ParseSliceHeader(*curr_nalu_, curr_slice_hdr_.get()); + if (par_res != H264Parser::kOk) + SET_ERROR_AND_RETURN(); + } state_ = kTryPreprocessCurrentSlice; } @@ -1469,6 +1511,8 @@ if (!ProcessSPS(sps_id, &need_new_buffers)) SET_ERROR_AND_RETURN(); + last_sps_nalu_.assign(curr_nalu_->data, + curr_nalu_->data + curr_nalu_->size); if (state_ == kNeedStreamMetadata) state_ = kAfterReset; @@ -1485,13 +1529,13 @@ } case H264NALU::kPPS: { - int pps_id; - CHECK_ACCELERATOR_RESULT(FinishPrevFrameIfPresent()); - par_res = parser_.ParsePPS(&pps_id); + par_res = parser_.ParsePPS(&last_parsed_pps_id_); if (par_res != H264Parser::kOk) SET_ERROR_AND_RETURN(); + last_pps_nalu_.assign(curr_nalu_->data, + curr_nalu_->data + curr_nalu_->size); break; }
diff --git a/media/gpu/h264_decoder.h b/media/gpu/h264_decoder.h index c7385f9..55206b7d 100644 --- a/media/gpu/h264_decoder.h +++ b/media/gpu/h264_decoder.h
@@ -90,6 +90,23 @@ const H264Picture::Vector& ref_pic_listb1, scoped_refptr<H264Picture> pic) = 0; + // Used for handling CENCv1 streams where the entire slice header, except + // for the NALU type byte, is encrypted. |data| and |size| represent the + // encrypted slice data. |subsamples| specifies what is encrypted and should + // have just a single clear byte and the rest is encrypted. |sps_nalu_data| + // and |pps_nalu_data| are the SPS and PPS NALUs respectively. + // |slice_header_out| should have its fields filled in upon successful + // return. Returns kOk if successful, kFail if there are errors, or + // kTryAgain if the accelerator needs additional data before being able to + // proceed. + virtual Status ParseEncryptedSliceHeader( + const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_header_out); + // Submit one slice for the current frame, passing the current |pps| and // |pic| (same as in SubmitFrameMetadata()), the parsed header for the // current slice in |slice_hdr|, and the reordered |ref_pic_listX|, @@ -189,6 +206,7 @@ // retryable error) is returned. The next time Decode() is called the call // that previously failed will be retried and execution continues from // there (if possible). + kParseSliceHeader, kTryPreprocessCurrentSlice, kEnsurePicture, kTryNewFrame, @@ -199,6 +217,12 @@ // Process H264 stream structures. bool ProcessSPS(int sps_id, bool* need_new_buffers); + + // Processes a CENCv1 encrypted slice header and fills in |curr_slice_hdr_| + // with the relevant parsed fields. + H264Accelerator::Status ProcessEncryptedSliceHeader( + const std::vector<SubsampleEntry>& subsamples); + // Process current slice header to discover if we need to start a new picture, // finishing up the current one. H264Accelerator::Status PreprocessCurrentSlice(); @@ -223,7 +247,7 @@ bool UpdateMaxNumReorderFrames(const H264SPS* sps); // Prepare reference picture lists for the current frame. - void PrepareRefPicLists(const H264SliceHeader* slice_hdr); + void PrepareRefPicLists(); // Prepare reference picture lists for the given slice. bool ModifyReferencePicLists(const H264SliceHeader* slice_hdr, H264Picture::Vector* ref_pic_list0, @@ -231,8 +255,8 @@ // Construct initial reference picture lists for use in decoding of // P and B pictures (see 8.2.4 in spec). - void ConstructReferencePicListsP(const H264SliceHeader* slice_hdr); - void ConstructReferencePicListsB(const H264SliceHeader* slice_hdr); + void ConstructReferencePicListsP(); + void ConstructReferencePicListsB(); // Helper functions for reference list construction, per spec. int PicNumF(const H264Picture& pic); @@ -347,6 +371,16 @@ int curr_sps_id_; int curr_pps_id_; + // Last PPS that was parsed. Used for full sample encryption, which has the + // assumption this is streaming content which does not switch between + // different PPSes in the stream (they are present once in the container for + // the stream). + int last_parsed_pps_id_; + + // Copies of the last SPS and PPS NALUs, used for full sample encryption. + std::vector<uint8_t> last_sps_nalu_; + std::vector<uint8_t> last_pps_nalu_; + // Current NALU and slice header being processed. std::unique_ptr<H264NALU> curr_nalu_; std::unique_ptr<H264SliceHeader> curr_slice_hdr_;
diff --git a/media/gpu/h264_decoder_unittest.cc b/media/gpu/h264_decoder_unittest.cc index cb30514..90864f7 100644 --- a/media/gpu/h264_decoder_unittest.cc +++ b/media/gpu/h264_decoder_unittest.cc
@@ -30,7 +30,6 @@ using ::testing::MatchResultListener; using ::testing::Mock; using ::testing::Return; -using ::testing::WithArg; namespace media { namespace { @@ -65,52 +64,70 @@ return subsample_total_size == buffer_size; } -// Given a H264NALU (arg0), compute the slice header and store a copy in -// both |arg1| and |slice_header|. This assumes that the NALU comes from -// kBaselineFrame0. -ACTION_P(ComputeSliceHeader, slice_header) { - const H264NALU& slice_nalu = arg0; - // |arg1| and |slice_header| are H264SliceHeader*. - - // Ideally we could just parse |slice_nalu|, but the parser needs additional - // data (like SPS and PPS entries) which we don't have. So this simulates - // parsing of |slice_nalu| by simply setting the appropriate fields - - // Zero out |slice_header| so there is no need to set a lot of default values. - std::memset(slice_header, 0, sizeof(H264SliceHeader)); - - // Extract the values directly from the H264NALU provided. - slice_header->idr_pic_flag = (slice_nalu.nal_unit_type == 5); - slice_header->nal_ref_idc = slice_nalu.nal_ref_idc; - slice_header->nalu_data = slice_nalu.data; - slice_header->nalu_size = slice_nalu.size; - - // Don't want to duplicate all the work of H264Parser.ParseSliceHeader(), - // so the following were determined by looking at the slice header after - // H264_Parser.ParseSliceHeader() was called on kBaselineFrame0. - slice_header->header_bit_size = 0x24; - slice_header->slice_type = 7; - slice_header->slice_qp_delta = 8; - slice_header->dec_ref_pic_marking_bit_size = 2u; - - // Now that we have created our local copy of the slice header, copy it into - // |arg1| and return success. - std::memcpy(arg1, slice_header, sizeof(H264SliceHeader)); +// Emulates encrypted slice header parsing. We don't actually encrypt the data +// so we can easily do this by just parsing it. +H264Decoder::H264Accelerator::Status ParseSliceHeader( + const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_hdr_out) { + EXPECT_TRUE(!sps_nalu_data.empty()); + EXPECT_TRUE(!pps_nalu_data.empty()); + // Construct the bitstream for parsing. + std::vector<uint8_t> full_data; + const std::vector<uint8_t> start_code = {0u, 0u, 1u}; + constexpr size_t kExtraBytes = 3 * 3; // 3 byte start code for 3 NALUs + full_data.reserve(size + sps_nalu_data.size() + pps_nalu_data.size() + + kExtraBytes); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), sps_nalu_data.begin(), sps_nalu_data.end()); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), pps_nalu_data.begin(), pps_nalu_data.end()); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), data, data + size); + H264Parser parser; + parser.SetStream(full_data.data(), full_data.size()); + while (true) { + H264NALU nalu; + H264Parser::Result res = parser.AdvanceToNextNALU(&nalu); + if (res == H264Parser::kEOStream) + break; + EXPECT_EQ(H264Parser::kOk, res); + switch (nalu.nal_unit_type) { + case H264NALU::kSPS: + int sps_id; + EXPECT_EQ(H264Parser::kOk, parser.ParseSPS(&sps_id)); + break; + case H264NALU::kPPS: + int pps_id; + EXPECT_EQ(H264Parser::kOk, parser.ParsePPS(&pps_id)); + break; + case H264NALU::kIDRSlice: // fallthrough + case H264NALU::kNonIDRSlice: + EXPECT_EQ(H264Parser::kOk, + parser.ParseSliceHeader(nalu, slice_hdr_out)); + slice_hdr_out->full_sample_encryption = true; + break; + } + } return H264Decoder::H264Accelerator::Status::kOk; } -// Compare 2 H264SliceHeader objects for equality. -MATCHER_P(SliceHeaderMatches, slice_header, "Verify H264SliceHeader objects") { - // Rather than match pointers, the contents must be the same. - return std::memcmp(arg, slice_header, sizeof(H264SliceHeader)) == 0; -} - class MockH264Accelerator : public H264Decoder::H264Accelerator { public: MockH264Accelerator() = default; MOCK_METHOD0(CreateH264Picture, scoped_refptr<H264Picture>()); MOCK_METHOD1(SubmitDecode, Status(scoped_refptr<H264Picture> pic)); + MOCK_METHOD6(ParseEncryptedSliceHeader, + Status(const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_hdr_out)); MOCK_METHOD7(SubmitFrameMetadata, Status(const H264SPS* sps, const H264PPS* pps, @@ -150,8 +167,11 @@ // Keeps decoding the input bitstream set at |SetInputFrameFiles| until the // decoder has consumed all bitstreams or returned from - // |H264Decoder::Decode|. Returns the same result as |H264Decoder::Decode|. - AcceleratedVideoDecoder::DecodeResult Decode(); + // |H264Decoder::Decode|. If |full_sample_encryption| is true, then it sets + // a DecryptConfig for the the DecoderBuffer that indicates all but the first + // byte are encrypted. Returns the same result as |H264Decoder::Decode|. + AcceleratedVideoDecoder::DecodeResult Decode( + bool full_sample_encryption = false); protected: std::unique_ptr<H264Decoder> decoder_; @@ -192,7 +212,8 @@ input_frame_files_.push(f); } -AcceleratedVideoDecoder::DecodeResult H264DecoderTest::Decode() { +AcceleratedVideoDecoder::DecodeResult H264DecoderTest::Decode( + bool full_sample_encryption) { while (true) { auto result = decoder_->Decode(); int32_t bitstream_id = 0; @@ -204,6 +225,15 @@ CHECK(base::ReadFileToString(input_file, &bitstream_)); decoder_buffer_ = DecoderBuffer::CopyFrom( reinterpret_cast<const uint8_t*>(bitstream_.data()), bitstream_.size()); + if (full_sample_encryption) { + // We only use this in 2 tests, each use the same data where the offset to + // the byte after the NALU type for the slice header is 669. + constexpr int kOffsetToSliceHeader = 669; + decoder_buffer_->set_decrypt_config(DecryptConfig::CreateCencConfig( + "kFakeKeyId", std::string(DecryptConfig::kDecryptionKeySize, 'x'), + {SubsampleEntry(kOffsetToSliceHeader, + bitstream_.size() - kOffsetToSliceHeader)})); + } EXPECT_NE(decoder_buffer_.get(), nullptr); decoder_->SetStream(bitstream_id++, *decoder_buffer_); } @@ -260,6 +290,28 @@ ASSERT_TRUE(decoder_->Flush()); } +// This is for CENCv1 full sample encryption. +TEST_F(H264DecoderTest, DecodeSingleEncryptedFrame) { + SetInputFrameFiles({kBaselineFrame0}); + ASSERT_EQ(AcceleratedVideoDecoder::kConfigChange, Decode(true)); + EXPECT_EQ(gfx::Size(320, 192), decoder_->GetPicSize()); + EXPECT_EQ(H264PROFILE_BASELINE, decoder_->GetProfile()); + EXPECT_LE(9u, decoder_->GetRequiredNumOfPictures()); + + { + InSequence sequence; + EXPECT_CALL(*accelerator_, ParseEncryptedSliceHeader(_, _, _, _, _, _)) + .WillOnce(Invoke(&ParseSliceHeader)); + EXPECT_CALL(*accelerator_, CreateH264Picture()); + EXPECT_CALL(*accelerator_, SubmitFrameMetadata(_, _, _, _, _, _, _)); + EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); + EXPECT_CALL(*accelerator_, SubmitDecode(_)); + EXPECT_CALL(*accelerator_, OutputPicture(_)); + } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); + ASSERT_TRUE(decoder_->Flush()); +} + TEST_F(H264DecoderTest, SkipNonIDRFrames) { SetInputFrameFiles({kBaselineFrame1, kBaselineFrame2, kBaselineFrame0}); ASSERT_EQ(AcceleratedVideoDecoder::kConfigChange, Decode()); @@ -539,6 +591,39 @@ EXPECT_TRUE(decoder_->Flush()); } +TEST_F(H264DecoderTest, ParseEncryptedSliceHeaderRetry) { + SetInputFrameFiles({kBaselineFrame0}); + ASSERT_EQ(AcceleratedVideoDecoder::kConfigChange, Decode(true)); + EXPECT_EQ(gfx::Size(320, 192), decoder_->GetPicSize()); + EXPECT_EQ(H264PROFILE_BASELINE, decoder_->GetProfile()); + EXPECT_LE(9u, decoder_->GetRequiredNumOfPictures()); + + EXPECT_CALL(*accelerator_, ParseEncryptedSliceHeader(_, _, _, _, _, _)) + .WillOnce(Return(H264Decoder::H264Accelerator::Status::kTryAgain)); + ASSERT_EQ(AcceleratedVideoDecoder::kTryAgain, Decode(true)); + + // Try again, assuming key still not set. Only ParseEncryptedSliceHeader() + // should be called again. + EXPECT_CALL(*accelerator_, ParseEncryptedSliceHeader(_, _, _, _, _, _)) + .WillOnce(Return(H264Decoder::H264Accelerator::Status::kTryAgain)); + ASSERT_EQ(AcceleratedVideoDecoder::kTryAgain, Decode(true)); + + // Assume key has been provided now, next call to Decode() should proceed. + { + InSequence sequence; + EXPECT_CALL(*accelerator_, ParseEncryptedSliceHeader(_, _, _, _, _, _)) + .WillOnce(Invoke(&ParseSliceHeader)); + EXPECT_CALL(*accelerator_, CreateH264Picture()); + EXPECT_CALL(*accelerator_, SubmitFrameMetadata(_, _, _, _, _, _, _)); + EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); + EXPECT_CALL(*accelerator_, SubmitDecode(WithPoc(0))); + EXPECT_CALL(*accelerator_, OutputPicture(WithPoc(0))); + } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode(true)); + + ASSERT_TRUE(decoder_->Flush()); +} + TEST_F(H264DecoderTest, SubmitFrameMetadataRetry) { SetInputFrameFiles({kBaselineFrame0}); ASSERT_EQ(AcceleratedVideoDecoder::kConfigChange, Decode());
diff --git a/media/gpu/mac/vt_config_util.mm b/media/gpu/mac/vt_config_util.mm index 8bd9848..09d03a5 100644 --- a/media/gpu/mac/vt_config_util.mm +++ b/media/gpu/mac/vt_config_util.mm
@@ -42,11 +42,7 @@ return kCMFormatDescriptionColorPrimaries_ITU_R_709_2; case media::VideoColorSpace::PrimaryID::BT2020: - if (@available(macos 10.11, *)) - return kCMFormatDescriptionColorPrimaries_ITU_R_2020; - DLOG(WARNING) << "kCMFormatDescriptionColorPrimaries_ITU_R_2020 " - "unsupported prior to 10.11"; - return nil; + return kCMFormatDescriptionColorPrimaries_ITU_R_2020; case media::VideoColorSpace::PrimaryID::SMPTE170M: case media::VideoColorSpace::PrimaryID::SMPTE240M: @@ -56,18 +52,10 @@ return kCMFormatDescriptionColorPrimaries_EBU_3213; case media::VideoColorSpace::PrimaryID::SMPTEST431_2: - if (@available(macos 10.11, *)) - return kCMFormatDescriptionColorPrimaries_DCI_P3; - DLOG(WARNING) << "kCMFormatDescriptionColorPrimaries_DCI_P3 unsupported " - "prior to 10.11"; - return nil; + return kCMFormatDescriptionColorPrimaries_DCI_P3; case media::VideoColorSpace::PrimaryID::SMPTEST432_1: - if (@available(macos 10.11, *)) - return kCMFormatDescriptionColorPrimaries_P3_D65; - DLOG(WARNING) << "kCMFormatDescriptionColorPrimaries_P3_D65 unsupported " - "prior to 10.11"; - return nil; + return kCMFormatDescriptionColorPrimaries_P3_D65; default: DLOG(ERROR) << "Unsupported primary id: " << static_cast<int>(primary_id); @@ -104,11 +92,7 @@ case media::VideoColorSpace::TransferID::BT2020_10: case media::VideoColorSpace::TransferID::BT2020_12: - if (@available(macos 10.11, *)) - return kCMFormatDescriptionTransferFunction_ITU_R_2020; - DLOG(WARNING) << "kCMFormatDescriptionTransferFunction_ITU_R_2020 " - "unsupported prior to 10.11"; - return nil; + return kCMFormatDescriptionTransferFunction_ITU_R_2020; case media::VideoColorSpace::TransferID::SMPTEST2084: if (@available(macos 10.13, *)) @@ -149,11 +133,7 @@ return kCMFormatDescriptionYCbCrMatrix_ITU_R_709_2; case media::VideoColorSpace::MatrixID::BT2020_NCL: - if (@available(macos 10.11, *)) - return kCMFormatDescriptionYCbCrMatrix_ITU_R_2020; - DLOG(WARNING) << "kCVImageBufferYCbCrMatrix_ITU_R_2020 " - "unsupported prior to 10.11"; - return nil; + return kCMFormatDescriptionYCbCrMatrix_ITU_R_2020; case media::VideoColorSpace::MatrixID::FCC: case media::VideoColorSpace::MatrixID::SMPTE170M:
diff --git a/media/gpu/mac/vt_config_util_unittest.cc b/media/gpu/mac/vt_config_util_unittest.cc index 6144e692..3c264e1 100644 --- a/media/gpu/mac/vt_config_util_unittest.cc +++ b/media/gpu/mac/vt_config_util_unittest.cc
@@ -363,12 +363,10 @@ // When BT.2020 is unavailable the default should be BT.709. if (base::mac::IsAtLeastOS10_13()) { EXPECT_EQ(cs.ToGfxColorSpace(), image_buffer_cs); - } else if (base::mac::IsAtLeastOS10_11()) { - // 10.11 and 10.12 don't have HDR transfer functions. + } else { + // 10.12 doesn't have HDR transfer functions. cs.transfer = VideoColorSpace::TransferID::BT709; EXPECT_EQ(cs.ToGfxColorSpace(), image_buffer_cs); - } else { - EXPECT_EQ(gfx::ColorSpace::CreateREC709(), image_buffer_cs); } } @@ -384,35 +382,29 @@ // When BT.2020 is unavailable the default should be BT.709. if (base::mac::IsAtLeastOS10_13()) { EXPECT_EQ(cs.ToGfxColorSpace(), image_buffer_cs); - } else if (base::mac::IsAtLeastOS10_11()) { - // 10.11 and 10.12 don't have HDR transfer functions. + } else { + // 10.12 doesn't have HDR transfer functions. cs.transfer = VideoColorSpace::TransferID::BT709; EXPECT_EQ(cs.ToGfxColorSpace(), image_buffer_cs); - } else { - EXPECT_EQ(gfx::ColorSpace::CreateREC709(), image_buffer_cs); } } TEST(VTConfigUtil, FormatDescriptionInvalid) { - if (__builtin_available(macos 10.11, *)) { - auto format_descriptor = - CreateFormatDescription(CFSTR("Cows"), CFSTR("Go"), CFSTR("Moo")); - ASSERT_TRUE(format_descriptor); - auto cs = GetFormatDescriptionColorSpace(format_descriptor); - EXPECT_EQ(gfx::ColorSpace::CreateREC709(), cs); - } + auto format_descriptor = + CreateFormatDescription(CFSTR("Cows"), CFSTR("Go"), CFSTR("Moo")); + ASSERT_TRUE(format_descriptor); + auto cs = GetFormatDescriptionColorSpace(format_descriptor); + EXPECT_EQ(gfx::ColorSpace::CreateREC709(), cs); } TEST(VTConfigUtil, FormatDescriptionBT709) { - if (__builtin_available(macos 10.11, *)) { - auto format_descriptor = CreateFormatDescription( - kCMFormatDescriptionColorPrimaries_ITU_R_709_2, - kCMFormatDescriptionTransferFunction_ITU_R_709_2, - kCMFormatDescriptionYCbCrMatrix_ITU_R_709_2); - ASSERT_TRUE(format_descriptor); - auto cs = GetFormatDescriptionColorSpace(format_descriptor); - EXPECT_EQ(ToBT709_APPLE(gfx::ColorSpace::CreateREC709()), cs); - } + auto format_descriptor = + CreateFormatDescription(kCMFormatDescriptionColorPrimaries_ITU_R_709_2, + kCMFormatDescriptionTransferFunction_ITU_R_709_2, + kCMFormatDescriptionYCbCrMatrix_ITU_R_709_2); + ASSERT_TRUE(format_descriptor); + auto cs = GetFormatDescriptionColorSpace(format_descriptor); + EXPECT_EQ(ToBT709_APPLE(gfx::ColorSpace::CreateREC709()), cs); } } // namespace media
diff --git a/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.cc b/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.cc index 073135c..b0ea9eb 100644 --- a/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.cc +++ b/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.cc
@@ -6,6 +6,7 @@ #include <va/va.h> +#include "base/memory/aligned_memory.h" #include "base/stl_util.h" #include "base/trace_event/trace_event.h" #include "media/base/cdm_context.h" @@ -35,6 +36,13 @@ 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63}; +int GetSliceHeaderCounter() { + // Needs to be static in case there are multiple active at once, in which case + // they all need unique values. + static base::AtomicSequenceNumber parsed_slice_hdr_counter; + return parsed_slice_hdr_counter.GetNext(); +} + } // namespace H264VaapiVideoDecoderDelegate::H264VaapiVideoDecoderDelegate( @@ -180,6 +188,158 @@ return success ? DecodeStatus::kOk : DecodeStatus::kFail; } +DecodeStatus H264VaapiVideoDecoderDelegate::ParseEncryptedSliceHeader( + const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_header_out) { + DCHECK(slice_header_out); + DCHECK(!subsamples.empty()); + DCHECK_EQ(subsamples[0].clear_bytes, 1u); + + // This is done by sending in the encryption parameters and the encrypted + // slice header. Then the vaEndPicture call is blocking while it decrypts and + // parses the header parameters. We use VACencStatusBuf which allows us to + // extract the slice header parameters of interest and return them to the + // caller. + + VAEncryptionParameters crypto_params; + // Don't use the VAEncryptionSegmentInfo vector in the class since we do not + // need to hold this data across calls. + std::vector<VAEncryptionSegmentInfo> segment_info; + ProtectedSessionState state = SetupDecryptDecode( + true /* full sample */, size, &crypto_params, &segment_info, subsamples); + if (state == ProtectedSessionState::kFailed) { + LOG(ERROR) << "ParseEncryptedSliceHeader fails because we couldn't setup " + "the protected session"; + return DecodeStatus::kFail; + } else if (state != ProtectedSessionState::kCreated) { + return DecodeStatus::kTryAgain; + } + + // For encrypted header parsing, we need to also send the SPS and PPS. Both of + // those and the slice NALU need to be prefixed with the 0x000001 start code. + constexpr size_t kStartCodeSize = 3; + constexpr size_t kExtraDataBytes = 3 * kStartCodeSize; + + // Adjust the first segment length and init length to compensate for inserting + // the SPS, PPS and 3 start codes. + segment_info.back().segment_length += + sps_nalu_data.size() + pps_nalu_data.size() + kExtraDataBytes; + segment_info.back().init_byte_length += + sps_nalu_data.size() + pps_nalu_data.size() + kExtraDataBytes; + + crypto_params.status_report_index = GetSliceHeaderCounter(); + + // This is based on a sample from Intel for how to use this API. + constexpr size_t kDecryptQuerySizeAndAlignment = 4096; + std::unique_ptr<void, base::AlignedFreeDeleter> surface_memory( + base::AlignedAlloc(kDecryptQuerySizeAndAlignment, + kDecryptQuerySizeAndAlignment)); + constexpr size_t kVaQueryCencBufferSize = 2048; + auto back_buffer_mem = std::make_unique<uint8_t[]>(kVaQueryCencBufferSize); + VACencStatusBuf* status_buf = + reinterpret_cast<VACencStatusBuf*>(surface_memory.get()); + status_buf->status = VA_ENCRYPTION_STATUS_INCOMPLETE; + status_buf->buf = back_buffer_mem.get(); + status_buf->buf_size = kVaQueryCencBufferSize; + + auto slice_param_buf = std::make_unique<VACencSliceParameterBufferH264>(); + status_buf->slice_buf_type = VaCencSliceBufParamter; + status_buf->slice_buf_size = sizeof(VACencSliceParameterBufferH264); + status_buf->slice_buf = slice_param_buf.get(); + + constexpr int kCencStatusSurfaceDimension = 64; + auto buffer_ptr_alloc = std::make_unique<uintptr_t>(); + uintptr_t* buffer_ptr = reinterpret_cast<uintptr_t*>(buffer_ptr_alloc.get()); + buffer_ptr[0] = reinterpret_cast<uintptr_t>(surface_memory.get()); + + auto surface = vaapi_wrapper_->CreateVASurfaceForUserPtr( + gfx::Size(kCencStatusSurfaceDimension, kCencStatusSurfaceDimension), + buffer_ptr, + 2 * kCencStatusSurfaceDimension * kCencStatusSurfaceDimension); + if (!surface) { + DVLOG(1) << "Failed allocating surface for decrypt status"; + return DecodeStatus::kFail; + } + + // Assembles the 'slice data' which is the SPS, PPS and slice data, each of + // which is also prefixed by the 0x000001 start code. + std::vector<uint8_t> full_data; + const std::vector<uint8_t> start_code = {0u, 0u, 1u}; + full_data.reserve(size + sps_nalu_data.size() + pps_nalu_data.size() + + kExtraDataBytes); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), sps_nalu_data.begin(), sps_nalu_data.end()); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), pps_nalu_data.begin(), pps_nalu_data.end()); + full_data.insert(full_data.end(), start_code.begin(), start_code.end()); + full_data.insert(full_data.end(), data, data + size); + + if (!vaapi_wrapper_->SubmitBuffers({{VAEncryptionParameterBufferType, + sizeof(crypto_params), &crypto_params}, + {VAProtectedSliceDataBufferType, + full_data.size(), full_data.data()}})) { + DVLOG(1) << "Failure submitting encrypted slice header buffers"; + return DecodeStatus::kFail; + } + if (!vaapi_wrapper_->ExecuteAndDestroyPendingBuffers(surface->id())) { + LOG(ERROR) << "Failed executing for slice header decrypt"; + return DecodeStatus::kFail; + } + if (status_buf->status != VA_ENCRYPTION_STATUS_SUCCESSFUL) { + LOG(ERROR) << "Failure status in encrypted header parsing: " + << static_cast<int>(status_buf->status); + return DecodeStatus::kFail; + } + + // Read the parsed slice header data back and populate the structure with it. + slice_header_out->idr_pic_flag = !!slice_param_buf->idr_pic_flag; + slice_header_out->nal_ref_idc = slice_param_buf->nal_ref_idc; + slice_header_out->nalu_data = data; + slice_header_out->nalu_size = size; + slice_header_out->slice_type = slice_param_buf->slice_type; + slice_header_out->frame_num = slice_param_buf->frame_number; + slice_header_out->idr_pic_id = slice_param_buf->idr_pic_id; + slice_header_out->pic_order_cnt_lsb = slice_param_buf->pic_order_cnt_lsb; + slice_header_out->delta_pic_order_cnt_bottom = + slice_param_buf->delta_pic_order_cnt_bottom; + slice_header_out->delta_pic_order_cnt0 = + slice_param_buf->delta_pic_order_cnt[0]; + slice_header_out->delta_pic_order_cnt1 = + slice_param_buf->delta_pic_order_cnt[1]; + slice_header_out->no_output_of_prior_pics_flag = + slice_param_buf->ref_pic_fields.bits.no_output_of_prior_pics_flag; + slice_header_out->long_term_reference_flag = + slice_param_buf->ref_pic_fields.bits.long_term_reference_flag; + slice_header_out->adaptive_ref_pic_marking_mode_flag = + slice_param_buf->ref_pic_fields.bits.adaptive_ref_pic_marking_mode_flag; + const size_t num_dec_ref_pics = + slice_param_buf->ref_pic_fields.bits.dec_ref_pic_marking_count; + if (num_dec_ref_pics > H264SliceHeader::kRefListSize) { + DVLOG(1) << "Invalid number of dec_ref_pics: " << num_dec_ref_pics; + return DecodeStatus::kFail; + } + for (size_t i = 0; i < num_dec_ref_pics; ++i) { + slice_header_out->ref_pic_marking[i].memory_mgmnt_control_operation = + slice_param_buf->memory_management_control_operation[i]; + slice_header_out->ref_pic_marking[i].difference_of_pic_nums_minus1 = + slice_param_buf->difference_of_pic_nums_minus1[i]; + slice_header_out->ref_pic_marking[i].long_term_pic_num = + slice_param_buf->long_term_pic_num[i]; + slice_header_out->ref_pic_marking[i].long_term_frame_idx = + slice_param_buf->long_term_frame_idx[i]; + slice_header_out->ref_pic_marking[i].max_long_term_frame_idx_plus1 = + slice_param_buf->max_long_term_frame_idx_plus1[i]; + } + slice_header_out->full_sample_encryption = true; + slice_header_out->full_sample_index = + status_buf->status_report_index_feedback; + return DecodeStatus::kOk; +} + DecodeStatus H264VaapiVideoDecoderDelegate::SubmitSlice( const H264PPS* pps, const H264SliceHeader* slice_hdr, @@ -191,6 +351,19 @@ const std::vector<SubsampleEntry>& subsamples) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); TRACE_EVENT0("media,gpu", "H264VaapiVideoDecoderDelegate::SubmitSlice"); + if (slice_hdr->full_sample_encryption) { + // We do not need to submit all the slice data, instead we just submit the + // index for what was already sent for parsing. The HW decoder already has + // the full slice data from when we decrypted the header. + VACencStatusParameters cenc_status = {}; + cenc_status.status_report_index_feedback = slice_hdr->full_sample_index; + return vaapi_wrapper_->SubmitBuffer(VACencStatusParameterBufferType, + sizeof(VACencStatusParameters), + &cenc_status) + ? DecodeStatus::kOk + : DecodeStatus::kFail; + } + bool uses_crypto = false; VAEncryptionParameters crypto_params = {}; if ((!subsamples.empty() && subsamples[0].cypher_bytes) ||
diff --git a/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.h b/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.h index 236951c4..df8983c 100644 --- a/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.h +++ b/media/gpu/vaapi/h264_vaapi_video_decoder_delegate.h
@@ -5,6 +5,7 @@ #ifndef MEDIA_GPU_VAAPI_H264_VAAPI_VIDEO_DECODER_DELEGATE_H_ #define MEDIA_GPU_VAAPI_H264_VAAPI_VIDEO_DECODER_DELEGATE_H_ +#include "base/atomic_sequence_num.h" #include "base/memory/scoped_refptr.h" #include "base/sequence_checker.h" #include "media/gpu/h264_decoder.h" @@ -39,6 +40,13 @@ const H264Picture::Vector& ref_pic_listb0, const H264Picture::Vector& ref_pic_listb1, scoped_refptr<H264Picture> pic) override; + Status ParseEncryptedSliceHeader( + const uint8_t* data, + size_t size, + const std::vector<SubsampleEntry>& subsamples, + const std::vector<uint8_t>& sps_nalu_data, + const std::vector<uint8_t>& pps_nalu_data, + H264SliceHeader* slice_header_out) override; Status SubmitSlice(const H264PPS* pps, const H264SliceHeader* slice_hdr, const H264Picture::Vector& ref_pic_list0,
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc index b68479d9..affb486 100644 --- a/media/gpu/vaapi/vaapi_video_decoder.cc +++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -783,11 +783,13 @@ case State::kDecoding: DCHECK(state_ == State::kWaitingForInput || state_ == State::kWaitingForOutput || - state_ == State::kChangingResolution); + state_ == State::kChangingResolution || + state_ == State::kWaitingForProtected); break; case State::kResetting: DCHECK(state_ == State::kWaitingForInput || - state_ == State::kWaitingForOutput || state_ == State::kDecoding); + state_ == State::kWaitingForOutput || state_ == State::kDecoding || + state_ == State::kWaitingForProtected); ClearDecodeTaskQueue(DecodeStatus::ABORTED); break; case State::kChangingResolution:
diff --git a/media/gpu/vaapi/vaapi_video_decoder_delegate.cc b/media/gpu/vaapi/vaapi_video_decoder_delegate.cc index 2b0b157..fc890fa 100644 --- a/media/gpu/vaapi/vaapi_video_decoder_delegate.cc +++ b/media/gpu/vaapi/vaapi_video_decoder_delegate.cc
@@ -111,6 +111,11 @@ crypto_params->encryption_type = full_sample_ ? VA_ENCRYPTION_TYPE_CENC_CTR : VA_ENCRYPTION_TYPE_CTR_128; } else { + if (full_sample_) { + LOG(ERROR) << "CBC encryption is not supported for CENCv1"; + protected_session_state_ = ProtectedSessionState::kFailed; + return protected_session_state_; + } crypto_params->encryption_type = VA_ENCRYPTION_TYPE_CBC; }
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc index 4ddbe2b..503c6ce 100644 --- a/media/gpu/vaapi/vaapi_wrapper.cc +++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -484,6 +484,11 @@ return false; } +bool IsValidVABufferType(VABufferType type) { + return type < VABufferTypeMax || type == VAEncryptionParameterBufferType || + type == VACencStatusParameterBufferType; +} + // This class is a wrapper around its |va_display_| (and its associated // |va_lock_|) to guarantee mutual exclusion and singleton behaviour. class VADisplayState { @@ -826,7 +831,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) if (mode == VaapiWrapper::kDecodeProtected && profile != VAProfileProtected) { required_attribs->push_back( - {VAConfigAttribEncryption, VA_ENCRYPTION_TYPE_CTR_128}); + {VAConfigAttribEncryption, VA_ENCRYPTION_TYPE_CENC_CTR}); } #endif @@ -2014,6 +2019,47 @@ base::BindOnce(&VaapiWrapper::DestroySurface, this)); } +scoped_refptr<VASurface> VaapiWrapper::CreateVASurfaceForUserPtr( + const gfx::Size& size, + uintptr_t* buffers, + size_t buffer_size) { + VASurfaceAttribExternalBuffers va_attrib_extbuf{}; + va_attrib_extbuf.buffers = buffers; + va_attrib_extbuf.data_size = buffer_size; + va_attrib_extbuf.num_buffers = 1u; + va_attrib_extbuf.width = size.width(); + va_attrib_extbuf.height = size.height(); + std::fill(va_attrib_extbuf.pitches, va_attrib_extbuf.pitches + 3, + size.width()); + va_attrib_extbuf.pixel_format = VA_FOURCC_NV12; + + std::vector<VASurfaceAttrib> va_attribs(2); + va_attribs[0].flags = VA_SURFACE_ATTRIB_SETTABLE; + va_attribs[0].type = VASurfaceAttribMemoryType; + va_attribs[0].value.type = VAGenericValueTypeInteger; + va_attribs[0].value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_USER_PTR; + + va_attribs[1].flags = VA_SURFACE_ATTRIB_SETTABLE; + va_attribs[1].type = VASurfaceAttribExternalBufferDescriptor; + va_attribs[1].value.type = VAGenericValueTypePointer; + va_attribs[1].value.value.p = &va_attrib_extbuf; + + VASurfaceID va_surface_id = VA_INVALID_ID; + const unsigned int va_format = VA_RT_FORMAT_YUV420; + { + base::AutoLock auto_lock(*va_lock_); + VAStatus va_res = vaCreateSurfaces( + va_display_, va_format, base::checked_cast<unsigned int>(size.width()), + base::checked_cast<unsigned int>(size.height()), &va_surface_id, 1, + &va_attribs[0], va_attribs.size()); + VA_SUCCESS_OR_RETURN(va_res, VaapiFunctions::kVACreateSurfaces_Importing, + nullptr); + } + DVLOG(2) << __func__ << " " << va_surface_id; + return new VASurface(va_surface_id, size, va_format, + base::BindOnce(&VaapiWrapper::DestroySurface, this)); +} + std::unique_ptr<NativePixmapAndSizeInfo> VaapiWrapper::ExportVASurfaceAsNativePixmapDmaBuf( const ScopedVASurface& scoped_va_surface) { @@ -2833,7 +2879,7 @@ TRACE_EVENT0("media,gpu", "VaapiWrapper::SubmitBuffer_Locked"); va_lock_->AssertAcquired(); - DCHECK_LT(va_buffer.type, VABufferTypeMax); + DCHECK(IsValidVABufferType(va_buffer.type)); DCHECK(va_buffer.data); unsigned int va_buffer_size; @@ -2864,7 +2910,7 @@ va_lock_->AssertAcquired(); DCHECK_NE(va_buffer_id, VA_INVALID_ID); - DCHECK_LT(va_buffer.type, VABufferTypeMax); + DCHECK(IsValidVABufferType(va_buffer.type)); DCHECK(va_buffer.data); ScopedVABufferMapping mapping(
diff --git a/media/gpu/vaapi/vaapi_wrapper.h b/media/gpu/vaapi/vaapi_wrapper.h index e2c95f1e..ee3f033 100644 --- a/media/gpu/vaapi/vaapi_wrapper.h +++ b/media/gpu/vaapi/vaapi_wrapper.h
@@ -310,6 +310,16 @@ scoped_refptr<VASurface> CreateVASurfaceForPixmap( scoped_refptr<gfx::NativePixmap> pixmap); + // Creates a self-releasing VASurface from |buffers|. The ownership of the + // surface is transferred to the caller. |buffers| should be a pointer array + // of size 1, with |buffer_size| corresponding to its size. |size| should be + // the desired surface dimensions (which does not need to map to |buffer_size| + // in any relevant way). |buffers| should be kept alive when using the + // VASurface and for accessing the data after the operation is complete. + scoped_refptr<VASurface> CreateVASurfaceForUserPtr(const gfx::Size& size, + uintptr_t* buffers, + size_t buffer_size); + // Syncs and exports |va_surface| as a gfx::NativePixmapDmaBuf. Currently, the // only VAAPI surface pixel formats supported are VA_FOURCC_IMC3 and // VA_FOURCC_NV12.
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc index a1d3343..3e3a7521 100644 --- a/media/mojo/clients/mojo_renderer.cc +++ b/media/mojo/clients/mojo_renderer.cc
@@ -248,16 +248,23 @@ client_->OnEnded(); } -void MojoRenderer::OnError() { +void MojoRenderer::OnError(const Status& status) { DVLOG(1) << __func__; DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(!init_cb_); encountered_error_ = true; + base::Optional<PipelineStatus> pipeline_status = + StatusCodeToPipelineStatus(status.code()); - // TODO(tim): Should we plumb error code from remote renderer? - // http://crbug.com/410451. - client_->OnError(PIPELINE_ERROR_DECODE); + // If an unexpected status code is encountered default + // back to a decode error. + if (!pipeline_status) { + // TODO(crbug.com/1153465): Log status code that failed to convert. + pipeline_status = PipelineStatus::PIPELINE_ERROR_DECODE; + } + + client_->OnError(*pipeline_status); } void MojoRenderer::OnVideoNaturalSizeChange(const gfx::Size& size) {
diff --git a/media/mojo/clients/mojo_renderer.h b/media/mojo/clients/mojo_renderer.h index c1c2283..84ace063 100644 --- a/media/mojo/clients/mojo_renderer.h +++ b/media/mojo/clients/mojo_renderer.h
@@ -72,7 +72,7 @@ void OnBufferingStateChange(BufferingState state, BufferingStateChangeReason reason) override; void OnEnded() override; - void OnError() override; + void OnError(const Status& status) override; void OnAudioConfigChange(const AudioDecoderConfig& config) override; void OnVideoConfigChange(const VideoDecoderConfig& config) override; void OnVideoNaturalSizeChange(const gfx::Size& size) override;
diff --git a/media/mojo/mojom/renderer.mojom b/media/mojo/mojom/renderer.mojom index d8ac141e0..72ce80b 100644 --- a/media/mojo/mojom/renderer.mojom +++ b/media/mojo/mojom/renderer.mojom
@@ -74,7 +74,7 @@ // Executed if any error was encountered during decode or rendering. If // this error happens during an operation that has a completion callback, // OnError() will be called before firing the completion callback. - OnError(); + OnError(Status status); // Executed whenever DemuxerStream status returns kConfigChange. Initial // configs provided by OnMetadata.
diff --git a/media/mojo/services/media_service_unittest.cc b/media/mojo/services/media_service_unittest.cc index 893608eb..9f8855a 100644 --- a/media/mojo/services/media_service_unittest.cc +++ b/media/mojo/services/media_service_unittest.cc
@@ -71,7 +71,7 @@ MOCK_METHOD2(OnBufferingStateChange, void(BufferingState state, BufferingStateChangeReason reason)); MOCK_METHOD0(OnEnded, void()); - MOCK_METHOD0(OnError, void()); + MOCK_METHOD1(OnError, void(const Status& status)); MOCK_METHOD1(OnVideoOpacityChange, void(bool opaque)); MOCK_METHOD1(OnAudioConfigChange, void(const AudioDecoderConfig&)); MOCK_METHOD1(OnVideoConfigChange, void(const VideoDecoderConfig&));
diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc index 4431452..e8ed713 100644 --- a/media/mojo/services/mojo_renderer_service.cc +++ b/media/mojo/services/mojo_renderer_service.cc
@@ -153,7 +153,9 @@ void MojoRendererService::OnError(PipelineStatus error) { DVLOG(1) << __func__ << "(" << error << ")"; state_ = STATE_ERROR; - client_->OnError(); + StatusCode status_code = PipelineStatusToStatusCode(error); + auto status = Status(status_code, PipelineStatusToString(error)); + client_->OnError(status); } void MojoRendererService::OnEnded() {
diff --git a/media/video/h264_parser.h b/media/video/h264_parser.h index f7439fe..652cbe9f 100644 --- a/media/video/h264_parser.h +++ b/media/video/h264_parser.h
@@ -359,6 +359,14 @@ // Size in bits of dec_ref_pic_marking() syntax element. size_t dec_ref_pic_marking_bit_size; size_t pic_order_cnt_bit_size; + + // This is when we are using full sample encryption and only the portions + // needed for DPB management are filled in, the rest will already be known + // by the accelerator and we will not need to specify it. + bool full_sample_encryption; + // This is used by some accelerators to handle decoding after slice header + // parsing. + uint32_t full_sample_index; }; struct H264SEIRecoveryPoint {
diff --git a/net/BUILD.gn b/net/BUILD.gn index 076568a..6c73771 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -341,6 +341,8 @@ "socket/ssl_socket.h", "socket/stream_socket.cc", "socket/stream_socket.h", + "ssl/cert_compression.cc", + "ssl/cert_compression.h", "ssl/client_cert_identity.cc", "ssl/client_cert_identity.h", "ssl/openssl_ssl_util.cc", @@ -1458,7 +1460,8 @@ if (is_fuchsia) { deps += [ "//third_party/fuchsia-sdk/sdk/pkg/async-loop-cpp" ] - public_deps += [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.netstack" ] + public_deps += + [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net.interfaces" ] sources += [ "base/network_change_notifier_fuchsia.cc", "base/network_change_notifier_fuchsia.h", @@ -1710,8 +1713,8 @@ if (is_fuchsia) { public_deps += [ - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.hardware.ethernet", - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.netstack", + "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.hardware.network", + "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net.interfaces", "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp", ] } @@ -4630,7 +4633,7 @@ if (is_fuchsia) { use_test_server = true deps += [ - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.netstack", + "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net.interfaces", "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp", ] sources += [ "base/network_change_notifier_fuchsia_unittest.cc" ]
diff --git a/net/DEPS b/net/DEPS index ba7ae88..d0ea19b 100644 --- a/net/DEPS +++ b/net/DEPS
@@ -59,7 +59,7 @@ "+third_party/brotli", ], - "ssl_client_socket_impl\.cc": [ + "cert_compression\.cc": [ "+third_party/brotli", ],
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h index d52314cc..c18e34f 100644 --- a/net/base/net_error_list.h +++ b/net/base/net_error_list.h
@@ -874,9 +874,11 @@ NET_ERROR(TRUST_TOKEN_OPERATION_FAILED, -506) // When handling a Trust Tokens protocol operation-executing request, the system -// found that the request's desired Trust Tokens results were already present in -// a local cache; as a result, the main request was cancelled. -NET_ERROR(TRUST_TOKEN_OPERATION_CACHE_HIT, -507) +// was able to execute the request's Trust Tokens operation without sending the +// request to its destination: for instance, the results could have been present +// in a local cache (for redemption) or the operation could have been diverted +// to a local provider (for "platform-provided" issuance). +NET_ERROR(TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST, -507) // *** Code -600 is reserved (was FTP_PASV_COMMAND_FAILED). ***
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc index 1bf82ef..d786914 100644 --- a/net/base/network_change_notifier.cc +++ b/net/base/network_change_notifier.cc
@@ -251,7 +251,7 @@ return std::make_unique<NetworkChangeNotifierMac>(); #elif defined(OS_FUCHSIA) return std::make_unique<NetworkChangeNotifierFuchsia>( - fuchsia::hardware::ethernet::Features()); + /*require_wlan=*/false); #else NOTIMPLEMENTED(); return NULL;
diff --git a/net/base/network_change_notifier_fuchsia.cc b/net/base/network_change_notifier_fuchsia.cc index 75d66bc..3c10a11 100644 --- a/net/base/network_change_notifier_fuchsia.cc +++ b/net/base/network_change_notifier_fuchsia.cc
@@ -4,63 +4,63 @@ #include "net/base/network_change_notifier_fuchsia.h" -#include <lib/async-loop/cpp/loop.h> -#include <lib/sys/cpp/component_context.h> - #include <algorithm> +#include <iterator> #include <string> #include <utility> #include <vector> #include "base/bind.h" #include "base/fuchsia/fuchsia_logging.h" -#include "base/fuchsia/process_context.h" #include "base/optional.h" -#include "base/run_loop.h" -#include "net/base/network_interfaces.h" -#include "net/base/network_interfaces_fuchsia.h" +#include "base/strings/stringprintf.h" namespace net { -NetworkChangeNotifierFuchsia::NetworkChangeNotifierFuchsia( - fuchsia::hardware::ethernet::Features required_features) - : NetworkChangeNotifierFuchsia(base::ComponentContextForProcess() - ->svc() - ->Connect<fuchsia::netstack::Netstack>(), - required_features) {} +NetworkChangeNotifierFuchsia::NetworkChangeNotifierFuchsia(bool require_wlan) + : NetworkChangeNotifierFuchsia(internal::ConnectInterfacesWatcher(), + require_wlan) {} NetworkChangeNotifierFuchsia::NetworkChangeNotifierFuchsia( - fidl::InterfaceHandle<fuchsia::netstack::Netstack> netstack, - fuchsia::hardware::ethernet::Features required_features, + fidl::InterfaceHandle<fuchsia::net::interfaces::Watcher> handle, + bool require_wlan, SystemDnsConfigChangeNotifier* system_dns_config_notifier) : NetworkChangeNotifier(NetworkChangeCalculatorParams(), system_dns_config_notifier), - required_features_(required_features) { - DCHECK(netstack); + require_wlan_(require_wlan) { + DCHECK(handle); - netstack_.set_error_handler([](zx_status_t status) { - ZX_LOG(FATAL, status) << "Lost connection to netstack."; - }); + watcher_.set_error_handler( + [](zx_status_t status) { + ZX_LOG(FATAL, status) + << "Lost connection to fuchsia.net.interfaces/Watcher."; + }); - netstack_.events().OnInterfacesChanged = fit::bind_member( - this, &NetworkChangeNotifierFuchsia::ProcessInterfaceList); + fuchsia::net::interfaces::WatcherSyncPtr watcher = handle.BindSync(); + base::Optional<internal::ExistingInterfaceProperties> interfaces = + internal::GetExistingInterfaces(watcher); + if (!interfaces) { + ZX_LOG(ERROR, ZX_ERR_INVALID_ARGS) << "Failed to load existing interfaces"; + return; + } + handle = watcher.Unbind(); + bool notify_ip_address_changed = false; + for (const auto& interface_entry : *interfaces) { + notify_ip_address_changed |= + CanReachExternalNetwork(interface_entry.second); + } + interface_cache_ = InterfacePropertiesMap(std::move(*interfaces)); - // Temporarily bind to a local dispatcher so we can synchronously wait for the - // synthetic event to populate the initial state. - async::Loop loop(&kAsyncLoopConfigNeverAttachToThread); - zx_status_t status = netstack_.Bind(std::move(netstack), loop.dispatcher()); - ZX_CHECK(status == ZX_OK, status) << "Bind()"; - on_initial_interfaces_received_ = - base::BindOnce(&async::Loop::Quit, base::Unretained(&loop)); - status = loop.Run(); - ZX_CHECK(status == ZX_ERR_CANCELED, status) << "loop.Run()"; + UpdateConnectionType(); + if (notify_ip_address_changed) { + NotifyObserversOfIPAddressChange(); + } // Bind to the dispatcher for the thread's MessagePump. - // - // Note this must be done before |loop| is destroyed, since that would close - // the interface handle underlying |netstack_|. - status = netstack_.Bind(netstack_.Unbind()); + zx_status_t status = watcher_.Bind(std::move(handle)); ZX_CHECK(status == ZX_OK, status) << "Bind()"; + watcher_->Watch( + fit::bind_member(this, &NetworkChangeNotifierFuchsia::OnInterfacesEvent)); } NetworkChangeNotifierFuchsia::~NetworkChangeNotifierFuchsia() { @@ -75,80 +75,146 @@ return type; } -void NetworkChangeNotifierFuchsia::ProcessInterfaceList( - std::vector<fuchsia::netstack::NetInterface> interfaces) { - netstack_->GetRouteTable( - [this, interfaces = std::move(interfaces)]( - std::vector<fuchsia::netstack::RouteTableEntry> route_table) mutable { - OnRouteTableReceived(std::move(interfaces), std::move(route_table)); - }); +void NetworkChangeNotifierFuchsia::OnInterfacesEvent( + fuchsia::net::interfaces::Event event) { + // Immediately trigger the next watch, which will happen asynchronously. If + // event processing encounters an error it'll close the watcher channel which + // will cancel any pending callbacks. + watcher_->Watch( + fit::bind_member(this, &NetworkChangeNotifierFuchsia::OnInterfacesEvent)); + + switch (event.Which()) { + case fuchsia::net::interfaces::Event::kAdded: + OnInterfaceAdded(std::move(event.added())); + break; + case fuchsia::net::interfaces::Event::kRemoved: + OnInterfaceRemoved(event.removed()); + break; + case fuchsia::net::interfaces::Event::kChanged: + OnInterfaceChanged(std::move(event.changed())); + break; + case fuchsia::net::interfaces::Event::kExisting: + case fuchsia::net::interfaces::Event::kIdle: + OnWatcherError(base::StringPrintf( + "OnInterfaceEvent: unexpected event %lu.", event.Which())); + break; + case fuchsia::net::interfaces::Event::Invalid: + LOG(WARNING) + << "Invalid event received from fuchsia.net.interfaces/Watcher"; + break; + } } -void NetworkChangeNotifierFuchsia::OnRouteTableReceived( - std::vector<fuchsia::netstack::NetInterface> interfaces, - std::vector<fuchsia::netstack::RouteTableEntry> route_table) { - // Create a set of NICs that have default routes (ie 0.0.0.0). - base::flat_set<uint32_t> default_route_ids; - for (const auto& route : route_table) { - if (MaskPrefixLength( - internal::FuchsiaIpAddressToIPAddress(route.netmask)) == 0) { - default_route_ids.insert(route.nicid); - } +void NetworkChangeNotifierFuchsia::OnInterfaceAdded( + fuchsia::net::interfaces::Properties properties) { + base::Optional<internal::InterfaceProperties> cache_entry = + internal::InterfaceProperties::VerifyAndCreate(std::move(properties)); + if (!cache_entry) { + OnWatcherError("OnInterfaceAdded: incomplete interface properties."); + return; } - - ConnectionType connection_type = CONNECTION_NONE; - base::flat_set<IPAddress> addresses; - for (auto& interface : interfaces) { - // Filter out loopback and invalid connection types. - if ((internal::ConvertConnectionType(interface) == - NetworkChangeNotifier::CONNECTION_NONE) || - (interface.features & - fuchsia::hardware::ethernet::Features::LOOPBACK) == - fuchsia::hardware::ethernet::Features::LOOPBACK) { - continue; - } - - // Filter out interfaces that do not meet the |required_features_|. - if ((interface.features & required_features_) != required_features_) { - continue; - } - - // Filter out interfaces with non-default routes. - if (!default_route_ids.contains(interface.id)) { - continue; - } - - std::vector<NetworkInterface> flattened_interfaces = - internal::NetInterfaceToNetworkInterfaces(interface); - if (flattened_interfaces.empty()) { - continue; - } - - // Add the addresses from this interface to the list of all addresses. - std::transform( - flattened_interfaces.begin(), flattened_interfaces.end(), - std::inserter(addresses, addresses.begin()), - [](const NetworkInterface& interface) { return interface.address; }); - - // Set the default connection to the first interface connection found. - if (connection_type == CONNECTION_NONE) { - connection_type = flattened_interfaces.front().type; - } + uint64_t id = properties.id(); + if (interface_cache_.find(id) != interface_cache_.end()) { + OnWatcherError(base::StringPrintf( + "OnInterfaceAdded: duplicate interface ID %lu.", id)); + return; } - - if (addresses != cached_addresses_) { - std::swap(cached_addresses_, addresses); + const bool can_reach = CanReachExternalNetwork(*cache_entry); + interface_cache_.emplace(id, std::move(*cache_entry)); + UpdateConnectionType(); + if (can_reach) { NotifyObserversOfIPAddressChange(); } +} - if (connection_type != cached_connection_type_) { +void NetworkChangeNotifierFuchsia::OnInterfaceRemoved(uint64_t interface_id) { + InterfacePropertiesMap::iterator cache_entry = + interface_cache_.find(interface_id); + if (cache_entry == interface_cache_.end()) { + OnWatcherError(base::StringPrintf( + "OnInterfaceRemoved: unknown interface ID %lu.", interface_id)); + return; + } + const bool can_reach = CanReachExternalNetwork(cache_entry->second); + interface_cache_.erase(cache_entry); + UpdateConnectionType(); + if (can_reach) { + NotifyObserversOfIPAddressChange(); + } +} + +void NetworkChangeNotifierFuchsia::OnInterfaceChanged( + fuchsia::net::interfaces::Properties properties) { + if (!properties.has_id()) { + OnWatcherError("OnInterfaceChanged: no interface ID."); + return; + } + const uint64_t id = properties.id(); + InterfacePropertiesMap::iterator cache_entry = interface_cache_.find(id); + if (cache_entry == interface_cache_.end()) { + OnWatcherError(base::StringPrintf( + "OnInterfaceChanged: unknown interface ID %lu.", id)); + return; + } + const bool old_can_reach = CanReachExternalNetwork(cache_entry->second); + const bool has_addresses = properties.has_addresses(); + if (!cache_entry->second.Update(std::move(properties))) { + OnWatcherError("OnInterfaceChanged: update failed."); + return; + } + + UpdateConnectionType(); + const bool can_reach = CanReachExternalNetwork(cache_entry->second); + if (has_addresses || old_can_reach != can_reach) { + NotifyObserversOfIPAddressChange(); + } +} + +void NetworkChangeNotifierFuchsia::OnWatcherError( + base::StringPiece error_message) { + LOG(ERROR) << error_message; + watcher_.Unbind(); + ResetConnectionType(); +} + +void NetworkChangeNotifierFuchsia::UpdateConnectionType() { + ConnectionType connection_type = ConnectionType::CONNECTION_NONE; + for (const auto& interface : interface_cache_) { + if (CanReachExternalNetwork(interface.second)) { + connection_type = GetEffectiveConnectionType(interface.second); + break; + } + } + if (connection_type != GetCurrentConnectionType()) { base::subtle::Release_Store(&cached_connection_type_, connection_type); NotifyObserversOfConnectionTypeChange(); } +} - if (on_initial_interfaces_received_) { - std::move(on_initial_interfaces_received_).Run(); +void NetworkChangeNotifierFuchsia::ResetConnectionType() { + base::subtle::Release_Store(&cached_connection_type_, + ConnectionType::CONNECTION_UNKNOWN); +} + +NetworkChangeNotifier::ConnectionType +NetworkChangeNotifierFuchsia::GetEffectiveConnectionType( + const internal::InterfaceProperties& properties) { + if (!properties.IsPubliclyRoutable()) + return NetworkChangeNotifier::CONNECTION_NONE; + + NetworkChangeNotifier::ConnectionType connection_type = + internal::ConvertConnectionType(properties.device_class()); + if (require_wlan_ && + connection_type != NetworkChangeNotifier::CONNECTION_WIFI) { + return NetworkChangeNotifier::CONNECTION_NONE; } + return connection_type; +} + +bool NetworkChangeNotifierFuchsia::CanReachExternalNetwork( + const internal::InterfaceProperties& properties) { + return GetEffectiveConnectionType(properties) != + NetworkChangeNotifier::CONNECTION_NONE; } } // namespace net
diff --git a/net/base/network_change_notifier_fuchsia.h b/net/base/network_change_notifier_fuchsia.h index 99dc60c..cb5e002 100644 --- a/net/base/network_change_notifier_fuchsia.h +++ b/net/base/network_change_notifier_fuchsia.h
@@ -5,19 +5,21 @@ #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_FUCHSIA_H_ #define NET_BASE_NETWORK_CHANGE_NOTIFIER_FUCHSIA_H_ -#include <fuchsia/netstack/cpp/fidl.h> +#include <fuchsia/net/interfaces/cpp/fidl.h> #include <lib/fidl/cpp/binding.h> #include <vector> #include "base/atomicops.h" #include "base/callback.h" -#include "base/containers/flat_set.h" +#include "base/containers/flat_map.h" #include "base/gtest_prod_util.h" +#include "base/strings/string_piece.h" #include "base/threading/thread_checker.h" #include "net/base/net_export.h" #include "net/base/network_change_notifier.h" #include "net/base/network_interfaces.h" +#include "net/base/network_interfaces_fuchsia.h" namespace net { @@ -25,9 +27,8 @@ : public NetworkChangeNotifier { public: // Registers for asynchronous notifications of changes to network interfaces. - // Interfaces are filtered by |required_features|. - explicit NetworkChangeNotifierFuchsia( - fuchsia::hardware::ethernet::Features required_features); + // Only WLAN interfaces are observed if |require_wlan| is requested. + explicit NetworkChangeNotifierFuchsia(bool require_wlan); NetworkChangeNotifierFuchsia(const NetworkChangeNotifierFuchsia&) = delete; NetworkChangeNotifierFuchsia& operator=(const NetworkChangeNotifierFuchsia&) = delete; @@ -37,42 +38,55 @@ ConnectionType GetCurrentConnectionType() const override; private: + using InterfacePropertiesMap = + base::flat_map<uint64_t, internal::InterfaceProperties>; friend class NetworkChangeNotifierFuchsiaTest; - // For testing purposes. Receives a |netstack| pointer for easy mocking. - // Interfaces are filtered by |required_features|. NetworkChangeNotifierFuchsia( - fidl::InterfaceHandle<fuchsia::netstack::Netstack> netstack, - fuchsia::hardware::ethernet::Features required_features, + fidl::InterfaceHandle<fuchsia::net::interfaces::Watcher> watcher, + bool require_wlan, SystemDnsConfigChangeNotifier* system_dns_config_notifier = nullptr); - // Forwards the network interface list along with the result of - // GetRouteTable() to OnRouteTableReceived(). - void ProcessInterfaceList( - std::vector<fuchsia::netstack::NetInterface> interfaces); + // Processes events from the watcher for interface addition, change, or + // removal. + void OnInterfacesEvent(fuchsia::net::interfaces::Event event); - // Computes network change notification state change from the list of - // interfaces and routing table data, sending observer events if IP or - // connection type changes are detected. - void OnRouteTableReceived( - std::vector<fuchsia::netstack::NetInterface> interfaces, - std::vector<fuchsia::netstack::RouteTableEntry> table); + // Handlers for the interface change events. Listeners are notified of changes + // that affect them. |watcher_| is closed if an event is malformed in some + // way. + void OnInterfaceAdded(fuchsia::net::interfaces::Properties properties); + void OnInterfaceRemoved(uint64_t interface_id); + void OnInterfaceChanged(fuchsia::net::interfaces::Properties properties); - // Required features for an interface to be taken into account. - const fuchsia::hardware::ethernet::Features required_features_; + // Unbinds the watcher, reset the connection type and logs |error_message|. + void OnWatcherError(base::StringPiece error_message); - fuchsia::netstack::NetstackPtr netstack_; + // Updates the connection type from |interface_cache_| and notifies observers + // of changes. + void UpdateConnectionType(); - // Used to allow the constructor to block until the initial state is received - // from |netstack_|. - base::OnceClosure on_initial_interfaces_received_; + // Resets the connection type to CONNECTION_UNKNOWN. + void ResetConnectionType(); + + // Returns the ConnectionType converted from |properties|' device_class. + // Returns CONNECTION_NONE if the interface is not publicly routable, taking + // into account the |requires_wlan_| setting. + ConnectionType GetEffectiveConnectionType( + const internal::InterfaceProperties& properties); + + // Returns true if the effective connection type is not CONNECTION_NONE. + bool CanReachExternalNetwork(const internal::InterfaceProperties& properties); + + // Whether only WLAN interfaces should be taken into account. + const bool require_wlan_; + + fuchsia::net::interfaces::WatcherPtr watcher_; // The ConnectionType of the default network interface, stored as an atomic // 32-bit int for safe concurrent access. base::subtle::Atomic32 cached_connection_type_ = CONNECTION_UNKNOWN; - // Set of addresses from the previous query/update for the default interface. - base::flat_set<IPAddress> cached_addresses_; + InterfacePropertiesMap interface_cache_; THREAD_CHECKER(thread_checker_); };
diff --git a/net/base/network_change_notifier_fuchsia_unittest.cc b/net/base/network_change_notifier_fuchsia_unittest.cc index cac2360..b2a9444 100644 --- a/net/base/network_change_notifier_fuchsia_unittest.cc +++ b/net/base/network_change_notifier_fuchsia_unittest.cc
@@ -4,8 +4,7 @@ #include "net/base/network_change_notifier_fuchsia.h" -#include <fuchsia/hardware/ethernet/cpp/fidl.h> -#include <fuchsia/netstack/cpp/fidl_test_base.h> +#include <fuchsia/net/interfaces/cpp/fidl_test_base.h> #include <memory> #include <string> #include <utility> @@ -32,18 +31,15 @@ using IPv4Octets = std::array<uint8_t, 4>; using IPv6Octets = std::array<uint8_t, 16>; -constexpr IPv4Octets kIPv4DefaultGatewayNetmask = {0, 0, 0, 0}; -constexpr IPv4Octets kIPv4DefaultGatewayAddress = {192, 168, 0, 1}; - constexpr IPv4Octets kDefaultIPv4Address = {192, 168, 0, 2}; -constexpr IPv4Octets kDefaultIPv4Netmask = {255, 255, 0, 0}; +constexpr uint8_t kDefaultIPv4Prefix = 16; constexpr IPv4Octets kSecondaryIPv4Address = {10, 0, 0, 1}; -constexpr IPv4Octets kSecondaryIPv4Netmask = {255, 0, 0, 0}; +constexpr uint8_t kSecondaryIPv4Prefix = 8; -constexpr IPv6Octets kDefaultIPv6Address = {0xfe, 0x80, 0x01}; -constexpr IPv6Octets kDefaultIPv6Netmask = {0xfe, 0x80}; -constexpr IPv6Octets kSecondaryIPv6Address = {0xfe, 0x80, 0x02}; -constexpr IPv6Octets kSecondaryIPv6Netmask = {0xfe, 0x80}; +constexpr IPv6Octets kDefaultIPv6Address = {0x20, 0x01, 0x01}; +constexpr uint8_t kDefaultIPv6Prefix = 16; +constexpr IPv6Octets kSecondaryIPv6Address = {0x20, 0x01, 0x02}; +constexpr uint8_t kSecondaryIPv6Prefix = 16; fuchsia::net::IpAddress IpAddressFrom(IPv4Octets octets) { fuchsia::net::IpAddress output; @@ -57,130 +53,165 @@ return output; } -fuchsia::net::Subnet SubnetFrom(IPv6Octets octets, uint8_t prefix) { +template <typename T> +fuchsia::net::Subnet SubnetFrom(T octets, uint8_t prefix) { fuchsia::net::Subnet output; output.addr = IpAddressFrom(octets); output.prefix_len = prefix; return output; } -fuchsia::netstack::NetInterface DefaultNetInterface() { - // For most tests a live interface with an IPv4 address and no |features| set +template <typename T> +fuchsia::net::interfaces::Address InterfaceAddressFrom(T octets, + uint8_t prefix) { + fuchsia::net::interfaces::Address addr; + addr.set_addr(SubnetFrom(octets, prefix)); + return addr; +} + +template <typename T> +std::vector<T> MakeSingleItemVec(T item) { + std::vector<T> vec; + vec.push_back(std::move(item)); + return vec; +} + +fuchsia::net::interfaces::Properties DefaultInterfaceProperties( + fuchsia::hardware::network::DeviceClass device_class = + fuchsia::hardware::network::DeviceClass::UNKNOWN) { + // For most tests a live interface with an IPv4 address and an unknown class // is sufficient. - fuchsia::netstack::NetInterface interface; - interface.id = kDefaultInterfaceId; - interface.flags = fuchsia::netstack::Flags::UP; - interface.features = {}; - interface.addr = IpAddressFrom(kDefaultIPv4Address); - interface.netmask = IpAddressFrom(kDefaultIPv4Netmask); - interface.broadaddr = IpAddressFrom(kDefaultIPv4Address); + fuchsia::net::interfaces::Properties interface; + interface.set_id(kDefaultInterfaceId); + interface.set_online(true); + interface.set_has_default_ipv4_route(true); + interface.set_has_default_ipv6_route(true); + interface.set_device_class(fuchsia::net::interfaces::DeviceClass::WithDevice( + std::move(device_class))); + interface.set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kDefaultIPv4Address, kDefaultIPv4Prefix))); return interface; } -fuchsia::netstack::NetInterface SecondaryNetInterface() { - // For most tests a live interface with an IPv4 address and no |features| set +fuchsia::net::interfaces::Properties SecondaryInterfaceProperties() { + // For most tests a live interface with an IPv4 address and an unknown class // is sufficient. - fuchsia::netstack::NetInterface interface; - interface.id = kSecondaryInterfaceId; - interface.flags = fuchsia::netstack::Flags::UP; - interface.features = {}; - interface.addr = IpAddressFrom(kSecondaryIPv4Address); - interface.netmask = IpAddressFrom(kSecondaryIPv4Netmask); - interface.broadaddr = IpAddressFrom(kSecondaryIPv4Address); + fuchsia::net::interfaces::Properties interface; + interface.set_id(kSecondaryInterfaceId); + interface.set_online(true); + interface.set_has_default_ipv4_route(false); + interface.set_has_default_ipv6_route(false); + interface.set_device_class(fuchsia::net::interfaces::DeviceClass::WithDevice( + fuchsia::hardware::network::DeviceClass::UNKNOWN)); + interface.set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kSecondaryIPv4Address, kSecondaryIPv4Prefix))); return interface; } -std::vector<fuchsia::netstack::NetInterface> CloneNetInterfaces( - const std::vector<fuchsia::netstack::NetInterface>& interfaces) { - std::vector<fuchsia::netstack::NetInterface> interfaces_copy( - interfaces.size()); - for (size_t i = 0; i < interfaces.size(); ++i) { - CHECK_EQ(ZX_OK, interfaces[i].Clone(&interfaces_copy[i])); - } - return interfaces_copy; +template <typename F> +fuchsia::net::interfaces::Event MakeChangeEvent(uint64_t interface_id, F fn) { + fuchsia::net::interfaces::Properties props; + props.set_id(interface_id); + fn(&props); + return fuchsia::net::interfaces::Event::WithChanged(std::move(props)); } -// Partial fake implementation of a Netstack. -class FakeNetstack : public fuchsia::netstack::testing::Netstack_TestBase { +// Partial fake implementation of a fuchsia.net.interfaces/Watcher. +class FakeWatcher : public fuchsia::net::interfaces::testing::Watcher_TestBase { public: - FakeNetstack() = default; - FakeNetstack(const FakeNetstack&) = delete; - FakeNetstack& operator=(const FakeNetstack&) = delete; - ~FakeNetstack() override = default; + explicit FakeWatcher() : binding_(this) { + // Always create the watcher with an empty set of interfaces. + // Callers can override the initial set of events with SetInitial. + pending_.push(fuchsia::net::interfaces::Event::WithIdle( + fuchsia::net::interfaces::Empty{})); + } + FakeWatcher(const FakeWatcher&) = delete; + FakeWatcher& operator=(const FakeWatcher&) = delete; + ~FakeWatcher() override = default; - void Bind( - fidl::InterfaceRequest<fuchsia::netstack::Netstack> netstack_request) { - CHECK_EQ(ZX_OK, binding_.Bind(std::move(netstack_request))); - binding_.events().OnInterfacesChanged(CloneNetInterfaces(interfaces_)); + void Bind(fidl::InterfaceRequest<fuchsia::net::interfaces::Watcher> request) { + CHECK_EQ(ZX_OK, binding_.Bind(std::move(request))); } - // Sets the interfaces reported by the fake Netstack and sends an - // OnInterfacesChanged() event to the client. - void SetInterfaces(std::vector<fuchsia::netstack::NetInterface> interfaces) { - interfaces_ = std::move(interfaces); - if (binding_.is_bound()) { - binding_.events().OnInterfacesChanged(CloneNetInterfaces(interfaces_)); + void PushEvent(fuchsia::net::interfaces::Event event) { + if (pending_callback_) { + pending_callback_(std::move(event)); + pending_callback_ = nullptr; + } else { + pending_.push(std::move(event)); } } + void SetInitial(std::vector<fuchsia::net::interfaces::Properties> props) { + // Discard any pending events. + pending_ = std::queue<fuchsia::net::interfaces::Event>(); + for (auto& prop : props) { + pending_.push( + fuchsia::net::interfaces::Event::WithExisting(std::move(prop))); + } + pending_.push(fuchsia::net::interfaces::Event::WithIdle( + fuchsia::net::interfaces::Empty{})); + // We should not have a pending callback already when setting initial state. + CHECK(!pending_callback_); + } + private: - void GetRouteTable(GetRouteTableCallback callback) override { - CHECK(binding_.is_bound()); - std::vector<fuchsia::netstack::RouteTableEntry> table(2); - - table[0].nicid = kDefaultInterfaceId; - table[0].netmask = IpAddressFrom(kIPv4DefaultGatewayNetmask); - table[0].destination = IpAddressFrom(kDefaultIPv4Address); - table[0].gateway = IpAddressFrom(kIPv4DefaultGatewayAddress); - - table[1].nicid = kSecondaryInterfaceId; - table[1].netmask = IpAddressFrom(kSecondaryIPv4Netmask); - table[1].destination = IpAddressFrom(kSecondaryIPv4Address); - table[1].gateway = IpAddressFrom(kSecondaryIPv4Address); - - callback(std::move(table)); + void Watch(WatchCallback callback) override { + ASSERT_FALSE(pending_callback_); + if (pending_.empty()) { + pending_callback_ = std::move(callback); + } else { + callback(std::move(pending_.front())); + pending_.pop(); + } } void NotImplemented_(const std::string& name) override { LOG(FATAL) << "Unimplemented function called: " << name; } - std::vector<fuchsia::netstack::NetInterface> interfaces_; - fidl::Binding<fuchsia::netstack::Netstack> binding_{this}; + std::queue<fuchsia::net::interfaces::Event> pending_; + fidl::Binding<fuchsia::net::interfaces::Watcher> binding_; + WatchCallback pending_callback_ = nullptr; }; -class FakeNetstackAsync { +class FakeWatcherAsync { public: - FakeNetstackAsync() : thread_("Netstack Thread") { + explicit FakeWatcherAsync() { base::Thread::Options options(base::MessagePumpType::IO, 0); CHECK(thread_.StartWithOptions(options)); - netstack_ = base::SequenceBound<FakeNetstack>(thread_.task_runner()); + watcher_ = base::SequenceBound<FakeWatcher>(thread_.task_runner()); } - FakeNetstackAsync(const FakeNetstackAsync&) = delete; - FakeNetstackAsync& operator=(const FakeNetstackAsync&) = delete; - ~FakeNetstackAsync() = default; + FakeWatcherAsync(const FakeWatcherAsync&) = delete; + FakeWatcherAsync& operator=(const FakeWatcherAsync&) = delete; + ~FakeWatcherAsync() = default; - void Bind( - fidl::InterfaceRequest<fuchsia::netstack::Netstack> netstack_request) { - netstack_.Post(FROM_HERE, &FakeNetstack::Bind, std::move(netstack_request)); + void Bind(fidl::InterfaceRequest<fuchsia::net::interfaces::Watcher> request) { + watcher_.Post(FROM_HERE, &FakeWatcher::Bind, std::move(request)); } - // Asynchronously update the state of the netstack. - void SetInterfaces( - const std::vector<fuchsia::netstack::NetInterface>& interfaces) { - netstack_.Post(FROM_HERE, &FakeNetstack::SetInterfaces, - CloneNetInterfaces(interfaces)); + // Asynchronously push an event to the watcher. + void PushEvent(fuchsia::net::interfaces::Event event) { + watcher_.Post(FROM_HERE, &FakeWatcher::PushEvent, std::move(event)); } - // Ensures that any SetInterfaces() or SendOnInterfacesChanged() calls have + // Asynchronously push an initial set of interfaces to the watcher. + void SetInitial(std::vector<fuchsia::net::interfaces::Properties> props) { + watcher_.Post(FROM_HERE, &FakeWatcher::SetInitial, std::move(props)); + } + + // Asynchronously push an initial single intface to the watcher. + void SetInitial(fuchsia::net::interfaces::Properties prop) { + SetInitial(MakeSingleItemVec(std::move(prop))); + } + + // Ensures that any PushEvent() or SetInitial() calls have // been processed. - void FlushNetstackThread() { - thread_.FlushForTesting(); - } + void FlushThread() { thread_.FlushForTesting(); } private: - base::Thread thread_; - base::SequenceBound<FakeNetstack> netstack_; + base::Thread thread_{"Watcher Thread"}; + base::SequenceBound<FakeWatcher> watcher_; }; template <class T> @@ -302,25 +333,22 @@ const NetworkChangeNotifierFuchsiaTest&) = delete; ~NetworkChangeNotifierFuchsiaTest() override = default; - // Creates a NetworkChangeNotifier and spins the MessageLoop to allow it to - // populate from the list of interfaces which have already been added to - // |netstack_|. |observer_| is registered last, so that tests need only - // express expectations on changes they make themselves. - void CreateNotifier( - fuchsia::hardware::ethernet::Features required_features = {}) { - // Ensure that the Netstack internal state is up-to-date before the + // Creates a NetworkChangeNotifier that binds to |watcher_|. + // |observer_| is registered last, so that tests need only express + // expectations on changes they make themselves. + void CreateNotifier(bool requires_wlan = false) { + // Ensure that internal state is up-to-date before the // notifier queries it. - netstack_.FlushNetstackThread(); + watcher_.FlushThread(); - CHECK(!netstack_handle_); - netstack_.Bind(netstack_handle_.NewRequest()); + CHECK(!watcher_handle_); + watcher_.Bind(watcher_handle_.NewRequest()); // Use a noop DNS notifier. dns_config_notifier_ = std::make_unique<SystemDnsConfigChangeNotifier>( nullptr /* task_runner */, nullptr /* dns_config_service */); notifier_.reset(new NetworkChangeNotifierFuchsia( - std::move(netstack_handle_), required_features, - dns_config_notifier_.get())); + std::move(watcher_handle_), requires_wlan, dns_config_notifier_.get())); type_observer_ = std::make_unique<FakeConnectionTypeObserver>(); ip_observer_ = std::make_unique<FakeIPAddressObserver>(); @@ -328,7 +356,7 @@ void TearDown() override { // Spin the loops to catch any unintended notifications. - netstack_.FlushNetstackThread(); + watcher_.FlushThread(); base::RunLoop().RunUntilIdle(); } @@ -336,8 +364,8 @@ base::test::SingleThreadTaskEnvironment task_environment_{ base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; - fidl::InterfaceHandle<fuchsia::netstack::Netstack> netstack_handle_; - FakeNetstackAsync netstack_; + fidl::InterfaceHandle<fuchsia::net::interfaces::Watcher> watcher_handle_; + FakeWatcherAsync watcher_; // Allows us to allocate our own NetworkChangeNotifier for unit testing. NetworkChangeNotifier::DisableForTest disable_for_test_; @@ -356,19 +384,19 @@ TEST_F(NetworkChangeNotifierFuchsiaTest, NotifyNetworkChangeOnInitialIPChange) { // Set a live interface with an IP address and create the notifier. - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].features = fuchsia::hardware::ethernet::Features::WLAN; - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties( + fuchsia::hardware::network::DeviceClass::WLAN)); CreateNotifier(); // Add the NetworkChangeNotifier, and change the IP address. This should - // trigger a network change notification, since the IP address is out-of-sync. + // trigger a network change notification. FakeNetworkChangeObserver network_change_observer; - interfaces[0].addr = IpAddressFrom(kSecondaryIPv4Address); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + props->set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kSecondaryIPv4Address, kSecondaryIPv4Prefix))); + })); EXPECT_TRUE(network_change_observer.RunAndExpectNetworkChanges( {NetworkChangeNotifier::CONNECTION_NONE, @@ -378,139 +406,137 @@ TEST_F(NetworkChangeNotifierFuchsiaTest, NoChange) { // Set a live interface with an IP address and create the notifier. - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - - // Leave the set of interfaces unchanged, but re-send OnInterfacesChanged. - netstack_.SetInterfaces(interfaces); + // Push an event with no side-effects. + watcher_.PushEvent(MakeChangeEvent(kDefaultInterfaceId, [](auto*) {})); } TEST_F(NetworkChangeNotifierFuchsiaTest, NoChangeV6) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].addr = IpAddressFrom(kDefaultIPv6Address); - interfaces[0].netmask = IpAddressFrom(kDefaultIPv6Netmask); - - netstack_.SetInterfaces(interfaces); + auto initial = DefaultInterfaceProperties(); + initial.set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix))); + watcher_.SetInitial(std::move(initial)); CreateNotifier(); - - // Leave the set of interfaces unchanged, but re-send OnInterfacesChanged. - netstack_.SetInterfaces(interfaces); + // Push an event with no side-effects. + watcher_.PushEvent(MakeChangeEvent(kDefaultInterfaceId, [](auto*) {})); } TEST_F(NetworkChangeNotifierFuchsiaTest, MultiInterfaceNoChange) { - std::vector<fuchsia::netstack::NetInterface> interfaces(2); - interfaces[0] = DefaultNetInterface(); - interfaces[1] = SecondaryNetInterface(); - - netstack_.SetInterfaces(interfaces); + std::vector<fuchsia::net::interfaces::Properties> props; + props.push_back(DefaultInterfaceProperties()); + props.push_back(SecondaryInterfaceProperties()); + watcher_.SetInitial(std::move(props)); CreateNotifier(); - - // Leave the set of interfaces unchanged, but re-send OnInterfacesChanged. - netstack_.SetInterfaces(interfaces); + // Push an event with no side-effects. + watcher_.PushEvent(MakeChangeEvent(kDefaultInterfaceId, [](auto*) {})); } TEST_F(NetworkChangeNotifierFuchsiaTest, MultiV6IPNoChange) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].ipv6addrs.push_back(SubnetFrom(kDefaultIPv6Address, 2)); + auto props = DefaultInterfaceProperties(); + props.mutable_addresses()->push_back( + InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix)); + props.mutable_addresses()->push_back( + InterfaceAddressFrom(kSecondaryIPv6Address, kSecondaryIPv6Prefix)); - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(std::move(props)); CreateNotifier(); - // Leave the set of interfaces unchanged, but re-send OnInterfacesChanged. - netstack_.SetInterfaces(interfaces); + // Push an event with no side-effects. + watcher_.PushEvent(MakeChangeEvent(kDefaultInterfaceId, [](auto*) {})); } TEST_F(NetworkChangeNotifierFuchsiaTest, IpChange) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - interfaces[0].addr = IpAddressFrom(kSecondaryIPv4Address); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + props->set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kSecondaryIPv4Address, kSecondaryIPv4Prefix))); + })); // Expect a single OnIPAddressChanged() notification. EXPECT_TRUE(ip_observer_->RunAndExpectCallCount(1)); } TEST_F(NetworkChangeNotifierFuchsiaTest, IpChangeV6) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].addr = IpAddressFrom(kDefaultIPv6Address); - interfaces[0].netmask = IpAddressFrom(kDefaultIPv6Netmask); - interfaces[0].broadaddr = IpAddressFrom(kDefaultIPv6Address); - - netstack_.SetInterfaces(interfaces); + auto props = DefaultInterfaceProperties(); + props.set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix))); + watcher_.SetInitial(std::move(props)); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - interfaces[0].addr = IpAddressFrom(kSecondaryIPv6Address); - interfaces[0].netmask = IpAddressFrom(kSecondaryIPv6Netmask); - interfaces[0].broadaddr = IpAddressFrom(kSecondaryIPv6Address); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + props->set_addresses(MakeSingleItemVec( + InterfaceAddressFrom(kSecondaryIPv6Address, kSecondaryIPv6Prefix))); + })); // Expect a single OnIPAddressChanged() notification. EXPECT_TRUE(ip_observer_->RunAndExpectCallCount(1)); } TEST_F(NetworkChangeNotifierFuchsiaTest, MultiV6IPChanged) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].ipv6addrs.push_back(SubnetFrom(kDefaultIPv6Address, 2)); + auto props = DefaultInterfaceProperties(); + props.mutable_addresses()->push_back( + InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix)); - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(std::move(props)); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - interfaces[0].addr = IpAddressFrom(kSecondaryIPv4Address); - interfaces[0].netmask = IpAddressFrom(kSecondaryIPv4Netmask); - interfaces[0].broadaddr = IpAddressFrom(kSecondaryIPv4Address); - interfaces[0].ipv6addrs[0] = SubnetFrom(kSecondaryIPv6Address, 2); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + std::vector<fuchsia::net::interfaces::Address> addrs; + addrs.push_back( + InterfaceAddressFrom(kSecondaryIPv4Address, kSecondaryIPv4Prefix)); + addrs.push_back( + InterfaceAddressFrom(kSecondaryIPv6Address, kSecondaryIPv6Prefix)); + props->set_addresses(std::move(addrs)); + })); // Expect a single OnIPAddressChanged() notification. EXPECT_TRUE(ip_observer_->RunAndExpectCallCount(1)); } TEST_F(NetworkChangeNotifierFuchsiaTest, Ipv6AdditionalIpChange) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - interfaces[0].ipv6addrs.push_back(SubnetFrom(kDefaultIPv6Address, 2)); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + // Add the initial default address + a new IPv6 one. Address changes are + // always sent as the entire new list of addresses. + props->mutable_addresses()->push_back( + InterfaceAddressFrom(kDefaultIPv4Address, kDefaultIPv4Prefix)); + props->mutable_addresses()->push_back( + InterfaceAddressFrom(kDefaultIPv6Address, kDefaultIPv6Prefix)); + })); // Expect a single OnIPAddressChanged() notification. EXPECT_TRUE(ip_observer_->RunAndExpectCallCount(1)); } TEST_F(NetworkChangeNotifierFuchsiaTest, InterfaceDown) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - interfaces[0].flags = {}; - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + props->set_online(false); + })); EXPECT_TRUE(type_observer_->RunAndExpectConnectionTypes( {NetworkChangeNotifier::ConnectionType::CONNECTION_NONE})); @@ -518,17 +544,17 @@ } TEST_F(NetworkChangeNotifierFuchsiaTest, InterfaceUp) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].flags = {}; - - netstack_.SetInterfaces(interfaces); + auto props = DefaultInterfaceProperties(); + props.set_online(false); + watcher_.SetInitial(std::move(props)); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_NONE, notifier_->GetCurrentConnectionType()); - interfaces[0].flags = fuchsia::netstack::Flags::UP; - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(MakeChangeEvent( + kDefaultInterfaceId, [](fuchsia::net::interfaces::Properties* props) { + props->set_online(true); + })); EXPECT_TRUE(type_observer_->RunAndExpectConnectionTypes( {NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN})); @@ -536,15 +562,13 @@ } TEST_F(NetworkChangeNotifierFuchsiaTest, InterfaceDeleted) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, notifier_->GetCurrentConnectionType()); - netstack_.SetInterfaces({}); + watcher_.PushEvent( + fuchsia::net::interfaces::Event::WithRemoved(kDefaultInterfaceId)); EXPECT_TRUE(type_observer_->RunAndExpectConnectionTypes( {NetworkChangeNotifier::ConnectionType::CONNECTION_NONE})); @@ -557,11 +581,9 @@ EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_NONE, notifier_->GetCurrentConnectionType()); - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].features = fuchsia::hardware::ethernet::Features::WLAN; - - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent( + fuchsia::net::interfaces::Event::WithAdded(DefaultInterfaceProperties( + fuchsia::hardware::network::DeviceClass::WLAN))); EXPECT_TRUE(type_observer_->RunAndExpectConnectionTypes( {NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI})); @@ -569,56 +591,44 @@ } TEST_F(NetworkChangeNotifierFuchsiaTest, SecondaryInterfaceAddedNoop) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties()); CreateNotifier(); - interfaces.push_back(SecondaryNetInterface()); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent(fuchsia::net::interfaces::Event::WithAdded( + SecondaryInterfaceProperties())); } TEST_F(NetworkChangeNotifierFuchsiaTest, SecondaryInterfaceDeletedNoop) { - std::vector<fuchsia::netstack::NetInterface> interfaces(2); - interfaces[0] = DefaultNetInterface(); - interfaces[1] = SecondaryNetInterface(); + std::vector<fuchsia::net::interfaces::Properties> interfaces; + interfaces.push_back(DefaultInterfaceProperties()); + interfaces.push_back(SecondaryInterfaceProperties()); - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(std::move(interfaces)); CreateNotifier(); - interfaces.pop_back(); - netstack_.SetInterfaces(interfaces); + watcher_.PushEvent( + fuchsia::net::interfaces::Event::WithRemoved(kSecondaryInterfaceId)); } TEST_F(NetworkChangeNotifierFuchsiaTest, FoundWiFi) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].features = fuchsia::hardware::ethernet::Features::WLAN; - - netstack_.SetInterfaces(interfaces); + watcher_.SetInitial(DefaultInterfaceProperties( + fuchsia::hardware::network::DeviceClass::WLAN)); CreateNotifier(); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, notifier_->GetCurrentConnectionType()); } -TEST_F(NetworkChangeNotifierFuchsiaTest, FindsInterfaceWithRequiredFeature) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - interfaces[0].features = fuchsia::hardware::ethernet::Features::WLAN; - - netstack_.SetInterfaces(interfaces); - CreateNotifier(fuchsia::hardware::ethernet::Features::WLAN); +TEST_F(NetworkChangeNotifierFuchsiaTest, FindsInterfaceWithRequiredWlan) { + watcher_.SetInitial(DefaultInterfaceProperties( + fuchsia::hardware::network::DeviceClass::WLAN)); + CreateNotifier(/*require_wlan=*/true); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, notifier_->GetCurrentConnectionType()); } -TEST_F(NetworkChangeNotifierFuchsiaTest, IgnoresInterfaceWithMissingFeature) { - std::vector<fuchsia::netstack::NetInterface> interfaces(1); - interfaces[0] = DefaultNetInterface(); - - netstack_.SetInterfaces(interfaces); - CreateNotifier(fuchsia::hardware::ethernet::Features::WLAN); +TEST_F(NetworkChangeNotifierFuchsiaTest, IgnoresNonWlanInterface) { + watcher_.SetInitial(DefaultInterfaceProperties()); + CreateNotifier(/*require_wlan=*/true); EXPECT_EQ(NetworkChangeNotifier::ConnectionType::CONNECTION_NONE, notifier_->GetCurrentConnectionType()); }
diff --git a/net/base/network_interfaces_fuchsia.cc b/net/base/network_interfaces_fuchsia.cc index 47aa4dc..e04c349 100644 --- a/net/base/network_interfaces_fuchsia.cc +++ b/net/base/network_interfaces_fuchsia.cc
@@ -4,9 +4,6 @@ #include "net/base/network_interfaces_fuchsia.h" -#include <fuchsia/hardware/ethernet/cpp/fidl.h> -#include <fuchsia/net/cpp/fidl.h> -#include <fuchsia/netstack/cpp/fidl.h> #include <lib/sys/cpp/component_context.h> #include <string> @@ -16,124 +13,222 @@ #include "base/fuchsia/fuchsia_logging.h" #include "base/fuchsia/process_context.h" #include "base/strings/stringprintf.h" -#include "net/base/ip_endpoint.h" #include "net/base/network_interfaces.h" namespace net { namespace internal { namespace { -using ConnectionType = NetworkChangeNotifier::ConnectionType; - -// Converts a Netstack NetInterface |interface| to a Chrome NetworkInterface. -// NetInterfaces may be bound to multiple IPv6 addresses. |address_index| is -// used to specify which address to use for the conversion. -// address_index = 0: Uses NetInterface::addr, NetInterface::netmask. -// address_index >= 1: Uses NetInterface::ipv6addrs[], with the array index -// offset by one. -NetworkInterface NetworkInterfaceFromAddress( - const fuchsia::netstack::NetInterface& interface, - size_t address_index) { - // TODO(crbug.com/1131220): attributes field is used to return address state - // for IPv6 addresses. Currently Netstack doesn't provide this information. - const int attributes = 0; - - IPAddress address; - uint8_t prefix_length; - if (address_index == 0) { - address = FuchsiaIpAddressToIPAddress(interface.addr); - prefix_length = - MaskPrefixLength(FuchsiaIpAddressToIPAddress(interface.netmask)); - } else { - CHECK_LE(address_index, interface.ipv6addrs.size()); - address = FuchsiaIpAddressToIPAddress( - interface.ipv6addrs.at(address_index - 1).addr); - prefix_length = interface.ipv6addrs.at(address_index - 1).prefix_len; +IPAddress FuchsiaIpAddressToIPAddress(const fuchsia::net::IpAddress& address) { + switch (address.Which()) { + case fuchsia::net::IpAddress::kIpv4: + return IPAddress(address.ipv4().addr.data(), address.ipv4().addr.size()); + case fuchsia::net::IpAddress::kIpv6: + return IPAddress(address.ipv6().addr.data(), address.ipv6().addr.size()); + default: + return IPAddress(); } - - return NetworkInterface(interface.name, interface.name, interface.id, - ConvertConnectionType(interface), address, - prefix_length, attributes); } } // namespace +// static +base::Optional<InterfaceProperties> InterfaceProperties::VerifyAndCreate( + fuchsia::net::interfaces::Properties properties) { + if (!internal::VerifyCompleteInterfaceProperties(properties)) + return base::nullopt; + return base::make_optional(InterfaceProperties(std::move(properties))); +} + +InterfaceProperties::InterfaceProperties( + fuchsia::net::interfaces::Properties properties) + : properties_(std::move(properties)) {} + +InterfaceProperties::InterfaceProperties(InterfaceProperties&& interface) = + default; + +InterfaceProperties& InterfaceProperties::operator=( + InterfaceProperties&& interface) = default; + +InterfaceProperties::~InterfaceProperties() = default; + +bool InterfaceProperties::Update( + fuchsia::net::interfaces::Properties properties) { + if (!properties.has_id() || properties_.id() != properties.id()) { + LOG(WARNING) << "Update failed: invalid properties."; + return false; + } + + if (properties.has_addresses()) { + for (const auto& fidl_address : properties.addresses()) { + if (!fidl_address.has_addr()) { + LOG(WARNING) << "Update failed: invalid properties."; + return false; + } + } + properties_.set_addresses(std::move(*properties.mutable_addresses())); + } + + if (properties.has_online()) + properties_.set_online(properties.online()); + if (properties.has_has_default_ipv4_route()) + properties_.set_has_default_ipv4_route(properties.has_default_ipv4_route()); + if (properties.has_has_default_ipv6_route()) + properties_.set_has_default_ipv6_route(properties.has_default_ipv6_route()); + + return true; +} + +void InterfaceProperties::AppendNetworkInterfaces( + NetworkInterfaceList* interfaces) const { + uint32_t address_counter = 1; + for (const auto& fidl_address : properties_.addresses()) { + IPAddress address = FuchsiaIpAddressToIPAddress(fidl_address.addr().addr); + if (address.empty()) { + LOG(WARNING) << "Unknown fuchsia.net/IpAddress variant " + << fidl_address.addr().addr.Which(); + continue; + } + + // TODO(crbug.com/1131220): Set correct attributes once available in + // fuchsia::net::interfaces::Properties. + const int kAttributes = 0; + std::string interface_name = base::StringPrintf( + "%s-%d", properties_.name().c_str(), address_counter); + address_counter++; + interfaces->emplace_back( + interface_name, interface_name, properties_.id(), + internal::ConvertConnectionType(properties_.device_class()), + std::move(address), fidl_address.addr().prefix_len, kAttributes); + } +} + +bool InterfaceProperties::IsPubliclyRoutable() const { + if (!properties_.online()) + return false; + + for (const auto& fidl_address : properties_.addresses()) { + const IPAddress address = + FuchsiaIpAddressToIPAddress(fidl_address.addr().addr); + if ((address.IsIPv4() && properties_.has_default_ipv4_route() && + !address.IsLinkLocal()) || + (address.IsIPv6() && properties_.has_default_ipv6_route() && + address.IsPubliclyRoutable())) { + return true; + } + } + return false; +} + NetworkChangeNotifier::ConnectionType ConvertConnectionType( - const fuchsia::netstack::NetInterface& iface) { - if ((iface.flags & fuchsia::netstack::Flags::UP) != - fuchsia::netstack::Flags::UP) { - return NetworkChangeNotifier::CONNECTION_NONE; - } else if ((iface.features & fuchsia::hardware::ethernet::Features::WLAN) == - fuchsia::hardware::ethernet::Features::WLAN) { - return NetworkChangeNotifier::CONNECTION_WIFI; + const fuchsia::net::interfaces::DeviceClass& device_class) { + switch (device_class.Which()) { + case fuchsia::net::interfaces::DeviceClass::kLoopback: + return NetworkChangeNotifier::CONNECTION_NONE; + case fuchsia::net::interfaces::DeviceClass::kDevice: + switch (device_class.device()) { + case fuchsia::hardware::network::DeviceClass::WLAN: + return NetworkChangeNotifier::CONNECTION_WIFI; + case fuchsia::hardware::network::DeviceClass::ETHERNET: + return NetworkChangeNotifier::CONNECTION_ETHERNET; + default: + return NetworkChangeNotifier::CONNECTION_UNKNOWN; + } + default: + LOG(WARNING) << "Received unknown fuchsia.net.interfaces/DeviceClass " + << device_class.Which(); + return NetworkChangeNotifier::CONNECTION_UNKNOWN; } - return NetworkChangeNotifier::CONNECTION_UNKNOWN; } -IPAddress FuchsiaIpAddressToIPAddress(const fuchsia::net::IpAddress& addr) { - if (addr.is_ipv4()) { - return IPAddress(addr.ipv4().addr.data(), addr.ipv4().addr.size()); - } - if (addr.is_ipv6()) { - return IPAddress(addr.ipv6().addr.data(), addr.ipv6().addr.size()); - } - return IPAddress(); +fuchsia::net::interfaces::WatcherHandle ConnectInterfacesWatcher() { + fuchsia::net::interfaces::StateSyncPtr state; + zx_status_t status = + base::ComponentContextForProcess()->svc()->Connect(state.NewRequest()); + ZX_CHECK(status == ZX_OK, status) << "Connect()"; + + fuchsia::net::interfaces::WatcherHandle watcher; + state->GetWatcher({} /*options*/, watcher.NewRequest()); + return watcher; } -std::vector<NetworkInterface> NetInterfaceToNetworkInterfaces( - const fuchsia::netstack::NetInterface& iface_in) { - std::vector<NetworkInterface> output; - - // If the interface is not currently up then there are no addresses to return. - if (internal::ConvertConnectionType(iface_in) == - NetworkChangeNotifier::CONNECTION_NONE) { - return output; +bool VerifyCompleteInterfaceProperties( + const fuchsia::net::interfaces::Properties& properties) { + if (!properties.has_id()) + return false; + if (!properties.has_addresses()) + return false; + for (const auto& fidl_address : properties.addresses()) { + if (!fidl_address.has_addr()) + return false; } + if (!properties.has_online()) + return false; + if (!properties.has_device_class()) + return false; + if (!properties.has_has_default_ipv4_route()) + return false; + if (!properties.has_has_default_ipv6_route()) + return false; + return true; +} - // It is possible for the interface not to have an IPv4 address. - NetworkInterface ipv4_interface = NetworkInterfaceFromAddress(iface_in, 0); - if (!ipv4_interface.address.IsZero()) - output.push_back(std::move(ipv4_interface)); +base::Optional<ExistingInterfaceProperties> GetExistingInterfaces( + const fuchsia::net::interfaces::WatcherSyncPtr& watcher) { + ExistingInterfaceProperties existing_interfaces; + for (;;) { + fuchsia::net::interfaces::Event event; + zx_status_t status = watcher->Watch(&event); + if (status != ZX_OK) + return base::nullopt; - // Append interface entries for all additional IPv6 addresses. - for (size_t i = 0; i < iface_in.ipv6addrs.size(); ++i) { - output.push_back(NetworkInterfaceFromAddress(iface_in, i + 1)); + switch (event.Which()) { + case fuchsia::net::interfaces::Event::Tag::kExisting: { + base::Optional<InterfaceProperties> interface = + InterfaceProperties::VerifyAndCreate(std::move(event.existing())); + if (!interface) { + return base::nullopt; + } + uint64_t id = interface->id(); + existing_interfaces.emplace_back(id, std::move(*interface)); + break; + } + case fuchsia::net::interfaces::Event::Tag::kIdle: + // Idle means we've listed all the existing interfaces. We can stop + // fetching events. + return existing_interfaces; + default: + return base::nullopt; + } } - - return output; } } // namespace internal bool GetNetworkList(NetworkInterfaceList* networks, int policy) { DCHECK(networks); - - fuchsia::netstack::NetstackSyncPtr netstack; - base::ComponentContextForProcess()->svc()->Connect(netstack.NewRequest()); + fuchsia::net::interfaces::WatcherHandle handle = + internal::ConnectInterfacesWatcher(); + fuchsia::net::interfaces::WatcherSyncPtr watcher = handle.BindSync(); // TODO(crbug.com/1131238): Use NetworkChangeNotifier's cached interface // list. - std::vector<fuchsia::netstack::NetInterface> interfaces; - zx_status_t status = netstack->GetInterfaces(&interfaces); - if (status != ZX_OK) { - ZX_LOG(ERROR, status) << "fuchsia::netstack::GetInterfaces()"; + base::Optional<internal::ExistingInterfaceProperties> existing_interfaces = + internal::GetExistingInterfaces(watcher); + if (!existing_interfaces) return false; - } - - for (auto& interface : interfaces) { - if ((internal::ConvertConnectionType(interface) == - NetworkChangeNotifier::CONNECTION_NONE) || - (interface.features & - fuchsia::hardware::ethernet::Features::LOOPBACK) == - fuchsia::hardware::ethernet::Features::LOOPBACK) { + handle = watcher.Unbind(); + for (const auto& interface_entry : *existing_interfaces) { + if (!interface_entry.second.online()) { + // GetNetworkList() only returns online interfaces. continue; } - - auto converted = internal::NetInterfaceToNetworkInterfaces(interface); - std::move(converted.begin(), converted.end(), - std::back_inserter(*networks)); + if (interface_entry.second.device_class().is_loopback()) { + // GetNetworkList() returns all interfaces except loopback. + continue; + } + interface_entry.second.AppendNetworkInterfaces(networks); } - return true; }
diff --git a/net/base/network_interfaces_fuchsia.h b/net/base/network_interfaces_fuchsia.h index b9dcf9c..38ced90 100644 --- a/net/base/network_interfaces_fuchsia.h +++ b/net/base/network_interfaces_fuchsia.h
@@ -5,41 +5,81 @@ #ifndef NET_BASE_NETWORK_INTERFACES_FUCHSIA_H_ #define NET_BASE_NETWORK_INTERFACES_FUCHSIA_H_ +#include <fuchsia/net/interfaces/cpp/fidl.h> + #include <vector> #include "net/base/network_change_notifier.h" - -namespace fuchsia { -namespace net { -class IpAddress; -} -namespace netstack { -class NetInterface; -} // namespace netstack -} // namespace fuchsia +#include "net/base/network_interfaces.h" namespace net { - -class IPAddress; -struct NetworkInterface; - namespace internal { +// Move-only wrapper for fuchsia::net::interface::Properties that guarantees +// that its inner |properties_| are valid and complete properties as reported by +// |VerifyCompleteInterfaceProperties|. +class InterfaceProperties final { + public: + // Creates an |InterfaceProperties| if |properties| are valid complete + // properties as reported by |VerifyCompleteInterfaceProperties|. + static base::Optional<InterfaceProperties> VerifyAndCreate( + fuchsia::net::interfaces::Properties properties); + InterfaceProperties(InterfaceProperties&& interface); + InterfaceProperties& operator=(InterfaceProperties&& interface); + ~InterfaceProperties(); + + // Updates this instance with the values set in |properties|. + // Fields not set in |properties| retain their previous values. + // Returns false if the |properties| has a missing or mismatched |id| field, + // or if any field set in |properties| has an invalid value (e.g. addresses of + // unknown types). + bool Update(fuchsia::net::interfaces::Properties properties); + + // Appends the NetworkInterfaces for this interface to |interfaces|. + void AppendNetworkInterfaces(NetworkInterfaceList* interfaces) const; + + // Returns true if the interface is online and it has either an IPv4 default + // route and a non-link-local address, or an IPv6 default route and a global + // address. + bool IsPubliclyRoutable() const; + + bool HasAddresses() const { return !properties_.addresses().empty(); } + uint64_t id() const { return properties_.id(); } + bool online() const { return properties_.online(); } + const fuchsia::net::interfaces::DeviceClass& device_class() const { + return properties_.device_class(); + } + + private: + explicit InterfaceProperties(fuchsia::net::interfaces::Properties properties); + + fuchsia::net::interfaces::Properties properties_; +}; + +using ExistingInterfaceProperties = + std::vector<std::pair<uint64_t, InterfaceProperties>>; + // Returns the //net ConnectionType for the supplied netstack interface -// description. Returns ConnectionType::CONNECTION_NONE if the interface is not -// "up". +// description. Returns CONNECTION_NONE for loopback interfaces. NetworkChangeNotifier::ConnectionType ConvertConnectionType( - const fuchsia::netstack::NetInterface& iface); + const fuchsia::net::interfaces::DeviceClass& device_class); -// Converts a Fuchsia Netstack NetInterface object to NetworkInterface objects. -// Interfaces with more than one IPv6 address will yield multiple -// NetworkInterface objects, with friendly names to distinguish the different -// IPs (e.g. "wlan" with three IPv6 IPs yields wlan-0, wlan-1, wlan-2). -std::vector<NetworkInterface> NetInterfaceToNetworkInterfaces( - const fuchsia::netstack::NetInterface& iface_in); +// Connects to the service via the process' ComponentContext, and connects the +// Watcher to the service. +fuchsia::net::interfaces::WatcherHandle ConnectInterfacesWatcher(); -// Converts a Fuchsia IPv4/IPv6 address to a Chromium IPAddress. -IPAddress FuchsiaIpAddressToIPAddress(const fuchsia::net::IpAddress& addr); +// Validates that |properties| contains all the required fields, returning +// |true| if so. +bool VerifyCompleteInterfaceProperties( + const fuchsia::net::interfaces::Properties& properties); + +// Consumes events describing existing interfaces from |watcher| and +// returns a vector of interface Id & properties pairs. |watcher| must +// be a newly-connected Watcher channel. +// Returns base::nullopt if any protocol error is encountered, e.g. +// |watcher| supplies an invalid event, or disconnects. +base::Optional<internal::ExistingInterfaceProperties> GetExistingInterfaces( + const fuchsia::net::interfaces::WatcherSyncPtr& watcher); } // namespace internal } // namespace net
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc index 01d5f6a..2b80a557 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc
@@ -55,6 +55,7 @@ #include "net/socket/socket_performance_watcher.h" #include "net/socket/socket_performance_watcher_factory.h" #include "net/socket/udp_client_socket.h" +#include "net/ssl/cert_compression.h" #include "net/ssl/ssl_key_logger.h" #include "net/third_party/quiche/src/quic/core/crypto/null_decrypter.h" #include "net/third_party/quiche/src/quic/core/crypto/proof_verifier.h" @@ -2158,6 +2159,8 @@ SSLKeyLoggerManager::KeyLogCallback); } + ConfigureCertificateCompression(crypto_config->ssl_ctx()); + if (!prefer_aes_gcm_recorded_) { bool prefer_aes_gcm = !crypto_config->aead.empty() && (crypto_config->aead[0] == quic::kAESG);
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc index b0dd91d..5c5c3e3 100644 --- a/net/socket/ssl_client_socket_impl.cc +++ b/net/socket/ssl_client_socket_impl.cc
@@ -52,6 +52,7 @@ #include "net/http/transport_security_state.h" #include "net/log/net_log_event_type.h" #include "net/log/net_log_values.h" +#include "net/ssl/cert_compression.h" #include "net/ssl/ssl_cert_request_info.h" #include "net/ssl/ssl_cipher_suite_names.h" #include "net/ssl/ssl_connection_status_flags.h" @@ -67,10 +68,6 @@ #include "third_party/boringssl/src/include/openssl/mem.h" #include "third_party/boringssl/src/include/openssl/ssl.h" -#if !defined(NET_DISABLE_BROTLI) -#include "third_party/brotli/include/brotli/decode.h" -#endif - namespace net { namespace { @@ -239,31 +236,6 @@ : RSAKeyUsage::kMissingDigitalSignature; } -#if !defined(NET_DISABLE_BROTLI) -int DecompressBrotliCert(SSL* ssl, - CRYPTO_BUFFER** out, - size_t uncompressed_len, - const uint8_t* in, - size_t in_len) { - uint8_t* data; - bssl::UniquePtr<CRYPTO_BUFFER> decompressed( - CRYPTO_BUFFER_alloc(&data, uncompressed_len)); - if (!decompressed) { - return 0; - } - - size_t output_size = uncompressed_len; - if (BrotliDecoderDecompress(in_len, in, &output_size, data) != - BROTLI_DECODER_RESULT_SUCCESS || - output_size != uncompressed_len) { - return 0; - } - - *out = decompressed.release(); - return 1; -} -#endif - } // namespace class SSLClientSocketImpl::SSLContext { @@ -323,11 +295,7 @@ SSL_CTX_set_msg_callback(ssl_ctx_.get(), MessageCallback); -#if !defined(NET_DISABLE_BROTLI) - SSL_CTX_add_cert_compression_alg( - ssl_ctx_.get(), TLSEXT_cert_compression_brotli, - nullptr /* compression not supported */, DecompressBrotliCert); -#endif + ConfigureCertificateCompression(ssl_ctx_.get()); if (base::FeatureList::IsEnabled(features::kPostQuantumCECPQ2)) { static const int kCurves[] = {NID_CECPQ2, NID_X25519,
diff --git a/net/socket/udp_socket_posix.cc b/net/socket/udp_socket_posix.cc index 988794f..d38f40c0 100644 --- a/net/socket/udp_socket_posix.cc +++ b/net/socket/udp_socket_posix.cc
@@ -292,6 +292,11 @@ // crbug.com/906005. CHECK_EQ(socket_hash_, GetSocketFDHash(socket_)); #if defined(OS_MAC) + // This is a speculative workaround for https://crbug.com/1151048. The idea is + // that the call to shutdown() will absorb any errors on the socket, so they + // won't be reported by close. + // TODO(ricea): Remove if this if it doesn't work or a proper fix is found. + HANDLE_EINTR(shutdown(socket_, SHUT_RDWR)); PCHECK(IGNORE_EINTR(guarded_close_np(socket_, &kSocketFdGuard)) == 0); #else PCHECK(IGNORE_EINTR(close(socket_)) == 0);
diff --git a/net/ssl/cert_compression.cc b/net/ssl/cert_compression.cc new file mode 100644 index 0000000..8d38d77e --- /dev/null +++ b/net/ssl/cert_compression.cc
@@ -0,0 +1,56 @@ +// 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 "net/ssl/cert_compression.h" + +#include <cstdint> + +#include "third_party/boringssl/src/include/openssl/ssl.h" + +#if !defined(NET_DISABLE_BROTLI) +#include "third_party/brotli/include/brotli/decode.h" +#endif + +namespace net { +namespace { + +#if !defined(NET_DISABLE_BROTLI) +int DecompressBrotliCert(SSL* ssl, + CRYPTO_BUFFER** out, + size_t uncompressed_len, + const uint8_t* in, + size_t in_len) { + uint8_t* data; + bssl::UniquePtr<CRYPTO_BUFFER> decompressed( + CRYPTO_BUFFER_alloc(&data, uncompressed_len)); + if (!decompressed) { + return 0; + } + + size_t output_size = uncompressed_len; + if (BrotliDecoderDecompress(in_len, in, &output_size, data) != + BROTLI_DECODER_RESULT_SUCCESS || + output_size != uncompressed_len) { + return 0; + } + + *out = decompressed.release(); + return 1; +} +#endif + +} // namespace + +void ConfigureCertificateCompression(SSL_CTX* ctx) { +#if !defined(NET_DISABLE_BROTLI) + SSL_CTX_add_cert_compression_alg(ctx, TLSEXT_cert_compression_brotli, + nullptr /* compression not supported */, + DecompressBrotliCert); +#endif + + // Avoid "unused argument" errors in case no algorithms are supported. + (void)(ctx); +} + +} // namespace net
diff --git a/net/ssl/cert_compression.h b/net/ssl/cert_compression.h new file mode 100644 index 0000000..32d1a1a --- /dev/null +++ b/net/ssl/cert_compression.h
@@ -0,0 +1,19 @@ +// 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 NET_SSL_CERT_COMPRESSION_H_ +#define NET_SSL_CERT_COMPRESSION_H_ + +#include "third_party/boringssl/src/include/openssl/base.h" + +namespace net { + +// Configures certificate compression callbacks on an SSL context. The +// availability of individual algorithms may depend on the parameters with +// which the network stack is compiled. +void ConfigureCertificateCompression(SSL_CTX* ctx); + +} // namespace net + +#endif // NET_SSL_CERT_COMPRESSION_H_
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn index 72493f2..1ae1957 100644 --- a/pdf/BUILD.gn +++ b/pdf/BUILD.gn
@@ -177,6 +177,7 @@ configs += [ ":pdf_common_config" ] deps = [ + ":accessibility_structs", ":internal", ":pdf", ":ppapi_migration", @@ -189,7 +190,10 @@ source_set("accessibility_structs") { visibility = [ ":*" ] - sources = [ "accessibility_structs.h" ] + sources = [ + "accessibility_structs.cc", + "accessibility_structs.h", + ] configs += [ ":pdf_common_config" ]
diff --git a/pdf/DEPS b/pdf/DEPS index 8e2748a..42f36a7 100644 --- a/pdf/DEPS +++ b/pdf/DEPS
@@ -10,5 +10,6 @@ "+ui/events/keycodes/keyboard_codes.h", "+ui/gfx/geometry", "+ui/gfx/range/range.h", + "+ui/gfx/test/gfx_util.h", "+v8/include/v8.h" ]
diff --git a/pdf/accessibility.cc b/pdf/accessibility.cc index fc767a6..1833ced 100644 --- a/pdf/accessibility.cc +++ b/pdf/accessibility.cc
@@ -18,16 +18,15 @@ namespace { -bool IsCharWithinTextRun( - const pp::PDF::PrivateAccessibilityTextRunInfo& text_run, - uint32_t text_run_start_char_index, - uint32_t char_index) { +bool IsCharWithinTextRun(const AccessibilityTextRunInfo& text_run, + uint32_t text_run_start_char_index, + uint32_t char_index) { return char_index >= text_run_start_char_index && char_index - text_run_start_char_index < text_run.len; } bool GetEnclosingTextRunRangeForCharRange( - const std::vector<pp::PDF::PrivateAccessibilityTextRunInfo>& text_runs, + const std::vector<AccessibilityTextRunInfo>& text_runs, int start_char_index, int char_count, uint32_t* start_text_run_index, @@ -68,7 +67,7 @@ void GetAccessibilityLinkInfo( PDFEngine* engine, int32_t page_index, - const std::vector<pp::PDF::PrivateAccessibilityTextRunInfo>& text_runs, + const std::vector<AccessibilityTextRunInfo>& text_runs, std::vector<pp::PDF::PrivateAccessibilityLinkInfo>* links) { std::vector<PDFEngine::AccessibilityLinkInfo> engine_link_info = engine->GetLinkInfo(page_index); @@ -117,7 +116,7 @@ void GetAccessibilityHighlightInfo( PDFEngine* engine, int32_t page_index, - const std::vector<pp::PDF::PrivateAccessibilityTextRunInfo>& text_runs, + const std::vector<AccessibilityTextRunInfo>& text_runs, std::vector<pp::PDF::PrivateAccessibilityHighlightInfo>* highlights) { std::vector<PDFEngine::AccessibilityHighlightInfo> engine_highlight_info = engine->GetHighlightInfo(page_index); @@ -185,7 +184,7 @@ PDFEngine* engine, int32_t page_index, AccessibilityPageInfo& page_info, - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo>* text_runs, + std::vector<AccessibilityTextRunInfo>& text_runs, std::vector<AccessibilityCharInfo>& chars, pp::PDF::PrivateAccessibilityPageObjects* page_objects) { int page_count = engine->GetNumberOfPages(); @@ -210,13 +209,13 @@ int char_index = 0; while (char_index < char_count) { - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> - text_run_info_result = engine->GetTextRunInfo(page_index, char_index); + base::Optional<AccessibilityTextRunInfo> text_run_info_result = + engine->GetTextRunInfo(page_index, char_index); DCHECK(text_run_info_result.has_value()); const auto& text_run_info = text_run_info_result.value(); uint32_t text_run_end = char_index + text_run_info.len; DCHECK_LE(text_run_end, static_cast<uint32_t>(char_count)); - text_runs->push_back(text_run_info); + text_runs.push_back(text_run_info); // We need to provide enough information to draw a bounding box // around any arbitrary text range, but the bounding boxes of characters @@ -233,25 +232,25 @@ gfx::RectF next_char_bounds = engine->GetCharBounds(page_index, i + 1); double& char_width = chars[i].char_width; switch (text_run_info.direction) { - case PP_PRIVATEDIRECTION_NONE: - case PP_PRIVATEDIRECTION_LTR: + case AccessibilityTextDirection::kNone: + case AccessibilityTextDirection::kLeftToRight: char_width = next_char_bounds.x() - char_bounds.x(); break; - case PP_PRIVATEDIRECTION_TTB: + case AccessibilityTextDirection::kTopToBottom: char_width = next_char_bounds.y() - char_bounds.y(); break; - case PP_PRIVATEDIRECTION_RTL: + case AccessibilityTextDirection::kRightToLeft: char_width = char_bounds.right() - next_char_bounds.right(); break; - case PP_PRIVATEDIRECTION_BTT: + case AccessibilityTextDirection::kBottomToTop: char_width = char_bounds.bottom() - next_char_bounds.bottom(); break; } char_bounds = next_char_bounds; } double& char_width = chars[text_run_end - 1].char_width; - if (text_run_info.direction == PP_PRIVATEDIRECTION_BTT || - text_run_info.direction == PP_PRIVATEDIRECTION_TTB) { + if (text_run_info.direction == AccessibilityTextDirection::kBottomToTop || + text_run_info.direction == AccessibilityTextDirection::kTopToBottom) { char_width = char_bounds.height(); } else { char_width = char_bounds.width(); @@ -260,12 +259,11 @@ char_index += text_run_info.len; } - page_info.text_run_count = text_runs->size(); - GetAccessibilityLinkInfo(engine, page_index, *text_runs, - &page_objects->links); + page_info.text_run_count = text_runs.size(); + GetAccessibilityLinkInfo(engine, page_index, text_runs, &page_objects->links); GetAccessibilityImageInfo(engine, page_index, page_info.text_run_count, &page_objects->images); - GetAccessibilityHighlightInfo(engine, page_index, *text_runs, + GetAccessibilityHighlightInfo(engine, page_index, text_runs, &page_objects->highlights); GetAccessibilityFormFieldInfo(engine, page_index, page_info.text_run_count, &page_objects->form_fields);
diff --git a/pdf/accessibility.h b/pdf/accessibility.h index ca6a4b8c..5d21cd6 100644 --- a/pdf/accessibility.h +++ b/pdf/accessibility.h
@@ -13,9 +13,10 @@ namespace chrome_pdf { +class PDFEngine; struct AccessibilityCharInfo; struct AccessibilityPageInfo; -class PDFEngine; +struct AccessibilityTextRunInfo; // Retrieve |page_info|, |text_runs|, |chars|, and |page_objects| from // |engine| for the page at 0-indexed |page_index|. Returns true on success with @@ -25,7 +26,7 @@ PDFEngine* engine, int32_t page_index, AccessibilityPageInfo& page_info, - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo>* text_runs, + std::vector<AccessibilityTextRunInfo>& text_runs, std::vector<AccessibilityCharInfo>& chars, pp::PDF::PrivateAccessibilityPageObjects* page_objects);
diff --git a/pdf/accessibility_structs.cc b/pdf/accessibility_structs.cc new file mode 100644 index 0000000..603e00f --- /dev/null +++ b/pdf/accessibility_structs.cc
@@ -0,0 +1,48 @@ +// 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 "pdf/accessibility_structs.h" + +namespace chrome_pdf { + +AccessibilityTextStyleInfo::AccessibilityTextStyleInfo() = default; + +AccessibilityTextStyleInfo::AccessibilityTextStyleInfo( + const std::string& font_name, + int font_weight, + AccessibilityTextRenderMode render_mode, + float font_size, + uint32_t fill_color, + uint32_t stroke_color, + bool is_italic, + bool is_bold) + : font_name(font_name), + font_weight(font_weight), + render_mode(render_mode), + font_size(font_size), + fill_color(fill_color), + stroke_color(stroke_color), + is_italic(is_italic), + is_bold(is_bold) {} + +AccessibilityTextStyleInfo::AccessibilityTextStyleInfo( + const AccessibilityTextStyleInfo& other) = default; + +AccessibilityTextStyleInfo::~AccessibilityTextStyleInfo() = default; + +AccessibilityTextRunInfo::AccessibilityTextRunInfo() = default; + +AccessibilityTextRunInfo::AccessibilityTextRunInfo( + uint32_t len, + const gfx::RectF& bounds, + AccessibilityTextDirection direction, + const AccessibilityTextStyleInfo& style) + : len(len), bounds(bounds), direction(direction), style(style) {} + +AccessibilityTextRunInfo::AccessibilityTextRunInfo( + const AccessibilityTextRunInfo& other) = default; + +AccessibilityTextRunInfo::~AccessibilityTextRunInfo() = default; + +} // namespace chrome_pdf
diff --git a/pdf/accessibility_structs.h b/pdf/accessibility_structs.h index 72c936a..2ea67fd 100644 --- a/pdf/accessibility_structs.h +++ b/pdf/accessibility_structs.h
@@ -7,7 +7,10 @@ #include <stdint.h> +#include <string> + #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_f.h" namespace chrome_pdf { @@ -18,6 +21,75 @@ uint32_t char_count = 0; }; +// TODO(crbug.com/1144444): Remove next line comment after PDF migrates away +// from Pepper. +// Explicitly set all enum values to match enum values in PP_TextRenderingMode. +// See PDF Reference 1.7, page 402, table 5.3. +enum class AccessibilityTextRenderMode { + kUnknown = -1, + kFill = 0, + kStroke = 1, + kFillStroke = 2, + kInvisible = 3, + kFillClip = 4, + kStrokeClip = 5, + kFillStrokeClip = 6, + kClip = 7, + kMaxValue = kClip, +}; + +struct AccessibilityTextStyleInfo { + AccessibilityTextStyleInfo(); + AccessibilityTextStyleInfo(const std::string& font_name, + int font_weight, + AccessibilityTextRenderMode render_mode, + float font_size, + uint32_t fill_color, + uint32_t stroke_color, + bool is_italic, + bool is_bold); + AccessibilityTextStyleInfo(const AccessibilityTextStyleInfo& other); + ~AccessibilityTextStyleInfo(); + + std::string font_name; + int font_weight = 0; + AccessibilityTextRenderMode render_mode = + AccessibilityTextRenderMode::kUnknown; + float font_size = 0.0f; + // Colors are ARGB. + uint32_t fill_color = 0; + uint32_t stroke_color = 0; + bool is_italic = false; + bool is_bold = false; +}; + +// TODO(crbug.com/1144444): Remove next line comment after PDF migrates away +// from Pepper. +// Explicitly set all enum values to match enum values in PP_PrivateDirection. +enum class AccessibilityTextDirection { + kNone = 0, + kLeftToRight = 1, + kRightToLeft = 2, + kTopToBottom = 3, + kBottomToTop = 4, + kMaxValue = kBottomToTop, +}; + +struct AccessibilityTextRunInfo { + AccessibilityTextRunInfo(); + AccessibilityTextRunInfo(uint32_t len, + const gfx::RectF& bounds, + AccessibilityTextDirection direction, + const AccessibilityTextStyleInfo& style); + AccessibilityTextRunInfo(const AccessibilityTextRunInfo& other); + ~AccessibilityTextRunInfo(); + + uint32_t len = 0; + gfx::RectF bounds; + AccessibilityTextDirection direction = AccessibilityTextDirection::kNone; + struct AccessibilityTextStyleInfo style; +}; + struct AccessibilityCharInfo { uint32_t unicode_character = 0; double char_width = 0.0; @@ -25,4 +97,4 @@ } // namespace chrome_pdf -#endif // PDF_ACCESSIBILITY_STRUCTS_H_ \ No newline at end of file +#endif // PDF_ACCESSIBILITY_STRUCTS_H_
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc index b25fc5d..e0bf0fcb 100644 --- a/pdf/out_of_process_instance.cc +++ b/pdf/out_of_process_instance.cc
@@ -498,6 +498,37 @@ return pp_chars; } +pp::PDF::PrivateAccessibilityTextStyleInfo +PrivateAccessibilityTextStyleInfoFromAccessibilityTextStyleInfo( + const AccessibilityTextStyleInfo& style) { + pp::PDF::PrivateAccessibilityTextStyleInfo pp_style; + pp_style.font_name = style.font_name; + pp_style.font_weight = style.font_weight; + pp_style.render_mode = static_cast<PP_TextRenderingMode>(style.render_mode); + pp_style.font_size = style.font_size; + pp_style.fill_color = style.fill_color; + pp_style.stroke_color = style.stroke_color; + pp_style.is_italic = style.is_italic; + pp_style.is_bold = style.is_bold; + return pp_style; +} + +std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> +PrivateAccessibilityCharInfoFromAccessibilityTextRunInfo( + const std::vector<AccessibilityTextRunInfo>& text_runs) { + std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> pp_text_runs; + pp_text_runs.reserve(text_runs.size()); + for (const auto& text_run : text_runs) { + pp::PDF::PrivateAccessibilityTextRunInfo pp_text_run = { + text_run.len, PPFloatRectFromRectF(text_run.bounds), + static_cast<PP_PrivateDirection>(text_run.direction), + PrivateAccessibilityTextStyleInfoFromAccessibilityTextStyleInfo( + text_run.style)}; + pp_text_runs.push_back(std::move(pp_text_run)); + } + return pp_text_runs; +} + } // namespace OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance) @@ -846,11 +877,11 @@ ++next_accessibility_page_index_; AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - if (!GetAccessibilityInfo(engine(), page_index, page_info, &text_runs, chars, + if (!GetAccessibilityInfo(engine(), page_index, page_info, text_runs, chars, &page_objects)) { return; } @@ -859,8 +890,10 @@ PrivateAccessibilityPageInfoFromAccessibilityPageInfo(page_info); std::vector<PP_PrivateAccessibilityCharInfo> pp_chars = PrivateAccessibilityCharInfoFromAccessibilityCharInfo(chars); + std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> pp_text_runs = + PrivateAccessibilityCharInfoFromAccessibilityTextRunInfo(text_runs); pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &pp_page_info, - text_runs, pp_chars, page_objects); + pp_text_runs, pp_chars, page_objects); // Schedule loading the next page. pp::Module::Get()->core()->CallOnMainThread(
diff --git a/pdf/pdf_engine.h b/pdf/pdf_engine.h index e738797f..590148c 100644 --- a/pdf/pdf_engine.h +++ b/pdf/pdf_engine.h
@@ -57,6 +57,7 @@ class InputEvent; class Thumbnail; class UrlLoader; +struct AccessibilityTextRunInfo; struct DocumentAttachmentInfo; struct DocumentMetadata; @@ -436,10 +437,11 @@ virtual uint32_t GetCharUnicode(int page_index, int char_index) = 0; // Given a start char index, find the longest continuous run of text that's // in a single direction and with the same text style. Return a filled out - // pp::PDF::PrivateAccessibilityTextRunInfo on success or base::nullopt on - // failure. e.g. When |start_char_index| is out of bounds. - virtual base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> - GetTextRunInfo(int page_index, int start_char_index) = 0; + // AccessibilityTextRunInfo on success or base::nullopt on failure. e.g. When + // |start_char_index| is out of bounds. + virtual base::Optional<AccessibilityTextRunInfo> GetTextRunInfo( + int page_index, + int start_char_index) = 0; // For all the links on page |page_index|, get their urls, underlying text // ranges and bounding boxes. virtual std::vector<AccessibilityLinkInfo> GetLinkInfo(int page_index) = 0;
diff --git a/pdf/pdfium/accessibility_unittest.cc b/pdf/pdfium/accessibility_unittest.cc index 19a0e3f..3ed2ab5 100644 --- a/pdf/pdfium/accessibility_unittest.cc +++ b/pdf/pdfium/accessibility_unittest.cc
@@ -75,11 +75,11 @@ ASSERT_EQ(2, engine->GetNumberOfPages()); AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, &text_runs, - chars, &page_objects)); + ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, text_runs, chars, + &page_objects)); EXPECT_EQ(0u, page_info.page_index); EXPECT_EQ(gfx::Rect(5, 3, 266, 266), page_info.bounds); EXPECT_EQ(text_runs.size(), page_info.text_run_count); @@ -92,13 +92,13 @@ const auto& expected = kExpectedTextRuns[i]; EXPECT_EQ(expected.len, text_runs[i].len) << i; EXPECT_FLOAT_EQ(expected.font_size, text_runs[i].style.font_size) << i; - EXPECT_FLOAT_EQ(expected.bounds_x, text_runs[i].bounds.point.x) << i; - EXPECT_FLOAT_EQ(expected.bounds_y, text_runs[i].bounds.point.y) << i; + EXPECT_FLOAT_EQ(expected.bounds_x, text_runs[i].bounds.x()) << i; + EXPECT_FLOAT_EQ(expected.bounds_y, text_runs[i].bounds.y()) << i; float expected_bounds_w = GetExpectedBoundsWidth(using_test_fonts, i, expected.bounds_w); - EXPECT_FLOAT_EQ(expected_bounds_w, text_runs[i].bounds.size.width) << i; - EXPECT_FLOAT_EQ(expected.bounds_h, text_runs[i].bounds.size.height) << i; - EXPECT_EQ(PP_PRIVATEDIRECTION_LTR, text_runs[i].direction); + EXPECT_FLOAT_EQ(expected_bounds_w, text_runs[i].bounds.width()) << i; + EXPECT_FLOAT_EQ(expected.bounds_h, text_runs[i].bounds.height()) << i; + EXPECT_EQ(AccessibilityTextDirection::kLeftToRight, text_runs[i].direction); } ASSERT_EQ(kExpectedCharCount, chars.size()); @@ -128,11 +128,11 @@ ASSERT_EQ(1, engine->GetNumberOfPages()); AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, &text_runs, - chars, &page_objects)); + ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, text_runs, chars, + &page_objects)); EXPECT_EQ(0u, page_info.page_index); EXPECT_EQ(gfx::Rect(5, 3, 816, 1056), page_info.bounds); EXPECT_EQ(text_runs.size(), page_info.text_run_count); @@ -471,11 +471,11 @@ ASSERT_EQ(1, engine->GetNumberOfPages()); AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, &text_runs, - chars, &page_objects)); + ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, text_runs, chars, + &page_objects)); EXPECT_EQ(0u, page_info.page_index); EXPECT_EQ(gfx::Rect(5, 3, 533, 266), page_info.bounds); EXPECT_EQ(text_runs.size(), page_info.text_run_count); @@ -518,11 +518,11 @@ ASSERT_EQ(1, engine->GetNumberOfPages()); AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, &text_runs, - chars, &page_objects)); + ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, text_runs, chars, + &page_objects)); EXPECT_EQ(0u, page_info.page_index); EXPECT_EQ(gfx::Rect(5, 3, 533, 266), page_info.bounds); EXPECT_EQ(text_runs.size(), page_info.text_run_count); @@ -576,11 +576,11 @@ ASSERT_EQ(1, engine->GetNumberOfPages()); AccessibilityPageInfo page_info; - std::vector<pp::PDF::PrivateAccessibilityTextRunInfo> text_runs; + std::vector<AccessibilityTextRunInfo> text_runs; std::vector<AccessibilityCharInfo> chars; pp::PDF::PrivateAccessibilityPageObjects page_objects; - ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, &text_runs, - chars, &page_objects)); + ASSERT_TRUE(GetAccessibilityInfo(engine.get(), 0, page_info, text_runs, chars, + &page_objects)); EXPECT_EQ(0u, page_info.page_index); EXPECT_EQ(gfx::Rect(5, 3, 400, 400), page_info.bounds); EXPECT_EQ(text_runs.size(), page_info.text_run_count);
diff --git a/pdf/pdfium/pdfium_assert_matching_enums.cc b/pdf/pdfium/pdfium_assert_matching_enums.cc index ef3e388e..acc8882 100644 --- a/pdf/pdfium/pdfium_assert_matching_enums.cc +++ b/pdf/pdfium/pdfium_assert_matching_enums.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "build/build_config.h" +#include "pdf/accessibility_structs.h" #include "pdf/pdf_engine.h" #include "pdf/ppapi_migration/input_event_conversions.h" #include "ppapi/c/pp_input_event.h" @@ -276,6 +277,27 @@ STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_CLIP, FPDF_TEXTRENDERMODE_CLIP); STATIC_ASSERT_ENUM(PP_TEXTRENDERINGMODE_LAST, FPDF_TEXTRENDERMODE_LAST); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kUnknown, + PP_TEXTRENDERINGMODE_UNKNOWN); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kFill, + PP_TEXTRENDERINGMODE_FILL); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kStroke, + PP_TEXTRENDERINGMODE_STROKE); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kFillStroke, + PP_TEXTRENDERINGMODE_FILLSTROKE); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kInvisible, + PP_TEXTRENDERINGMODE_INVISIBLE); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kFillClip, + PP_TEXTRENDERINGMODE_FILLCLIP); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kStrokeClip, + PP_TEXTRENDERINGMODE_STROKECLIP); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kFillStrokeClip, + PP_TEXTRENDERINGMODE_FILLSTROKECLIP); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kClip, + PP_TEXTRENDERINGMODE_CLIP); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextRenderMode::kMaxValue, + PP_TEXTRENDERINGMODE_LAST); + STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kNone, FORMTYPE_NONE); STATIC_ASSERT_ENUM(chrome_pdf::PDFEngine::FormType::kAcroForm, FORMTYPE_ACRO_FORM); @@ -296,4 +318,17 @@ STATIC_ASSERT_ENUM(chrome_pdf::kPostScript3, FPDF_PRINTMODE_POSTSCRIPT3); STATIC_ASSERT_ENUM(chrome_pdf::kEmfWithReducedRasterization, FPDF_PRINTMODE_EMF_IMAGE_MASKS); -#endif \ No newline at end of file +#endif + +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kNone, + PP_PRIVATEDIRECTION_NONE); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kLeftToRight, + PP_PRIVATEDIRECTION_LTR); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kRightToLeft, + PP_PRIVATEDIRECTION_RTL); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kTopToBottom, + PP_PRIVATEDIRECTION_TTB); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kBottomToTop, + PP_PRIVATEDIRECTION_BTT); +STATIC_ASSERT_ENUM(chrome_pdf::AccessibilityTextDirection::kMaxValue, + PP_PRIVATEDIRECTION_LAST);
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index c460e41..f463395 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -31,6 +31,7 @@ #include "gin/public/gin_embedders.h" #include "gin/public/isolate_holder.h" #include "gin/public/v8_platform.h" +#include "pdf/accessibility_structs.h" #include "pdf/document_loader_impl.h" #include "pdf/draw_utils/coordinates.h" #include "pdf/draw_utils/shadow.h" @@ -2468,8 +2469,9 @@ return pages_[page_index]->GetCharUnicode(char_index); } -base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> -PDFiumEngine::GetTextRunInfo(int page_index, int start_char_index) { +base::Optional<AccessibilityTextRunInfo> PDFiumEngine::GetTextRunInfo( + int page_index, + int start_char_index) { DCHECK(PageIndexInBounds(page_index)); auto info = pages_[page_index]->GetTextRunInfo(start_char_index); if (!client_->IsPrintPreview() && start_char_index >= 0)
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h index 0a59d55..2dca35c 100644 --- a/pdf/pdfium/pdfium_engine.h +++ b/pdf/pdfium/pdfium_engine.h
@@ -46,6 +46,7 @@ class PDFiumDocument; class PDFiumPermissions; class TouchInputEvent; +struct AccessibilityTextRunInfo; namespace draw_utils { class ShadowMatrix; @@ -135,7 +136,7 @@ int GetCharCount(int page_index) override; gfx::RectF GetCharBounds(int page_index, int char_index) override; uint32_t GetCharUnicode(int page_index, int char_index) override; - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> GetTextRunInfo( + base::Optional<AccessibilityTextRunInfo> GetTextRunInfo( int page_index, int start_char_index) override; std::vector<AccessibilityLinkInfo> GetLinkInfo(int page_index) override;
diff --git a/pdf/pdfium/pdfium_page.cc b/pdf/pdfium/pdfium_page.cc index 0638e10..ef9fb43 100644 --- a/pdf/pdfium/pdfium_page.cc +++ b/pdf/pdfium/pdfium_page.cc
@@ -21,6 +21,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "pdf/accessibility_structs.h" #include "pdf/pdfium/pdfium_api_string_buffer_adapter.h" #include "pdf/pdfium/pdfium_engine.h" #include "pdf/pdfium/pdfium_unsupported_features.h" @@ -122,7 +123,7 @@ return i; } -PP_PrivateDirection GetDirectionFromAngle(float angle) { +AccessibilityTextDirection GetDirectionFromAngle(float angle) { // Rotating the angle by 45 degrees to simplify the conditions statements. // It's like if we rotated the whole cartesian coordinate system like below. // X X @@ -140,15 +141,15 @@ angle = fmodf(angle + k45DegreesInRadians, k360DegreesInRadians); // Quadrant I. if (angle >= 0 && angle <= k90DegreesInRadians) - return PP_PRIVATEDIRECTION_LTR; + return AccessibilityTextDirection::kLeftToRight; // Quadrant II. if (angle > k90DegreesInRadians && angle <= k180DegreesInRadians) - return PP_PRIVATEDIRECTION_TTB; + return AccessibilityTextDirection::kTopToBottom; // Quadrant III. if (angle > k180DegreesInRadians && angle <= k270DegreesInRadians) - return PP_PRIVATEDIRECTION_RTL; + return AccessibilityTextDirection::kRightToLeft; // Quadrant IV. - return PP_PRIVATEDIRECTION_BTT; + return AccessibilityTextDirection::kBottomToTop; } void AddCharSizeToAverageCharSize(gfx::SizeF new_size, @@ -349,16 +350,16 @@ void PDFiumPage::CalculateTextRunStyleInfo( int char_index, - pp::PDF::PrivateAccessibilityTextStyleInfo* style_info) { + AccessibilityTextStyleInfo& style_info) { FPDF_TEXTPAGE text_page = GetTextPage(); - style_info->font_size = FPDFText_GetFontSize(text_page, char_index); + style_info.font_size = FPDFText_GetFontSize(text_page, char_index); int flags = 0; size_t buffer_size = FPDFText_GetFontInfo(text_page, char_index, nullptr, 0, &flags); if (buffer_size > 0) { PDFiumAPIStringBufferAdapter<std::string> api_string_adapter( - &style_info->font_name, buffer_size, true); + &style_info.font_name, buffer_size, true); void* data = api_string_adapter.GetData(); size_t bytes_written = FPDFText_GetFontInfo(text_page, char_index, data, buffer_size, nullptr); @@ -366,22 +367,22 @@ api_string_adapter.Close(bytes_written); } - style_info->font_weight = FPDFText_GetFontWeight(text_page, char_index); + style_info.font_weight = FPDFText_GetFontWeight(text_page, char_index); // As defined in PDF 1.7 table 5.20. constexpr int kFlagItalic = (1 << 6); // Bold text is considered bold when greater than or equal to 700. constexpr int kStandardBoldValue = 700; - style_info->is_italic = (flags & kFlagItalic); - style_info->is_bold = style_info->font_weight >= kStandardBoldValue; + style_info.is_italic = (flags & kFlagItalic); + style_info.is_bold = style_info.font_weight >= kStandardBoldValue; unsigned int fill_r; unsigned int fill_g; unsigned int fill_b; unsigned int fill_a; if (FPDFText_GetFillColor(text_page, char_index, &fill_r, &fill_g, &fill_b, &fill_a)) { - style_info->fill_color = MakeARGB(fill_a, fill_r, fill_g, fill_b); + style_info.fill_color = MakeARGB(fill_a, fill_r, fill_g, fill_b); } else { - style_info->fill_color = MakeARGB(0xff, 0, 0, 0); + style_info.fill_color = MakeARGB(0xff, 0, 0, 0); } unsigned int stroke_r; @@ -390,22 +391,24 @@ unsigned int stroke_a; if (FPDFText_GetStrokeColor(text_page, char_index, &stroke_r, &stroke_g, &stroke_b, &stroke_a)) { - style_info->stroke_color = MakeARGB(stroke_a, stroke_r, stroke_g, stroke_b); + style_info.stroke_color = MakeARGB(stroke_a, stroke_r, stroke_g, stroke_b); } else { - style_info->stroke_color = MakeARGB(0xff, 0, 0, 0); + style_info.stroke_color = MakeARGB(0xff, 0, 0, 0); } int render_mode = FPDFText_GetTextRenderMode(text_page, char_index); - DCHECK_GE(render_mode, PP_TEXTRENDERINGMODE_FIRST); - DCHECK_LE(render_mode, PP_TEXTRENDERINGMODE_LAST); - style_info->render_mode = static_cast<PP_TextRenderingMode>(render_mode); + DCHECK_GE(render_mode, + static_cast<int>(AccessibilityTextRenderMode::kUnknown)); + DCHECK_LE(render_mode, + static_cast<int>(AccessibilityTextRenderMode::kMaxValue)); + style_info.render_mode = + static_cast<AccessibilityTextRenderMode>(render_mode); } -bool PDFiumPage::AreTextStyleEqual( - int char_index, - const pp::PDF::PrivateAccessibilityTextStyleInfo& style) { - pp::PDF::PrivateAccessibilityTextStyleInfo char_style; - CalculateTextRunStyleInfo(char_index, &char_style); +bool PDFiumPage::AreTextStyleEqual(int char_index, + const AccessibilityTextStyleInfo& style) { + AccessibilityTextStyleInfo char_style; + CalculateTextRunStyleInfo(char_index, char_style); return char_style.font_name == style.font_name && char_style.font_weight == style.font_weight && char_style.render_mode == style.render_mode && @@ -434,8 +437,8 @@ overlap_count, 1, 100, 50); } -base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> -PDFiumPage::GetTextRunInfo(int start_char_index) { +base::Optional<AccessibilityTextRunInfo> PDFiumPage::GetTextRunInfo( + int start_char_index) { FPDF_PAGE page = GetPage(); FPDF_TEXTPAGE text_page = GetTextPage(); int chars_count = FPDFText_CountChars(text_page); @@ -451,11 +454,8 @@ // If so, |info.len| needs to take the number of characters // iterated into account. DCHECK_GT(actual_start_char_index, start_char_index); - pp::PDF::PrivateAccessibilityTextRunInfo info; + AccessibilityTextRunInfo info; info.len = chars_count - start_char_index; - info.bounds = pp::FloatRect(); - info.direction = PP_PRIVATEDIRECTION_NONE; - info.style.render_mode = PP_TEXTRENDERINGMODE_UNKNOWN; return info; } @@ -473,8 +473,8 @@ int char_index = actual_start_char_index; // Set text run's style info from the first character of the text run. - pp::PDF::PrivateAccessibilityTextRunInfo info; - CalculateTextRunStyleInfo(char_index, &info.style); + AccessibilityTextRunInfo info; + CalculateTextRunStyleInfo(char_index, info.style); gfx::RectF start_char_rect = GetFloatCharRectInPixels(page, text_page, char_index); @@ -493,7 +493,7 @@ // Add first non-space char to text run. text_run_bounds.Union(start_char_rect); - PP_PrivateDirection char_direction = + AccessibilityTextDirection char_direction = GetDirectionFromAngle(FPDFText_GetCharAngle(text_page, char_index)); if (char_index < chars_count) char_index++; @@ -589,14 +589,14 @@ info.len = char_index - start_char_index; info.style.font_size = text_run_font_size; - info.bounds = PPFloatRectFromRectF(text_run_bounds); + info.bounds = text_run_bounds; // Infer text direction from first and last character of the text run. We // can't base our decision on the character direction, since a character of a // RTL language will have an angle of 0 when not rotated, just like a // character in a LTR language. info.direction = char_index - actual_start_char_index > 1 ? GetDirectionFromAngle(text_run_angle) - : PP_PRIVATEDIRECTION_NONE; + : AccessibilityTextDirection::kNone; return info; }
diff --git a/pdf/pdfium/pdfium_page.h b/pdf/pdfium/pdfium_page.h index 2564f8d2..bf243937 100644 --- a/pdf/pdfium/pdfium_page.h +++ b/pdf/pdfium/pdfium_page.h
@@ -34,6 +34,8 @@ class PDFiumEngine; class Thumbnail; +struct AccessibilityTextRunInfo; +struct AccessibilityTextStyleInfo; // Wrapper around a page from the document. class PDFiumPage { @@ -55,8 +57,7 @@ // Log overlaps between annotations in the page. void LogOverlappingAnnotations(); // See definition of PDFEngine::GetTextRunInfo(). - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> GetTextRunInfo( - int start_char_index); + base::Optional<AccessibilityTextRunInfo> GetTextRunInfo(int start_char_index); // Get a unicode character from the page. uint32_t GetCharUnicode(int char_index); // Get the bounds of a character in page pixels. @@ -348,14 +349,12 @@ // broken for page objects such as links and images. void CalculatePageObjectTextRunBreaks(); // Set text run style information based on a character of the text run. - void CalculateTextRunStyleInfo( - int char_index, - pp::PDF::PrivateAccessibilityTextStyleInfo* style_info); + void CalculateTextRunStyleInfo(int char_index, + AccessibilityTextStyleInfo& style_info); // Returns a boolean indicating if the character at index |char_index| has the // same text style as the text run. - bool AreTextStyleEqual( - int char_index, - const pp::PDF::PrivateAccessibilityTextStyleInfo& style); + bool AreTextStyleEqual(int char_index, + const AccessibilityTextStyleInfo& style); // Key : Marked content id for the image element as specified in the // struct tree.
diff --git a/pdf/pdfium/pdfium_page_unittest.cc b/pdf/pdfium/pdfium_page_unittest.cc index 035cbd6..2ecb255 100644 --- a/pdf/pdfium/pdfium_page_unittest.cc +++ b/pdf/pdfium/pdfium_page_unittest.cc
@@ -16,6 +16,7 @@ #include "base/test/gtest_util.h" #include "cc/test/pixel_comparator.h" #include "cc/test/pixel_test_utils.h" +#include "pdf/accessibility_structs.h" #include "pdf/pdfium/pdfium_engine.h" #include "pdf/pdfium/pdfium_test_base.h" #include "pdf/ppapi_migration/geometry_conversions.h" @@ -28,6 +29,7 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/range/range.h" +#include "ui/gfx/test/gfx_util.h" namespace chrome_pdf { @@ -49,33 +51,14 @@ #endif } -// Clone of pp::PDF::PrivateAccessibilityTextRunInfo. -struct ExpectedAccessibilityTextRunInfo { - uint32_t len; - gfx::RectF bounds; - PP_PrivateDirection direction; - pp::PDF::PrivateAccessibilityTextStyleInfo style; -}; - -void CompareTextRuns( - const ExpectedAccessibilityTextRunInfo& expected_text_run, - const pp::PDF::PrivateAccessibilityTextRunInfo& actual_text_run) { +void CompareTextRuns(const AccessibilityTextRunInfo& expected_text_run, + const AccessibilityTextRunInfo& actual_text_run) { EXPECT_EQ(expected_text_run.len, actual_text_run.len); - - // Use EXPECT_FLOAT_EQ() here instead of direct gfx::RectF comparisons to - // avoid having to deal with float rounding errors. - gfx::RectF actual_bounds = RectFFromPPFloatRect(actual_text_run.bounds); - EXPECT_FLOAT_EQ(expected_text_run.bounds.x(), actual_bounds.x()); - EXPECT_FLOAT_EQ(expected_text_run.bounds.y(), actual_bounds.y()); - EXPECT_FLOAT_EQ(expected_text_run.bounds.width(), actual_bounds.width()); - EXPECT_FLOAT_EQ(expected_text_run.bounds.height(), actual_bounds.height()); - + EXPECT_RECTF_EQ(expected_text_run.bounds, actual_text_run.bounds); EXPECT_EQ(expected_text_run.direction, actual_text_run.direction); - const pp::PDF::PrivateAccessibilityTextStyleInfo& expected_style = - expected_text_run.style; - const pp::PDF::PrivateAccessibilityTextStyleInfo& actual_style = - actual_text_run.style; + const AccessibilityTextStyleInfo& expected_style = expected_text_run.style; + const AccessibilityTextStyleInfo& actual_style = actual_text_run.style; EXPECT_EQ(expected_style.font_name, actual_style.font_name); EXPECT_EQ(expected_style.font_weight, actual_style.font_weight); @@ -285,7 +268,7 @@ constexpr int kFirstRunStartIndex = 0; constexpr int kFirstRunEndIndex = 20; constexpr int kPageIndex = 0; - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> text_run_info_1 = + base::Optional<AccessibilityTextRunInfo> text_run_info_1 = engine->GetTextRunInfo(kPageIndex, kFirstRunStartIndex); ASSERT_TRUE(text_run_info_1.has_value()); @@ -294,7 +277,7 @@ EXPECT_TRUE(base::IsUnicodeWhitespace( engine->GetCharUnicode(kPageIndex, kFirstRunStartIndex))); - gfx::RectF text_run_bounds = RectFFromPPFloatRect(actual_text_run_1.bounds); + gfx::RectF text_run_bounds = actual_text_run_1.bounds; EXPECT_TRUE(text_run_bounds.Contains( engine->GetCharBounds(kPageIndex, kFirstRunStartIndex))); @@ -321,7 +304,7 @@ // Test the properties of second text run. // Note: The leading spaces in second text run are accounted for in the end // of first text run. Hence we won't see a space leading the second text run. - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> text_run_info_2 = + base::Optional<AccessibilityTextRunInfo> text_run_info_2 = engine->GetTextRunInfo(kPageIndex, kSecondRunStartIndex); ASSERT_TRUE(text_run_info_2.has_value()); @@ -330,7 +313,7 @@ EXPECT_FALSE(base::IsUnicodeWhitespace( engine->GetCharUnicode(kPageIndex, kSecondRunStartIndex))); - text_run_bounds = RectFFromPPFloatRect(actual_text_run_2.bounds); + text_run_bounds = actual_text_run_2.bounds; EXPECT_TRUE(text_run_bounds.Contains( engine->GetCharBounds(kPageIndex, kSecondRunStartIndex))); @@ -358,38 +341,39 @@ int current_char_index = 0; - pp::PDF::PrivateAccessibilityTextStyleInfo expected_style_1 = { + AccessibilityTextStyleInfo expected_style_1 = { "Times-Roman", 0, - PP_TEXTRENDERINGMODE_FILL, + AccessibilityTextRenderMode::kFill, 12, 0xff000000, 0xff000000, false, false}; - pp::PDF::PrivateAccessibilityTextStyleInfo expected_style_2 = { - "Helvetica", 0, PP_TEXTRENDERINGMODE_FILL, 16, 0xff000000, 0xff000000, + AccessibilityTextStyleInfo expected_style_2 = { + "Helvetica", 0, AccessibilityTextRenderMode::kFill, + 16, 0xff000000, 0xff000000, false, false}; // The links span from [7, 22], [52, 66] and [92, 108] with 16, 15 and 17 // text run lengths respectively. There are text runs preceding and // succeeding them. - ExpectedAccessibilityTextRunInfo expected_text_runs[] = { + AccessibilityTextRunInfo expected_text_runs[] = { {7, gfx::RectF(26.666666f, 189.333333f, 38.666672f, 13.333344f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_1}, + AccessibilityTextDirection::kLeftToRight, expected_style_1}, {16, gfx::RectF(70.666664f, 189.333333f, 108.0f, 14.666672f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_1}, + AccessibilityTextDirection::kLeftToRight, expected_style_1}, {20, gfx::RectF(181.333333f, 189.333333f, 117.333333f, 14.666672f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_1}, + AccessibilityTextDirection::kLeftToRight, expected_style_1}, {9, gfx::RectF(28.0f, 117.33334f, 89.333328f, 20.0f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_2}, + AccessibilityTextDirection::kLeftToRight, expected_style_2}, {15, gfx::RectF(126.66666f, 117.33334f, 137.33334f, 20.0f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_2}, + AccessibilityTextDirection::kLeftToRight, expected_style_2}, {20, gfx::RectF(266.66666f, 118.66666f, 169.33334f, 18.666664f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_2}, + AccessibilityTextDirection::kLeftToRight, expected_style_2}, {5, gfx::RectF(28.0f, 65.333336f, 40.0f, 18.666664f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_2}, + AccessibilityTextDirection::kLeftToRight, expected_style_2}, {17, gfx::RectF(77.333336f, 64.0f, 160.0f, 20.0f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, expected_style_2}}; + AccessibilityTextDirection::kLeftToRight, expected_style_2}}; if (UsingTestFonts()) { expected_text_runs[4].bounds = @@ -401,8 +385,8 @@ } // Test negative char index returns nullopt - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> - text_run_info_result = engine->GetTextRunInfo(0, -1); + base::Optional<AccessibilityTextRunInfo> text_run_info_result = + engine->GetTextRunInfo(0, -1); ASSERT_FALSE(text_run_info_result.has_value()); // Test valid char index returns expected text run info and expected text @@ -430,20 +414,21 @@ ASSERT_EQ(1, engine->GetNumberOfPages()); // Highlights span across text run indices 0, 2 and 3. - static const pp::PDF::PrivateAccessibilityTextStyleInfo kExpectedStyle = { - "Helvetica", 0, PP_TEXTRENDERINGMODE_FILL, 16, 0xff000000, 0xff000000, + static const AccessibilityTextStyleInfo kExpectedStyle = { + "Helvetica", 0, AccessibilityTextRenderMode::kFill, + 16, 0xff000000, 0xff000000, false, false}; - ExpectedAccessibilityTextRunInfo expected_text_runs[] = { + AccessibilityTextRunInfo expected_text_runs[] = { {5, gfx::RectF(1.3333334f, 198.66667f, 46.666668f, 14.666672f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, kExpectedStyle}, + AccessibilityTextDirection::kLeftToRight, kExpectedStyle}, {7, gfx::RectF(50.666668f, 198.66667f, 47.999996f, 17.333328f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, kExpectedStyle}, + AccessibilityTextDirection::kLeftToRight, kExpectedStyle}, {7, gfx::RectF(106.66666f, 198.66667f, 73.333336f, 18.666672f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, kExpectedStyle}, + AccessibilityTextDirection::kLeftToRight, kExpectedStyle}, {2, gfx::RectF(181.33333f, 202.66667f, 16.0f, 14.66667f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_NONE, kExpectedStyle}, + AccessibilityTextDirection::kNone, kExpectedStyle}, {2, gfx::RectF(198.66667f, 202.66667f, 21.333328f, 10.666672f), - PP_PrivateDirection::PP_PRIVATEDIRECTION_LTR, kExpectedStyle}}; + AccessibilityTextDirection::kLeftToRight, kExpectedStyle}}; if (UsingTestFonts()) { expected_text_runs[2].bounds = @@ -454,8 +439,8 @@ int current_char_index = 0; for (const auto& expected_text_run : expected_text_runs) { - base::Optional<pp::PDF::PrivateAccessibilityTextRunInfo> - text_run_info_result = engine->GetTextRunInfo(0, current_char_index); + base::Optional<AccessibilityTextRunInfo> text_run_info_result = + engine->GetTextRunInfo(0, current_char_index); ASSERT_TRUE(text_run_info_result.has_value()); const auto& actual_text_run = text_run_info_result.value(); CompareTextRuns(expected_text_run, actual_text_run);
diff --git a/remoting/resources/remoting_strings_af.xtb b/remoting/resources/remoting_strings_af.xtb index bcd9e3e..6bbe04ec 100644 --- a/remoting/resources/remoting_strings_af.xtb +++ b/remoting/resources/remoting_strings_af.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Vanlyn.</translation> <translation id="3695446226812920698">Vind uit hoe</translation> <translation id="3776024066357219166">Jou Chrome-afstandwerkskermsessie is verby.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Kieslys</translation> <translation id="3905196214175737742">Ongeldige gasheereienaardomein.</translation> <translation id="3931191050278863510">Gasheer gestop.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Laas aanlyn: <ph name="DATE" /></translation> <translation id="544077782045763683">Gasheer het afgeskakel.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Jou werkskerm word tans met <ph name="USER" /> gedeel.</translation> <translation id="5750083143895808682">Aangemeld as <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Herkoppel</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Steundiens</translation> <translation id="6612717000975622067">Stuur Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Deel</translation> -<translation id="6681800064886881394">Kopiereg 2013 Google Inc. Alle regte voorbehou.</translation> <translation id="677755392401385740">Gasheer begin vir gebruiker: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Wys/versteek sleutelbord.</translation> <translation id="6963936880795878952">Verbindings met die afgeleë rekenaar word tydelik geblokkeer omdat iemand met 'n ongeldige PIN daaraan probeer koppel het. Probeer asseblief later weer.</translation>
diff --git a/remoting/resources/remoting_strings_am.xtb b/remoting/resources/remoting_strings_am.xtb index 87abc755..31da413 100644 --- a/remoting/resources/remoting_strings_am.xtb +++ b/remoting/resources/remoting_strings_am.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ከመስመር ውጪ።</translation> <translation id="3695446226812920698">እንዴት እንደሆነ ይወቁ</translation> <translation id="3776024066357219166">የChrome የርቀት ዴስክቶፕ ክፍለ-ጊዜው ተጠናቅቋል።</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ምናሌ</translation> <translation id="3905196214175737742">ልክ ያልሆነ የአስተናጋጅ ባለቤት ጎራ።</translation> <translation id="3931191050278863510">አስተናጋጅ ቆሟል።</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">መጨረሻ መስመር ላይ የነበረው በ፦ <ph name="DATE" /></translation> <translation id="544077782045763683">አስተናጋጅ ተዘግቷል።</translation> <translation id="5601503069213153581">ፒን</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ዴስክቶፕዎ በአሁኑ ጊዜ ከ<ph name="USER" /> ጋር ተጋርቷል።</translation> <translation id="5750083143895808682">እንደ <ph name="EMAIL_ADDRESS" /> ሆነው ገብተዋል።</translation> <translation id="579702532610384533">ዳግም ያገናኙ</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ድጋፍ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del ላክ</translation> <translation id="6654753848497929428">አጋራ</translation> -<translation id="6681800064886881394">የቅጂ መብት 2013 Google Inc. ሁሉም መብቶች የተጠበቁ ናቸው።</translation> <translation id="677755392401385740">አስተናጋጅ ለተጠቃሚ ተጀምሯል፦ <ph name="HOST_USERNAME" />።</translation> <translation id="6939719207673461467">የቁልፍ ሰሌዳን አሳይ/ደብቅ።</translation> <translation id="6963936880795878952">የሆነ ሰው ልክ ባልሆነ ፒን ከርቀት ኮምፒውተሩ ጋር ለመገናኘት ስለሞከረ ከእሱ ጋር ያሉ ግንኙነቶች ለጊዜው ታግደዋል። እባክዎ ቆይተው እንደገና ይሞክሩ።</translation>
diff --git a/remoting/resources/remoting_strings_ar.xtb b/remoting/resources/remoting_strings_ar.xtb index da5ca90..a588983 100644 --- a/remoting/resources/remoting_strings_ar.xtb +++ b/remoting/resources/remoting_strings_ar.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">بلا اتصال.</translation> <translation id="3695446226812920698">تعرَّف على كيفية إجراء ذلك</translation> <translation id="3776024066357219166">انتهت جلسة سطح المكتب البعيد من Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">قائمة</translation> <translation id="3905196214175737742">نطاق مالك المضيف غير صالح.</translation> <translation id="3931191050278863510">المضيف توقف.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">آخر اتصال بالإنترنت: <ph name="DATE" /></translation> <translation id="544077782045763683">تم إيقاف المضيف.</translation> <translation id="5601503069213153581">رقم التعريف الشخصي</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">تتم مشاركة سطح المكتب حاليًا مع <ph name="USER" />.</translation> <translation id="5750083143895808682">تم تسجيل الدخول باسم <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">إعادة الاتصال</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">الدعم</translation> <translation id="6612717000975622067">إرسال Ctrl-Alt-Del</translation> <translation id="6654753848497929428">مشاركة</translation> -<translation id="6681800064886881394">حقوق الطبع والنشر لعام 2013 لشركة Google Inc. جميع الحقوق محفوظة.</translation> <translation id="677755392401385740">بدأ المضيف للمستخدم: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">عرض/إخفاء لوحة المفاتيح</translation> <translation id="6963936880795878952">تم حظر الاتصالات بجهاز الكمبيوتر البعيد مؤقتًا نظرًا لأن شخصًا ما كان يحاول الاتصال به باستخدام رقم تعريف شخصي غير صالح. يُرجى إعادة المحاولة لاحقًا.</translation>
diff --git a/remoting/resources/remoting_strings_as.xtb b/remoting/resources/remoting_strings_as.xtb index 4e22ae74..f53103c6 100644 --- a/remoting/resources/remoting_strings_as.xtb +++ b/remoting/resources/remoting_strings_as.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">অফলাইন।</translation> <translation id="3695446226812920698">কেনেকৈ কৰিব সেয়া জানক</translation> <translation id="3776024066357219166">আপোনাৰ Chrome ৰিম’ট ডেস্কটপ ছেশ্বন অন্ত পৰিছে।</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">মেনু</translation> <translation id="3905196214175737742">অমান্য হ’ষ্টৰ গৰাকীৰ ড’মেইন।</translation> <translation id="3931191050278863510">হ’ষ্ট বন্ধ হ’ল৷</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">অন্তিমবাৰ অনলাইন দেখা গৈছিল: <ph name="DATE" /></translation> <translation id="544077782045763683">হ'ষ্টে শ্বাট ডাউন কৰিছে।</translation> <translation id="5601503069213153581">পিন</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">আপোনাৰ ডেস্কট’প বৰ্তমান <ph name="USER" />ৰ সৈতে শ্বেয়াৰ কৰা হৈছে৷</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> ৰূপে ছাইন ইন কৰা হৈছে।</translation> <translation id="579702532610384533">পুনৰ সংযোগ কৰক</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">সহায়</translation> <translation id="6612717000975622067">Ctrl-Alt-Del দবাই পঠিয়াওক</translation> <translation id="6654753848497929428">শ্বেয়াৰ কৰক</translation> -<translation id="6681800064886881394">স্বত্ত্বাধিকাৰ ২০১৩ Google Inc. সকলো চৰ্ত সংৰক্ষিত।</translation> <translation id="677755392401385740">এই ব্যৱহাৰকাৰীজনৰ বাবে হ’ষ্ট আৰম্ভ কৰা হৈছে: <ph name="HOST_USERNAME" />৷</translation> <translation id="6939719207673461467">কীব'র্ড দেখুৱাওক/লুকুৱাওক।</translation> <translation id="6963936880795878952">ৰিম’ট কম্পিউটাৰৰ সৈতে সংযোগ সাময়িকভাৱে অৱৰোধ কৰা হৈছে কাৰণ কোনোবাই এটা অমান্য পিন ব্যৱহাৰ কৰি ইয়াৰ সৈতে সংযোগ কৰাৰ চেষ্টা কৰি আছিল। অনুগ্ৰহ কৰি কিছু সময়ৰ পাছত আকৌ চেষ্টা কৰক।</translation>
diff --git a/remoting/resources/remoting_strings_az.xtb b/remoting/resources/remoting_strings_az.xtb index 25949d1..2581446 100644 --- a/remoting/resources/remoting_strings_az.xtb +++ b/remoting/resources/remoting_strings_az.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Oflayn.</translation> <translation id="3695446226812920698">Yolunu öyrənin.</translation> <translation id="3776024066357219166">Chrome Kənardan İdarəetmə sessiyanız qurtardı.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menyu</translation> <translation id="3905196214175737742">Yanlış host sahibi domeni.</translation> <translation id="3931191050278863510">Host dayandı.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Son onlayn vaxtı: <ph name="DATE" /></translation> <translation id="544077782045763683">Host qapadıldı.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google MMC</translation> <translation id="5708869785009007625">Desktopunuz hazırda <ph name="USER" /> ilə paylaşılıb.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> olaraq daxil olunub.</translation> <translation id="579702532610384533">Təkrar qoşulun</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Dəstək</translation> <translation id="6612717000975622067">Ctrl-Alt-Del göndərin</translation> <translation id="6654753848497929428">Paylaşın</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Bütün hüquqlar qorunur.</translation> <translation id="677755392401385740">Host istifadəçi üçün başladı: <ph name="HOST_USERNAME" /> .</translation> <translation id="6939719207673461467">Klaviaturanı göstərin/gizlədin.</translation> <translation id="6963936880795878952">Kimsə yanlış PIN kod ilə qoşulmağa cəhd etdiyi üçün uzaqdan idarə edilən kompüterə qoşulma müvəqqəti olaraq blok edilib. Yenidən cəhd edin.</translation>
diff --git a/remoting/resources/remoting_strings_be.xtb b/remoting/resources/remoting_strings_be.xtb index 02a50b4..1069f3f 100644 --- a/remoting/resources/remoting_strings_be.xtb +++ b/remoting/resources/remoting_strings_be.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Па-за сеткай.</translation> <translation id="3695446226812920698">Даведацца больш</translation> <translation id="3776024066357219166">Сеанс Аддаленага працоўнага стала Chrome завершаны.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Меню</translation> <translation id="3905196214175737742">Уладальнік хоста выкарыстоўвае недапушчальны дамен.</translation> <translation id="3931191050278863510">Хост спынены.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Апошні раз у інтэрнэце: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост адключыўся.</translation> <translation id="5601503069213153581">PIN-код</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Ваш працоўны стол зараз абагульваецца з карыстальнікам <ph name="USER" />.</translation> <translation id="5750083143895808682">Вы ўвайшлі як <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Падключыцца зноў</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Падтрымка</translation> <translation id="6612717000975622067">Адправіць Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Абагуліць</translation> -<translation id="6681800064886881394">© Google Inc., 2013. Усе правы абароненыя.</translation> <translation id="677755392401385740">Хост запушчаны для карыстальніка: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Паказаць або схаваць клавіятуру.</translation> <translation id="6963936880795878952">Падключэнні да аддаленага камп'ютара часова заблакіраваны, бо нехта спрабаваў падключыцца да яго з выкарыстаннем няправільнага PIN-кода. Паўтарыце спробу пазней.</translation>
diff --git a/remoting/resources/remoting_strings_bg.xtb b/remoting/resources/remoting_strings_bg.xtb index 94ee0d4..d6c0df52 100644 --- a/remoting/resources/remoting_strings_bg.xtb +++ b/remoting/resources/remoting_strings_bg.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлайн.</translation> <translation id="3695446226812920698">Научете как</translation> <translation id="3776024066357219166">Сесията ви в отдалечения работен плот на Chrome приключи.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Меню</translation> <translation id="3905196214175737742">Невалиден домейн на собственика на хоста.</translation> <translation id="3931191050278863510">Хостът е спрян.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Последно онлайн: <ph name="DATE" /></translation> <translation id="544077782045763683">Хостът се изключи.</translation> <translation id="5601503069213153581">ПИН код</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Понастоящем <ph name="USER" /> споделя работния ви плот.</translation> <translation id="5750083143895808682">Влязохте като <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Повторно свързване</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Поддръжка</translation> <translation id="6612717000975622067">Изпращане на Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Споделяне</translation> -<translation id="6681800064886881394">Авторски права 2013 Google Inc. Всички права запазени.</translation> <translation id="677755392401385740">За потребителя е стартиран хост: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Показване/скриване на клавиатурата.</translation> <translation id="6963936880795878952">Връзките с отдалечения компютър са временно блокирани, защото някой опита да се свърже с него посредством невалиден ПИН код. Моля, пробвайте отново по-късно.</translation>
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb index bd25e091..06a8ad0 100644 --- a/remoting/resources/remoting_strings_bn.xtb +++ b/remoting/resources/remoting_strings_bn.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">অফলাইন।</translation> <translation id="3695446226812920698">কীভাবে করবেন তা জানুন</translation> <translation id="3776024066357219166">আপনার Chrome রিমোট ডেস্কটপ সেশন শেষ হয়েছে৷</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">মেনু</translation> <translation id="3905196214175737742">ভুল হোস্ট মালিক ডোমেন।</translation> <translation id="3931191050278863510">হোস্ট থেমে গেছে।</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">শেষ অনলাইনে ছিলেন: <ph name="DATE" /> তারিখে</translation> <translation id="544077782045763683">হোস্ট বন্ধ হয়ে গেছে৷</translation> <translation id="5601503069213153581">পিন</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">আপনার ডেস্কটপটি বর্তমানে <ph name="USER" /> এর সাথে শেয়ার করা হয়েছে৷</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> হিসেবে সাইন-ইন করেছেন।</translation> <translation id="579702532610384533">পুনরায সংযোগ করুন</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">সহায়তা</translation> <translation id="6612717000975622067">Ctrl-Alt-Del পাঠান</translation> <translation id="6654753848497929428">শেয়ার করুন</translation> -<translation id="6681800064886881394">কপিরাইট 2013 Google Inc. সর্বস্বত্ব সংরক্ষিত৷</translation> <translation id="677755392401385740">এই ব্যবহারকারীর জন্য হোস্ট শুরু হয়েছে: <ph name="HOST_USERNAME" />৷</translation> <translation id="6939719207673461467">কীবোর্ড দেখান/লুকান৷</translation> <translation id="6963936880795878952">রিমোট কম্পিউটারের কানেকশন সাময়িকভাবে বন্দ করা হয়েছে কারণ কেউ ভুল PIN এর মাধ্যমে এতে কানেক্ট করার চেষ্টা করছিল৷ অনুগ্রহ করে পরে আবার চেষ্টা করুন৷</translation>
diff --git a/remoting/resources/remoting_strings_bs.xtb b/remoting/resources/remoting_strings_bs.xtb index 0191f23..ef1c580 100644 --- a/remoting/resources/remoting_strings_bs.xtb +++ b/remoting/resources/remoting_strings_bs.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Van mreže.</translation> <translation id="3695446226812920698">Saznajte kako</translation> <translation id="3776024066357219166">Završila je vaša sesija u aplikaciji Udaljena radna površina Chrome.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Meni</translation> <translation id="3905196214175737742">Nevažeća domena vlasnika host računara.</translation> <translation id="3931191050278863510">Host računar je zaustavljen.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Posljednji put na mreži: <ph name="DATE" /></translation> <translation id="544077782045763683">Host je isključen.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Trenutno dijelite svoju radnu površinu s korisnikom <ph name="USER" />.</translation> <translation id="5750083143895808682">Prijavljeni ste s računom <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Poveži ponovo</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Podrška</translation> <translation id="6612717000975622067">Pošalji Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Dijeli</translation> -<translation id="6681800064886881394">Autorska prava 2013 Google LLC Sva prava su zadržana.</translation> <translation id="677755392401385740">Host je pokrenut za korisnika: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Prikaži/sakrij tastaturu.</translation> <translation id="6963936880795878952">Povezivanje s udaljenim računarom je trenutno blokirano jer se neko pokušao povezati na njega koristeći nevažeći PIN. Pokušajte ponovo kasnije.</translation>
diff --git a/remoting/resources/remoting_strings_ca.xtb b/remoting/resources/remoting_strings_ca.xtb index 75fa2ed5..6b25ad2 100644 --- a/remoting/resources/remoting_strings_ca.xtb +++ b/remoting/resources/remoting_strings_ca.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Sense connexió</translation> <translation id="3695446226812920698">Informació</translation> <translation id="3776024066357219166">La sessió de l'escriptori remot de Chrome ha finalitzat.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menú</translation> <translation id="3905196214175737742">El domini del propietari de l'amfitrió no és vàlid.</translation> <translation id="3931191050278863510">S'ha aturat l'amfitrió.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Última connexió: <ph name="DATE" /></translation> <translation id="544077782045763683">L'amfitrió s'ha tancat.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Esteu compartint l'escriptori amb <ph name="USER" />.</translation> <translation id="5750083143895808682">Has iniciat la sessió com a <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Torna a connectar</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Assistència</translation> <translation id="6612717000975622067">Envia Ctrl-Alt-Supr</translation> <translation id="6654753848497929428">Comparteix</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Tots els drets reservats.</translation> <translation id="677755392401385740">L'amfitrió ha començat per a l'usuari: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostra o amaga el teclat</translation> <translation id="6963936880795878952">Les connexions amb l'ordinador remot s'han bloquejat temporalment perquè algú ha provat de connectar-s'hi amb un PIN no vàlid. Torna-ho a provar més tard.</translation>
diff --git a/remoting/resources/remoting_strings_cs.xtb b/remoting/resources/remoting_strings_cs.xtb index 0d209d3..1226a49 100644 --- a/remoting/resources/remoting_strings_cs.xtb +++ b/remoting/resources/remoting_strings_cs.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Postup</translation> <translation id="3776024066357219166">Relace Vzdálené plochy Chrome byla ukončena.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Nabídka</translation> <translation id="3905196214175737742">Neplatná doména vlastníka hostitele.</translation> <translation id="3931191050278863510">Hostitel byl zastaven.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Naposledy online: <ph name="DATE" /></translation> <translation id="544077782045763683">Hostitel byl vypnut.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Aktuálně sdílíte plochu s uživatelem <ph name="USER" />.</translation> <translation id="5750083143895808682">Jste přihlášeni pomocí účtu <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Znovu připojit</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Podpora</translation> <translation id="6612717000975622067">Odeslat akci Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Sdílet</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Všechna práva vyhrazena.</translation> <translation id="677755392401385740">Pro následujícího uživatele bylo zahájeno hostování: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Zobrazit či skrýt klávesnici</translation> <translation id="6963936880795878952">Připojení ke vzdálenému počítači jsou dočasně zablokována, protože došlo k několika pokusům o připojení s nesprávným kódem PIN. Zkuste to znovu později.</translation>
diff --git a/remoting/resources/remoting_strings_da.xtb b/remoting/resources/remoting_strings_da.xtb index accd116..2b6df2d 100644 --- a/remoting/resources/remoting_strings_da.xtb +++ b/remoting/resources/remoting_strings_da.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Få flere oplysninger om, hvordan du gør</translation> <translation id="3776024066357219166">Din session med Chrome Fjernskrivebord er afsluttet.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Ejerdomænet for hosten er ugyldigt.</translation> <translation id="3931191050278863510">Hosten er stoppet.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Sidst online: <ph name="DATE" /></translation> <translation id="544077782045763683">Hosten har lukket ned.</translation> <translation id="5601503069213153581">Pinkode</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Dit skrivebord deles i øjeblikket med <ph name="USER" />.</translation> <translation id="5750083143895808682">Du er logget ind som <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Genopret forbindelse</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Support</translation> <translation id="6612717000975622067">Send Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Del</translation> -<translation id="6681800064886881394">Copyright © 2013 Google Inc. Alle rettigheder forbeholdes.</translation> <translation id="677755392401385740">Host er startet for bruger: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Vis/skjul tastatur.</translation> <translation id="6963936880795878952">Forbindelserne til fjerncomputeren er midlertidigt blokerede, fordi nogen forsøgte at få forbindelse til den med en ugyldig pinkode. Prøv igen senere.</translation>
diff --git a/remoting/resources/remoting_strings_de.xtb b/remoting/resources/remoting_strings_de.xtb index 5ce8e59..4924c1a 100644 --- a/remoting/resources/remoting_strings_de.xtb +++ b/remoting/resources/remoting_strings_de.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline</translation> <translation id="3695446226812920698">Weitere Informationen</translation> <translation id="3776024066357219166">Ihre Chrome Remote Desktop-Sitzung wurde beendet.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menü</translation> <translation id="3905196214175737742">Ungültige Hostinhaberdomain</translation> <translation id="3931191050278863510">Host angehalten</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Zuletzt online: <ph name="DATE" /></translation> <translation id="544077782045763683">Der Host wurde heruntergefahren.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Ihr Desktop ist zurzeit für <ph name="USER" /> freigegeben.</translation> <translation id="5750083143895808682">Angemeldet als <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Erneut verbinden</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Hilfe</translation> <translation id="6612717000975622067">Strg-Alt-Entf senden</translation> <translation id="6654753848497929428">Freigeben</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Alle Rechte vorbehalten</translation> <translation id="677755392401385740">Host für folgenden Nutzer gestartet: <ph name="HOST_USERNAME" /></translation> <translation id="6939719207673461467">Tastatur ein-/ausblenden</translation> <translation id="6963936880795878952">Verbindungen zum Remote-Computer sind vorübergehend blockiert, da jemand versucht hat, eine Verbindung mit einer ungültigen PIN herzustellen. Bitte versuchen Sie es später noch einmal.</translation>
diff --git a/remoting/resources/remoting_strings_el.xtb b/remoting/resources/remoting_strings_el.xtb index 0463571..f4d73d4 100644 --- a/remoting/resources/remoting_strings_el.xtb +++ b/remoting/resources/remoting_strings_el.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Εκτός σύνδεσης</translation> <translation id="3695446226812920698">Μάθετε πώς</translation> <translation id="3776024066357219166">Η περίοδος σύνδεσης στην Απομακρυσμένη επιφάνεια εργασίας Chrome τερματίστηκε.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Μενού</translation> <translation id="3905196214175737742">Μη έγκυρος τομέας κατόχου κεντρικού υπολογιστή.</translation> <translation id="3931191050278863510">Ο κεντρικός υπολογιστής σταμάτησε.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Τελευταία σύνδεση στο διαδίκτυο: <ph name="DATE" /></translation> <translation id="544077782045763683">Ο κεντρικός υπολογιστής τερματίστηκε.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Αυτήν τη στιγμή πραγματοποιείται κοινή χρήση της επιφάνειας εργασίας σας με τον χρήστη <ph name="USER" />.</translation> <translation id="5750083143895808682">Έχετε συνδεθεί ως <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Επανασύνδεση</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Υποστήριξη</translation> <translation id="6612717000975622067">Αποστολή Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Κοινοποίηση</translation> -<translation id="6681800064886881394">Πνευματικά δικαιώματα 2013 Google Inc. Με την επιφύλαξη παντός δικαιώματος.</translation> <translation id="677755392401385740">Ο κεντρικός υπολογιστής ξεκίνησε για το χρήστη: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Εμφάνιση/απόκρυψη πληκτρολογίου.</translation> <translation id="6963936880795878952">Οι συνδέσεις στον απομακρυσμένο υπολογιστή έχουν αποκλειστεί προσωρινά, επειδή κάποιος επιχείρησε να συνδεθεί σε αυτόν με μη έγκυρο PIN. Δοκιμάστε ξανά αργότερα.</translation>
diff --git a/remoting/resources/remoting_strings_en-GB.xtb b/remoting/resources/remoting_strings_en-GB.xtb index 392b770..f31703c 100644 --- a/remoting/resources/remoting_strings_en-GB.xtb +++ b/remoting/resources/remoting_strings_en-GB.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Find out how</translation> <translation id="3776024066357219166">Your Chrome Remote Desktop session has ended.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Invalid host owner domain.</translation> <translation id="3931191050278863510">Host stopped.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Last online: <ph name="DATE" /></translation> <translation id="544077782045763683">Host has shut down.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Your desktop is currently shared with <ph name="USER" />.</translation> <translation id="5750083143895808682">Signed in as <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconnect</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Support</translation> <translation id="6612717000975622067">Send Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Share</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. All Rights Reserved.</translation> <translation id="677755392401385740">Host started for user: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Show/hide keyboard.</translation> <translation id="6963936880795878952">Connections to the remote computer are temporarily blocked because somebody was trying to connect to it with an invalid PIN. Please try again later.</translation>
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb index aea86e6..7f6ffc9 100644 --- a/remoting/resources/remoting_strings_es-419.xtb +++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Sin conexión</translation> <translation id="3695446226812920698">Más información</translation> <translation id="3776024066357219166">Se cerró tu sesión en Escritorio remoto de Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menú</translation> <translation id="3905196214175737742">Dominio del propietario del host no válido</translation> <translation id="3931191050278863510">Se detuvo el host.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Última conexión: <ph name="DATE" /></translation> <translation id="544077782045763683">El host se cerró.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">En este momento, estás compartiendo tu escritorio con <ph name="USER" />.</translation> <translation id="5750083143895808682">Accediste como <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Volver a conectar</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Asistencia</translation> <translation id="6612717000975622067">Enviar Ctrl-Alt-Supr</translation> <translation id="6654753848497929428">Compartir</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Todos los derechos reservados.</translation> <translation id="677755392401385740">Host iniciado para usuario: <ph name="HOST_USERNAME" /></translation> <translation id="6939719207673461467">Mostrar u ocultar teclado</translation> <translation id="6963936880795878952">Las conexiones con la computadora remota se bloquearon temporalmente porque alguien intentó conectarse a ella con un PIN no válido. Vuelve a intentarlo más tarde.</translation>
diff --git a/remoting/resources/remoting_strings_es.xtb b/remoting/resources/remoting_strings_es.xtb index 9a659a3..fef5d59 100644 --- a/remoting/resources/remoting_strings_es.xtb +++ b/remoting/resources/remoting_strings_es.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">No conectado</translation> <translation id="3695446226812920698">Descubre cómo hacerlo</translation> <translation id="3776024066357219166">Ha finalizado tu sesión en Escritorio Remoto de Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menú</translation> <translation id="3905196214175737742">Dominio del propietario del host no válido.</translation> <translation id="3931191050278863510">Host detenido.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Última conexión: <ph name="DATE" /></translation> <translation id="544077782045763683">El host se ha desconectado.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Tu ordenador está compartido actualmente con <ph name="USER" />.</translation> <translation id="5750083143895808682">Has iniciado sesión como <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconectar</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Ayuda</translation> <translation id="6612717000975622067">Enviar Ctrl-Alt-Supr</translation> <translation id="6654753848497929428">Compartir</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Todos los derechos reservados.</translation> <translation id="677755392401385740">Host iniciado para usuario: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostrar/ocultar teclado.</translation> <translation id="6963936880795878952">Las conexiones con el ordenador remoto se han bloqueado temporalmente porque alguien ha intentado conectarse a él con un PIN no válido. Vuelve a intentarlo más tarde.</translation>
diff --git a/remoting/resources/remoting_strings_et.xtb b/remoting/resources/remoting_strings_et.xtb index 491fefc59..6ebae36 100644 --- a/remoting/resources/remoting_strings_et.xtb +++ b/remoting/resources/remoting_strings_et.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Võrguühenduseta.</translation> <translation id="3695446226812920698">Lisateave</translation> <translation id="3776024066357219166">Teie Chrome Remote Desktopi seanss on lõppenud.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menüü</translation> <translation id="3905196214175737742">Sobimatu hosti omaniku domeen.</translation> <translation id="3931191050278863510">Hostimine peatati.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Viimati veebis: <ph name="DATE" /></translation> <translation id="544077782045763683">Host on välja lülitatud.</translation> <translation id="5601503069213153581">PIN-kood</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Teie töölauda jagatakse praegu kasutajaga <ph name="USER" />.</translation> <translation id="5750083143895808682">Sisse logitud kasutajana <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Ühenda uuesti</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Tugi</translation> <translation id="6612717000975622067">Saada klahvikombinatsioon Ctrl + Alt + Del</translation> <translation id="6654753848497929428">Jaga</translation> -<translation id="6681800064886881394">Autoriõigus 2013 Google Inc. Kõik õigused kaitstud.</translation> <translation id="677755392401385740">Kasutajale käivitati host: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Kuva/peida klaviatuur.</translation> <translation id="6963936880795878952">Ühendused kaugarvutiga on ajutiselt blokeeritud, sest keegi püüdis luua ühendust vale PIN-koodiga. Proovige hiljem uuesti.</translation>
diff --git a/remoting/resources/remoting_strings_eu.xtb b/remoting/resources/remoting_strings_eu.xtb index d362d44..034e5c45 100644 --- a/remoting/resources/remoting_strings_eu.xtb +++ b/remoting/resources/remoting_strings_eu.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Konexiorik gabe.</translation> <translation id="3695446226812920698">Lortu argibideak</translation> <translation id="3776024066357219166">Chrome-ren Urruneko pantaila eginbideko saioa amaitu duzu.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menua</translation> <translation id="3905196214175737742">Ez du balio ostalari-jabearen domeinuak.</translation> <translation id="3931191050278863510">Ostalaria gelditu egin da.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Azken konexioa: <ph name="DATE" /></translation> <translation id="544077782045763683">Ostalaria itzali da.</translation> <translation id="5601503069213153581">PIN kodea</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Mahaigaina <ph name="USER" /> erabiltzailearekin partekatzen ari zara.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> gisa hasi duzu saioa.</translation> <translation id="579702532610384533">Konektatu berriro</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Laguntza-zerbitzua</translation> <translation id="6612717000975622067">Bidali Ktrl-Alt-Ezab</translation> <translation id="6654753848497929428">Partekatu</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Eskubide guztiak erreserbatuta.</translation> <translation id="677755392401385740"><ph name="HOST_USERNAME" /> ostatatzen hasi da.</translation> <translation id="6939719207673461467">Erakutsi/Ezkutatu teklatua.</translation> <translation id="6963936880795878952">Urruneko ordenagailuarekiko konexioak aldi baterako blokeatu dira, norbait balio ez duen PIN bat erabilita konektatzen saiatu delako. Saiatu berriro geroago.</translation>
diff --git a/remoting/resources/remoting_strings_fa.xtb b/remoting/resources/remoting_strings_fa.xtb index f75917db..312c69b 100644 --- a/remoting/resources/remoting_strings_fa.xtb +++ b/remoting/resources/remoting_strings_fa.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">آفلاین.</translation> <translation id="3695446226812920698">با نحوه انجام کار آشنا شوید</translation> <translation id="3776024066357219166">جلسه "کنترل رایانه ازراهدور Chrome" تمام شد.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">منو</translation> <translation id="3905196214175737742">دامنه مالک میزبان نامعتبر است.</translation> <translation id="3931191050278863510">میزبان متوقف شد.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">آخرین حضور آنلاین: <ph name="DATE" /></translation> <translation id="544077782045763683">میزبان خاموش شد.</translation> <translation id="5601503069213153581">پین</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">دسکتاپ شما در حال حاضر با <ph name="USER" /> به اشتراک گذاشته شده است.</translation> <translation id="5750083143895808682">واردشده به سیستم بهعنوان <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">اتصال مجدد</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">پشتیبانی</translation> <translation id="6612717000975622067">ارسال Ctrl-Alt-Del</translation> <translation id="6654753848497929428">همرسانی</translation> -<translation id="6681800064886881394">حق نسخهبرداری ۲۰۱۳ Google Inc. کلیه حقوق محفوظ است.</translation> <translation id="677755392401385740">میزبان برای کاربر آغاز شد: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">نمایش/پنهان کردن صفحهکلید</translation> <translation id="6963936880795878952">اتصالات به رایانه راه دور بهصورت موقت مسدود میشود، چون شخصی سعی داشت با پین نامعتبر به آن متصل شود. لطفاً بعداً دوباره امتحان کنید.</translation>
diff --git a/remoting/resources/remoting_strings_fi.xtb b/remoting/resources/remoting_strings_fi.xtb index 38b3c08..1f3065f 100644 --- a/remoting/resources/remoting_strings_fi.xtb +++ b/remoting/resources/remoting_strings_fi.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Lisätietoja</translation> <translation id="3776024066357219166">Chrome-etäkäyttökerta on päättynyt.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Valikko</translation> <translation id="3905196214175737742">Isännän omistajan verkkotunnus on virheellinen.</translation> <translation id="3931191050278863510">Isäntä pysähtyi.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Yhdistetty verkkoon viimeksi: <ph name="DATE" /></translation> <translation id="544077782045763683">Isäntä on offline-tilassa.</translation> <translation id="5601503069213153581">PIN-koodi</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Tietokoneesi on jaettu käyttäjän <ph name="USER" /> kanssa.</translation> <translation id="5750083143895808682">Kirjautunut osoitteella <ph name="EMAIL_ADDRESS" /></translation> <translation id="579702532610384533">Yhdistä uudelleen</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Tuki</translation> <translation id="6612717000975622067">Lähetä Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Jaa</translation> -<translation id="6681800064886881394">Copyright 2013 Google LLC Kaikki oikeudet pidätetään.</translation> <translation id="677755392401385740">Käyttäjän <ph name="HOST_USERNAME" /> isäntä käynnistettiin.</translation> <translation id="6939719207673461467">Näytä/piilota näppäimistö</translation> <translation id="6963936880795878952">Yhteydet etätietokoneeseen on väliaikaisesti estetty, sillä siihen yritettiin muodostaa yhteys virheellisellä PIN-koodilla. Yritä myöhemmin uudelleen.</translation>
diff --git a/remoting/resources/remoting_strings_fil.xtb b/remoting/resources/remoting_strings_fil.xtb index 685cc2659..96c6fad 100644 --- a/remoting/resources/remoting_strings_fil.xtb +++ b/remoting/resources/remoting_strings_fil.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Naka-offline.</translation> <translation id="3695446226812920698">Alamin kung paano</translation> <translation id="3776024066357219166">Natapos na ang iyong session sa Remote na Desktop ng Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Di-wastong domain ng may-ari ng host.</translation> <translation id="3931191050278863510">Huminto ang host.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Huling nag-online: <ph name="DATE" /></translation> <translation id="544077782045763683">Nag-shut down ang host.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Kasalukuyang nakabahagi ang iyong desktop kay <ph name="USER" />.</translation> <translation id="5750083143895808682">Naka-sign in bilang <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Muling kumonekta</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Suporta</translation> <translation id="6612717000975622067">Magpadala ng Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Ibahagi</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Nakalaan ang Lahat ng Karapatan.</translation> <translation id="677755392401385740">Sinimulan ang host para sa user: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Ipakita/itago ang keyboard.</translation> <translation id="6963936880795878952">Pansamantalang naka-block ang mga koneksyon sa malayuang computer dahil may sumubok na kumonekta rito gamit ang di-wastong PIN. Pakisubukang muli sa ibang pagkakataon.</translation>
diff --git a/remoting/resources/remoting_strings_fr-CA.xtb b/remoting/resources/remoting_strings_fr-CA.xtb index d45544e..eadafbc 100644 --- a/remoting/resources/remoting_strings_fr-CA.xtb +++ b/remoting/resources/remoting_strings_fr-CA.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Hors ligne</translation> <translation id="3695446226812920698">Découvrez comment</translation> <translation id="3776024066357219166">Votre session de bureau à distance Google Chrome est terminée.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domaine du propriétaire de l'hôte non valide.</translation> <translation id="3931191050278863510">Hôte interrompu.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Dernière connexion : <ph name="DATE" /></translation> <translation id="544077782045763683">L'hôte s'est éteint.</translation> <translation id="5601503069213153581">NIP</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Vous partagez actuellement votre bureau avec <ph name="USER" />.</translation> <translation id="5750083143895808682">Connecté en tant que <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconnexion</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Assistance</translation> <translation id="6612717000975622067">Envoyer Ctrl-Alt-Suppr</translation> <translation id="6654753848497929428">Partager</translation> -<translation id="6681800064886881394">© 2013 Google Inc. Tous droits réservés.</translation> <translation id="677755392401385740">Hôte démarré pour l'utilisateur : <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Afficher et masquer le clavier.</translation> <translation id="6963936880795878952">Les connexions à l'ordinateur distant sont momentanément bloquées, car un utilisateur a tenté de s'y connecter en utilisant un NIP erroné. Veuillez réessayer plus tard.</translation>
diff --git a/remoting/resources/remoting_strings_fr.xtb b/remoting/resources/remoting_strings_fr.xtb index cd4f1bb7..f583c8cc0 100644 --- a/remoting/resources/remoting_strings_fr.xtb +++ b/remoting/resources/remoting_strings_fr.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Hors connexion</translation> <translation id="3695446226812920698">Comment procéder</translation> <translation id="3776024066357219166">La session du bureau à distance Google Chrome est terminée.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domaine propriétaire de l'hôte incorrect.</translation> <translation id="3931191050278863510">Hôte suspendu</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Dernière connexion : <ph name="DATE" /></translation> <translation id="544077782045763683">L'hôte a été arrêté.</translation> <translation id="5601503069213153581">Code d'accès</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Vous partagez actuellement votre bureau avec <ph name="USER" />.</translation> <translation id="5750083143895808682">Connecté en tant que <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconnexion</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Assistance</translation> <translation id="6612717000975622067">Envoyer Ctrl-Alt-Suppr</translation> <translation id="6654753848497929428">Partager</translation> -<translation id="6681800064886881394">Copyright © Google Inc. 2013. Tous droits réservés.</translation> <translation id="677755392401385740">Hôte démarré pour l'utilisateur "<ph name="HOST_USERNAME" />"</translation> <translation id="6939719207673461467">Afficher/Masquer le clavier</translation> <translation id="6963936880795878952">Les connexions à l'ordinateur à distance sont momentanément bloquées, car un utilisateur a tenté de s'y connecter en utilisant un code erroné. Veuillez réessayer ultérieurement.</translation>
diff --git a/remoting/resources/remoting_strings_gl.xtb b/remoting/resources/remoting_strings_gl.xtb index 5aebca6..3ec455b 100644 --- a/remoting/resources/remoting_strings_gl.xtb +++ b/remoting/resources/remoting_strings_gl.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Sen conexión.</translation> <translation id="3695446226812920698">Máis información</translation> <translation id="3776024066357219166">Finalizou a túa sesión de escritorio remoto de Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menú</translation> <translation id="3905196214175737742">O dominio do propietario do host non é válido.</translation> <translation id="3931191050278863510">Detívose o host.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Última conexión: <ph name="DATE" /></translation> <translation id="544077782045763683">Desactivouse o host.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">O teu escritorio compártese actualmente con <ph name="USER" />.</translation> <translation id="5750083143895808682">Iniciaches sesión como <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Volver conectar</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Asistencia</translation> <translation id="6612717000975622067">Enviar Ctrl-Alt-Supr</translation> <translation id="6654753848497929428">Compartir</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Reservados todos os dereitos.</translation> <translation id="677755392401385740">Host iniciado para o usuario: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostrar/ocultar teclado.</translation> <translation id="6963936880795878952">As conexións co ordenador remoto bloqueáronse temporalmente debido a que alguén estaba tentando conectarse a el cun PIN non válido. Téntao de novo máis tarde.</translation>
diff --git a/remoting/resources/remoting_strings_gu.xtb b/remoting/resources/remoting_strings_gu.xtb index 5ade633..f71278d1 100644 --- a/remoting/resources/remoting_strings_gu.xtb +++ b/remoting/resources/remoting_strings_gu.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ઑફલાઇન.</translation> <translation id="3695446226812920698">જાણો કેવી રીતે</translation> <translation id="3776024066357219166">તમારું Chrome રીમોટ ડેસ્કટૉપ સત્ર સમાપ્ત થયું.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">મેનૂ</translation> <translation id="3905196214175737742">અમાન્ય હોસ્ટ માલિક ડોમેન.</translation> <translation id="3931191050278863510">હોસ્ટ રોક્યું.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">છેલ્લે ઑનલાઇન: <ph name="DATE" /></translation> <translation id="544077782045763683">હોસ્ટ શટ ડાઉન થયું છે.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">તમારું ડેસ્કટૉપ હાલમાં <ph name="USER" /> સાથે શેર કરવામાં આવી રહ્યું છે.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> તરીકે સાઇન ઇન કર્યું.</translation> <translation id="579702532610384533">ફરીથી કનેક્ટ કરો</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">સહાય</translation> <translation id="6612717000975622067">Ctrl-Alt-Del મોકલો</translation> <translation id="6654753848497929428">શેર કરો</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. સર્વાધિકાર સુરક્ષિત.</translation> <translation id="677755392401385740">આ વપરાશકર્તા માટે હોસ્ટ શરૂ: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">કીબોર્ડ બતાવો/છુપાવો.</translation> <translation id="6963936880795878952">રીમોટ કમ્પ્યુટરથી કનેક્શન્સ અસ્થાયીરૂપે અવરોધિત કરવામાં આવ્યાં છે કારણ કે કોઈ વ્યક્તિએ અમાન્ય PIN વડે તેની સાથે કનેક્ટ કરવાનો પ્રયાસ કર્યો હતો. કૃપા કરીને પછીથી ફરી પ્રયાસ કરો.</translation>
diff --git a/remoting/resources/remoting_strings_hi.xtb b/remoting/resources/remoting_strings_hi.xtb index 002aefc..0ff6d3f 100644 --- a/remoting/resources/remoting_strings_hi.xtb +++ b/remoting/resources/remoting_strings_hi.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ऑफ़लाइन.</translation> <translation id="3695446226812920698">तरीका जानें</translation> <translation id="3776024066357219166">आपका Chrome दूरस्थ डेस्कटॉप सत्र खत्म हो चुका है.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">मेन्यू</translation> <translation id="3905196214175737742">अमान्य होस्ट मालिक डोमेन.</translation> <translation id="3931191050278863510">होस्ट बंद हो गया है.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">पिछली बार ऑनलाइन: <ph name="DATE" /></translation> <translation id="544077782045763683">होस्ट बंद हो गया है.</translation> <translation id="5601503069213153581">पिन</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">आपका डेस्कटॉप वर्तमान में <ph name="USER" /> के साथ शेयर किया गया है.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> के रूप में साइन इन किया है.</translation> <translation id="579702532610384533">फिर से कनेक्ट करें</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">सहायता</translation> <translation id="6612717000975622067">Ctrl-Alt-Del भेजें</translation> <translation id="6654753848497929428">शेयर करें</translation> -<translation id="6681800064886881394">कॉपीराइट 2013 Google Inc. सर्वाधिकार सुरक्षित.</translation> <translation id="677755392401385740">इस उपयोगकर्ता के लिए होस्ट शुरू किया गया: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">कीबोर्ड दिखाएं/छिपाएं.</translation> <translation id="6963936880795878952">दूर के कंप्यूटर के साथ कनेक्शन पर अस्थायी रूप से रोक लगाई गई है क्योंकि कोई गलत पिन के ज़रिए उससे कनेक्ट करने की कोशिश कर रहा था. कृपया बाद में फिर से कोशिश करें.</translation>
diff --git a/remoting/resources/remoting_strings_hr.xtb b/remoting/resources/remoting_strings_hr.xtb index 65df008..d319cf6 100644 --- a/remoting/resources/remoting_strings_hr.xtb +++ b/remoting/resources/remoting_strings_hr.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Saznajte kako</translation> <translation id="3776024066357219166">Završila je vaša sesija u aplikaciji Udaljena radna površina Chrome.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Izbornik</translation> <translation id="3905196214175737742">Nevažeća domena vlasnika hosta.</translation> <translation id="3931191050278863510">Host je zaustavljen.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Zadnji put online: <ph name="DATE" /></translation> <translation id="544077782045763683">Host je isključen.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Vaša se radna površina trenutačno dijeli s korisnikom <ph name="USER" />.</translation> <translation id="5750083143895808682">Prijavljeni ste kao <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Ponovno povezivanje</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Podrška</translation> <translation id="6612717000975622067">Pošalji Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Dijeli</translation> -<translation id="6681800064886881394">Autorska prava 2013. Google Inc. Sva prava pridržana.</translation> <translation id="677755392401385740">Host je pokrenut za korisnika: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Prikaži/sakrij tipkovnicu.</translation> <translation id="6963936880795878952">Veze s udaljenim računalom privremeno su blokirane jer se pokušao spojiti korisnik s nevažećim PIN-om. Pokušajte ponovo kasnije.</translation>
diff --git a/remoting/resources/remoting_strings_hu.xtb b/remoting/resources/remoting_strings_hu.xtb index 151b7d1..29361a6 100644 --- a/remoting/resources/remoting_strings_hu.xtb +++ b/remoting/resources/remoting_strings_hu.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Tudnivalók</translation> <translation id="3776024066357219166">A Chrome távoliasztal-szolgáltatás munkamenet véget ért.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menü</translation> <translation id="3905196214175737742">A gazdagép tulajdonosi domainje érvénytelen.</translation> <translation id="3931191050278863510">Gazdagép leállítva.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Utoljára online: <ph name="DATE" /></translation> <translation id="544077782045763683">A gazdagép leállt.</translation> <translation id="5601503069213153581">PIN-kód</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Az asztalt jelenleg ezzel a felhasználóval osztja meg: <ph name="USER" />.</translation> <translation id="5750083143895808682">Bejelentkezve mint <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Újrakapcsolódás</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Támogatás</translation> <translation id="6612717000975622067">Ctrl-Alt-Del küldése</translation> <translation id="6654753848497929428">Megosztás</translation> -<translation id="6681800064886881394">Copyright 2013 – Google Inc. Minden jog fenntartva.</translation> <translation id="677755392401385740">Gazdagép elindítva a következő felhasználó számára: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Billentyűzet megjelenítése/elrejtése.</translation> <translation id="6963936880795878952">A távoli számítógéphez való csatlakozás ideiglenesen le van tiltva, mert valaki érvénytelen PIN-kóddal próbált csatlakozni hozzá. Kérjük, próbálja újra később.</translation>
diff --git a/remoting/resources/remoting_strings_hy.xtb b/remoting/resources/remoting_strings_hy.xtb index 7fdbf12..4d0eb1f 100644 --- a/remoting/resources/remoting_strings_hy.xtb +++ b/remoting/resources/remoting_strings_hy.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Անցանց է:</translation> <translation id="3695446226812920698">Իմանալ ինչպես</translation> <translation id="3776024066357219166">Chrome Հեռակա աշխատասեղանի աշխատաշրջանն ավարտվել է:</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Ընտրացանկ</translation> <translation id="3905196214175737742">Հանգույցի սեփականատիրոջ տիրույթն անվավեր է:</translation> <translation id="3931191050278863510">Հանգույցի աշխատանքը դադարեցված է:</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Վերջին անգամ առցանց` <ph name="DATE" /></translation> <translation id="544077782045763683">Հանգույցն անջատվել է:</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Ձեր աշխատասեղանն այս պահին համօգտագործվում է <ph name="USER" />-ի հետ:</translation> <translation id="5750083143895808682">Դուք մուտք եք գործել <ph name="EMAIL_ADDRESS" /> հաշիվ:</translation> <translation id="579702532610384533">Նորից կապակցվել</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Օգնություն</translation> <translation id="6612717000975622067">Ուղարկել Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Թույլատրել</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc: Բոլոր իրավունքները պահպանված են:</translation> <translation id="677755392401385740">Գործարկվել է խնամորդ հետևյալ օգտատիրոջ համար՝ <ph name="HOST_USERNAME" />:</translation> <translation id="6939719207673461467">Ցուցադրել/թաքցնել ստեղնաշարը:</translation> <translation id="6963936880795878952">Հեռակա համակարգչի հետ կապակցումները ժամանակավորապես արգելափակված են, քանի որ ինչ-որ մեկը փորձել է կապակցվել սխալ PIN կոդով: Փորձեք ավելի ուշ:</translation>
diff --git a/remoting/resources/remoting_strings_id.xtb b/remoting/resources/remoting_strings_id.xtb index 6376691..0aa1783 100644 --- a/remoting/resources/remoting_strings_id.xtb +++ b/remoting/resources/remoting_strings_id.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Pelajari caranya</translation> <translation id="3776024066357219166">Sesi Chrome Desktop Jarak Jauh Anda telah berakhir.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domain pemilik host tidak valid.</translation> <translation id="3931191050278863510">Host berhenti.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Online terakhir: <ph name="DATE" /></translation> <translation id="544077782045763683">Hosting telah dimatikan.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Desktop Anda saat ini sedang dibagikan dengan <ph name="USER" />.</translation> <translation id="5750083143895808682">Login sebagai <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Sambungkan ulang</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Dukungan</translation> <translation id="6612717000975622067">Kirim Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Bagikan</translation> -<translation id="6681800064886881394">Hak cipta 2013 Google Inc. Semua Hak Dilindungi Undang-Undang.</translation> <translation id="677755392401385740">Host dimulai untuk pengguna: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Tunjukkan/sembunyikan keyboard.</translation> <translation id="6963936880795878952">Sambungan ke komputer jarak jauh diblokir untuk sementara karena seseorang mencoba untuk menyambungkannya dengan PIN yang tidak valid. Coba lagi nanti.</translation>
diff --git a/remoting/resources/remoting_strings_is.xtb b/remoting/resources/remoting_strings_is.xtb index c615eb2..d55ecc04 100644 --- a/remoting/resources/remoting_strings_is.xtb +++ b/remoting/resources/remoting_strings_is.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Án nettengingar</translation> <translation id="3695446226812920698">Kynntu þér hvernig</translation> <translation id="3776024066357219166">Lotu fjarstjórnunar tölvu í Chrome er lokið.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Valmynd</translation> <translation id="3905196214175737742">Ógilt lén hýsilseiganda.</translation> <translation id="3931191050278863510">Hýsill stöðvaður.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Síðast nettengt: <ph name="DATE" /></translation> <translation id="544077782045763683">Slökkt hefur verið á hýslinum.</translation> <translation id="5601503069213153581">PIN-númer</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Þú ert að deila skjáborðinu þínu með <ph name="USER" />.</translation> <translation id="5750083143895808682">Skráð(ur) inn sem <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Tengjast aftur</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Aðstoð</translation> <translation id="6612717000975622067">Senda Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Deila</translation> -<translation id="6681800064886881394">Höfundarréttur 2013 Google Inc. Allur réttur áskilinn.</translation> <translation id="677755392401385740">Hýsill ræstur fyrir notanda: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Sýna/fela lyklaborð.</translation> <translation id="6963936880795878952">Tímabundið er lokað fyrir tengingar við fjartengdu tölvuna vegna þess að einhver reyndi að tengjast henni með ógildu PIN-númeri. Reyndu aftur síðar.</translation>
diff --git a/remoting/resources/remoting_strings_it.xtb b/remoting/resources/remoting_strings_it.xtb index 23059bc..c6295e6 100644 --- a/remoting/resources/remoting_strings_it.xtb +++ b/remoting/resources/remoting_strings_it.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Scopri come</translation> <translation id="3776024066357219166">La sessione Chrome Remote Desktop è terminata.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Dominio proprietario host non valido.</translation> <translation id="3931191050278863510">Host interrotto.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Ultimo collegamento online: <ph name="DATE" /></translation> <translation id="544077782045763683">L'host è stato chiuso.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Il tuo desktop è attualmente condiviso con <ph name="USER" />.</translation> <translation id="5750083143895808682">Accesso eseguito come <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Riconnetti</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Assistenza</translation> <translation id="6612717000975622067">Invia Ctrl-Alt-Canc</translation> <translation id="6654753848497929428">Condividi</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Tutti i diritti riservati.</translation> <translation id="677755392401385740">Host avviato per utente: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostra/nascondi tastiera.</translation> <translation id="6963936880795878952">Le connessioni al computer remoto sono temporaneamente bloccate perché qualcuno stava cercando di collegarsi al computer con un PIN non valido. Riprova più tardi.</translation>
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb index e419e227..966b67d 100644 --- a/remoting/resources/remoting_strings_iw.xtb +++ b/remoting/resources/remoting_strings_iw.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">במצב לא מקוון.</translation> <translation id="3695446226812920698">איך עושים זאת</translation> <translation id="3776024066357219166">הפעילות של Chrome Remote Desktop הסתיימה.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">תפריט</translation> <translation id="3905196214175737742">דומיין לא חוקי של בעל המארח.</translation> <translation id="3931191050278863510">המארח הופסק.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">חיבור אחרון לרשת: <ph name="DATE" /></translation> <translation id="544077782045763683">המארח כבה.</translation> <translation id="5601503069213153581">קוד אימות</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">שולחן העבודה שלך משותף כעת עם <ph name="USER" />.</translation> <translation id="5750083143895808682">התחברת באמצעות חשבון <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">התחברות מחדש</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">תמיכה</translation> <translation id="6612717000975622067">שליחת Ctrl-Alt-Del</translation> <translation id="6654753848497929428">שיתוף</translation> -<translation id="6681800064886881394">Copyright © 2013 Google Inc.. כל הזכויות שמורות.</translation> <translation id="677755392401385740">המארח הופעל עבור המשתמש: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">הצגה/הסתרה של המקלדת.</translation> <translation id="6963936880795878952">החיבורים למחשב המרוחק חסומים באופן זמני משום שמישהו ניסה להתחבר אליו עם קוד אימות לא חוקי. יש לנסות שוב מאוחר יותר.</translation>
diff --git a/remoting/resources/remoting_strings_ja.xtb b/remoting/resources/remoting_strings_ja.xtb index 0615884..8e2e96f 100644 --- a/remoting/resources/remoting_strings_ja.xtb +++ b/remoting/resources/remoting_strings_ja.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">オフラインです。</translation> <translation id="3695446226812920698">詳細</translation> <translation id="3776024066357219166">Chrome リモート デスクトップ セッションが終了しました。</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">メニュー</translation> <translation id="3905196214175737742">ホストの所有者ドメインが無効です。</translation> <translation id="3931191050278863510">ホストが停止しました。</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">前回のインターネット接続日: <ph name="DATE" /></translation> <translation id="544077782045763683">ホストはシャットダウンしました。</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">デスクトップは現在 <ph name="USER" /> と共有されています。</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> としてログインしています。</translation> <translation id="579702532610384533">再接続</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">サポート</translation> <translation id="6612717000975622067">Ctrl-Alt-Del を送信</translation> <translation id="6654753848497929428">共有</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. All Rights Reserved.</translation> <translation id="677755392401385740">次のユーザーのホストを開始しました: <ph name="HOST_USERNAME" />。</translation> <translation id="6939719207673461467">キーボードを表示/非表示</translation> <translation id="6963936880795878952">無効な PIN を使用した接続が試みられたため、リモートのパソコンへの接続が一時的にブロックされています。しばらくしてからもう一度お試しください。</translation>
diff --git a/remoting/resources/remoting_strings_ka.xtb b/remoting/resources/remoting_strings_ka.xtb index 5740565..82c3e4506 100644 --- a/remoting/resources/remoting_strings_ka.xtb +++ b/remoting/resources/remoting_strings_ka.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ხაზგარეშე.</translation> <translation id="3695446226812920698">შეიტყვეთ როგორ</translation> <translation id="3776024066357219166">თქვენი Chrome-ის დისტანციური სამუშაო დაფის სესია დასრულდა.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">მენიუ</translation> <translation id="3905196214175737742">მასპინძელის მფლობელი დომენი არასწორია.</translation> <translation id="3931191050278863510">მასპინძელი შეჩერებულია.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">ბოლოს ონლაინ: <ph name="DATE" /></translation> <translation id="544077782045763683">საკვანძო კომპიუტერი გამოირთო.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">თქვენი სამუშაო დაფა ამჟამად გაზიარებულია მომხმარებელთან <ph name="USER" />.</translation> <translation id="5750083143895808682">შესული ხართ, როგორც <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">ხელახლა დაკავშირება</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">მხარდაჭერა</translation> <translation id="6612717000975622067">გაგზავნა Ctrl-Alt-Del</translation> <translation id="6654753848497929428">გაზიარება</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. ყველა უფლება დაცულია.</translation> <translation id="677755392401385740">საკვანძო კომპიუტერი ჩაირთო მომხმარებლისათვის: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">კლავიატურის გამოჩენა/დამალვა.</translation> <translation id="6963936880795878952">დისტანციურ კომპიუტერთან კავშირები დროებით დაბლოკილია, რადგან ვიღაც ცდილობდა დაკავშირებას არასწორი PIN-კოდით. გთხოვთ, ცადოთ მოგვიანებით.</translation>
diff --git a/remoting/resources/remoting_strings_kk.xtb b/remoting/resources/remoting_strings_kk.xtb index e5b3253..8e8a736 100644 --- a/remoting/resources/remoting_strings_kk.xtb +++ b/remoting/resources/remoting_strings_kk.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Желіден тыс.</translation> <translation id="3695446226812920698">Әдісін білу</translation> <translation id="3776024066357219166">Сіздің Chrome қашықтағы жұмыс үстелі сеансыңыз аяқталды.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Мәзір</translation> <translation id="3905196214175737742">Жарамсыз хост иесінің домені.</translation> <translation id="3931191050278863510">Хост тоқтады.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Желіде соңғы болған күні: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост өшірілді.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Жұмыс үстеліңіз қазір <ph name="USER" /> пайдаланушысымен бөлісілген.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> есептік жазбасымен кірдіңіз.</translation> <translation id="579702532610384533">Қайта қосылу</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Қолдау қызметі</translation> <translation id="6612717000975622067">Ctrl-Alt-Del жіберу</translation> <translation id="6654753848497929428">Бөлісу</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Барлық құқықтар қорғалған.</translation> <translation id="677755392401385740">Пайдаланушы үшін хост іске қосылды: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Пернетақтаны көрсету/жасыру.</translation> <translation id="6963936880795878952">Қашықтағы компьютерге жарамсыз PIN кодымен кіру әрекеті жасалғандықтан, оған қосылу уақытша мүмкін емес. Әрекетіңізді кейінірек қайталаңыз.</translation>
diff --git a/remoting/resources/remoting_strings_km.xtb b/remoting/resources/remoting_strings_km.xtb index 27078a2..a64c2f75b 100644 --- a/remoting/resources/remoting_strings_km.xtb +++ b/remoting/resources/remoting_strings_km.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ក្រៅបណ្តាញ</translation> <translation id="3695446226812920698">ស្វែងយល់ពីរបៀប</translation> <translation id="3776024066357219166">វេន Chrome Remote Desktop របស់អ្នកបានបញ្ចប់។</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ម៉ឺនុយ</translation> <translation id="3905196214175737742">ដែនរបស់ម្ចាស់ម៉ាស៊ីនចែករំលែកគ្មានសុពលភាព។</translation> <translation id="3931191050278863510">ឧបករណ៍ចែករំលែកបណ្តាញបានឈប់។</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">នៅលើអ៊ីនធឺណិតលើកចុងក្រោយនៅថ្ងៃទី៖ <ph name="DATE" /></translation> <translation id="544077782045763683">ឧបករណ៍ចែករំលែកបណ្តាញបានបិទ។</translation> <translation id="5601503069213153581">លេខសម្គាល់</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">បច្ចុប្បន្ន ដេស៍ថបរបស់អ្នកត្រូវបានចែករំលែកជាមួយ <ph name="USER" />។</translation> <translation id="5750083143895808682">បានចូលជា <ph name="EMAIL_ADDRESS" /> ។</translation> <translation id="579702532610384533">ភ្ជាប់ឡើងវិញ</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ជំនួយ</translation> <translation id="6612717000975622067">ផ្ញើ Ctrl-Alt-Del</translation> <translation id="6654753848497929428">ចែករំលែក</translation> -<translation id="6681800064886881394">រក្សាសិទ្ធិគ្រប់យ៉ាងដោយ 2013 Google Inc។</translation> <translation id="677755392401385740">ឧបករណ៍ចែករំលែកបណ្តាញបានចាប់ផ្តើមសម្រាប់អ្នកប្រើ៖ <ph name="HOST_USERNAME" />។</translation> <translation id="6939719207673461467">បង្ហាញ/លាក់ ក្តារចុច។</translation> <translation id="6963936880795878952">ការតភ្ជាប់ទៅកុំព្យូទ័រពីចម្ងាយត្រូវបានរារាំងជាបណ្តោះអាសន្ន ដោយសារមាននរណាម្នាក់កំពុងព្យាយាមភ្ជាប់ទៅវាដោយប្រើកូដ PIN ដែលមិនត្រឹមត្រូវ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
diff --git a/remoting/resources/remoting_strings_kn.xtb b/remoting/resources/remoting_strings_kn.xtb index 20c6b36..8a6d0fb4 100644 --- a/remoting/resources/remoting_strings_kn.xtb +++ b/remoting/resources/remoting_strings_kn.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ಆಫ್ಲೈನ್.</translation> <translation id="3695446226812920698">ಹೇಗೆ ಎಂಬುದನ್ನು ತಿಳಿದುಕೊಳ್ಳಿ</translation> <translation id="3776024066357219166">ನಿಮ್ಮ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ಅವಧಿಯು ಕೊನೆಗೊಂಡಿದೆ.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ಮೆನು</translation> <translation id="3905196214175737742">ಅಮಾನ್ಯ ಹೋಸ್ಟ್ ಮಾಲೀಕರ ಡೊಮೇನ್.</translation> <translation id="3931191050278863510">ಹೋಸ್ಟ್ ನಿಲ್ಲಿಸಲಾಗಿದೆ.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">ಕೊನೆಯದಾಗಿ ಆನ್ಲೈನ್: <ph name="DATE" /></translation> <translation id="544077782045763683">ಹೋಸ್ಟ್ ಆಫ್ಲೈನ್ ಆಗಿದ್ದಾರೆ</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625"><ph name="USER" /> ಅವರೊಂದಿಗೆ ನಿಮ್ಮ ಡೆಸ್ಕ್ಟಾಪ್ ಅನ್ನು ಪ್ರಸ್ತುತ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> ನಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ.</translation> <translation id="579702532610384533">ಮರುಸಂಪರ್ಕಿಸು</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ಬೆಂಬಲ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del ಕಳುಹಿಸು</translation> <translation id="6654753848497929428">ಹಂಚಿಕೊಳ್ಳಿ</translation> -<translation id="6681800064886881394">ಹಕ್ಕುಸ್ವಾಮ್ಯ 2013 Google Inc. ಎಲ್ಲಾ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ.</translation> <translation id="677755392401385740">ಈ ಬಳಕೆದಾರರಿಗಾಗಿ ಹೋಸ್ಟ್ ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">ಕೀಬೋರ್ಡ್ ತೋರಿಸು/ಮರೆಮಾಡು.</translation> <translation id="6963936880795878952">ಅಮಾನ್ಯ ಪಿನ್ ಬಳಸಿಕೊಂಡು ಅದಕ್ಕೆ ಸಂಪರ್ಕಿಸಲು ಯಾರೋ ಪ್ರಯತ್ನಿಸುತ್ತಿರುವ ಕಾರಣ ರಿಮೋಟ್ ಕಂಪ್ಯೂಟರ್ಗೆ ಸಂಪರ್ಕಗಳನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
diff --git a/remoting/resources/remoting_strings_ko.xtb b/remoting/resources/remoting_strings_ko.xtb index 4a38cbee..67d1f61 100644 --- a/remoting/resources/remoting_strings_ko.xtb +++ b/remoting/resources/remoting_strings_ko.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">오프라인.</translation> <translation id="3695446226812920698">자세히 알아보기</translation> <translation id="3776024066357219166">Chrome 원격 데스크톱 세션이 종료되었습니다.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">메뉴</translation> <translation id="3905196214175737742">잘못된 호스트 소유자 도메인입니다.</translation> <translation id="3931191050278863510">호스트가 중지되었습니다.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">최근 온라인 접속일: <ph name="DATE" /></translation> <translation id="544077782045763683">호스트가 꺼져 있습니다.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">내 컴퓨터를 <ph name="USER" />님과 공유하고 있습니다.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> 계정으로 로그인했습니다.</translation> <translation id="579702532610384533">다시 연결</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">지원</translation> <translation id="6612717000975622067">Ctrl-Alt-Del 전송</translation> <translation id="6654753848497929428">공유</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. All Rights Reserved.</translation> <translation id="677755392401385740">사용자(<ph name="HOST_USERNAME" />)의 호스트가 시작되었습니다.</translation> <translation id="6939719207673461467">키보드 표시/숨기기</translation> <translation id="6963936880795878952">누군가 잘못된 PIN으로 연결을 시도하여 원격 컴퓨터 연결이 일시적으로 차단되었습니다. 나중에 다시 시도해 주세요.</translation>
diff --git a/remoting/resources/remoting_strings_ky.xtb b/remoting/resources/remoting_strings_ky.xtb index 4c044137..717d8974 100644 --- a/remoting/resources/remoting_strings_ky.xtb +++ b/remoting/resources/remoting_strings_ky.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Оффлайн.</translation> <translation id="3695446226812920698">Үйрөнүп алыңыз</translation> <translation id="3776024066357219166">Chrome Алыскы иштакта сеансыңыз аяктады.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Меню</translation> <translation id="3905196214175737742">Хост ээсинин жараксыз домени.</translation> <translation id="3931191050278863510">Хост токтотулду.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Акыркы жолу онлайнда болгон күн: <ph name="DATE" /></translation> <translation id="544077782045763683">Башкы түйүн жабылды.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Иштактаңыз учурда <ph name="USER" /> менен бөлүшүлүүдө.</translation> <translation id="5750083143895808682">Аккаунтка <ph name="EMAIL_ADDRESS" /> менен кирдиңиз.</translation> <translation id="579702532610384533">Кайра туташуу</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Колдоо</translation> <translation id="6612717000975622067">Ctrl-Alt-Del жөнөтүү</translation> <translation id="6654753848497929428">Бөлүшүү</translation> -<translation id="6681800064886881394">Автордук укук 2013 Google Inc. Бардык укуктар корголгон.</translation> <translation id="677755392401385740">Хост төмөнкү колдонуучу үчүн башталды: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Баскычтопту көрсөтүү/жашыруу.</translation> <translation id="6963936880795878952">Кимдир-бирөө алыскы компьютерге туура эмес PIN-код менен киргенге аракет кылып жаткандыктан, ушул компьютерге болгон туташуулар убактылуу бөгөттөлдү. Бир аздан кийин кайталап көрүңүз.</translation>
diff --git a/remoting/resources/remoting_strings_lo.xtb b/remoting/resources/remoting_strings_lo.xtb index f2b40db..c979111 100644 --- a/remoting/resources/remoting_strings_lo.xtb +++ b/remoting/resources/remoting_strings_lo.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ອອບລາຍ</translation> <translation id="3695446226812920698">ສຶກສາວິທີການ</translation> <translation id="3776024066357219166">ໝົດໄລຍະເວລາ Chrome Remote Desktop ຂອງທ່ານແລ້ວ.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ເມນູ</translation> <translation id="3905196214175737742">ໂດເມນເຈົ້າຂອງແມ່ຂ່າຍໃຊ້ບໍ່ໄດ້.</translation> <translation id="3931191050278863510">ແມ່ຂ່າຍຢຸດແລ້ວ.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">ອອນລາຍຫຼ້າສຸດ: <ph name="DATE" /></translation> <translation id="544077782045763683">ແມ່ຂ່າຍປິດລະບົບແລ້ວ.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ປະຈຸບັນ ເດັສທັອບຂອງທ່ານແຊຣ໌ຢູ່ກັບ <ph name="USER" />.</translation> <translation id="5750083143895808682">ເຂົ້າສູ່ລະບົບເປັນ <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">ເຊື່ອມຕໍ່ໃໝ່</translation> @@ -119,7 +119,6 @@ <translation id="6583902294974160967">ການຊ່ວຍເຫຼືອ</translation> <translation id="6612717000975622067">ສົ່ງ Ctrl-Alt-Del</translation> <translation id="6654753848497929428">ແບ່ງປັນ</translation> -<translation id="6681800064886881394">ລິຂະສິດ 2013 Google Inc. ສະຫງວນລິຂະສິດ.</translation> <translation id="677755392401385740">ແມ່ຂ່າຍເລີ່ມຕົ້ນສໍາລັບຜູ້ໃຊ້ແລ້ວ: <ph name="HOST_USERNAME" /> .</translation> <translation id="6939719207673461467">ສະແດງ/ເຊື່ອງຄີບອດ.</translation> <translation id="6963936880795878952">ການເຊື່ອມຕໍ່ກັບຄອມພິວເຕີທາງໄກຖືກບລັອກໄວ້ຊົ່ວຄາວ ເພາະວ່າມີບາງຄົນໄດ້ພະຍາຍາມເຊື່ອມຕໍ່ກັບມັນດ້ວຍ PIN ທີ່ບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງໃໝ່ອີກຄັ້ງໃນພາຍຫຼັງ.</translation>
diff --git a/remoting/resources/remoting_strings_lt.xtb b/remoting/resources/remoting_strings_lt.xtb index c7dbf6e..d35533b5 100644 --- a/remoting/resources/remoting_strings_lt.xtb +++ b/remoting/resources/remoting_strings_lt.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Neprisijungus.</translation> <translation id="3695446226812920698">Sužinokite kaip</translation> <translation id="3776024066357219166">Baigėsi „Chrome“ nuotolinio kompiuterio valdymo sesija.</translation> -<translation id="3870154837782082782">„Google Inc.“</translation> <translation id="3897092660631435901">Meniu</translation> <translation id="3905196214175737742">Netinkamas prieglobos savininko domenas.</translation> <translation id="3931191050278863510">Priegloba sustabdyta.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Paskutinį kartą prisijungta: <ph name="DATE" /></translation> <translation id="544077782045763683">Priegloba išjungta.</translation> <translation id="5601503069213153581">PIN kodas</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Šiuo metu darbalaukis bendrinamas su šiuo naudotoju: <ph name="USER" />.</translation> <translation id="5750083143895808682">Prisijungta kaip <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Pakartotinai prijungti</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Palaikymas</translation> <translation id="6612717000975622067">Siųsti „Ctrl“ + „Alt“ + „Del“</translation> <translation id="6654753848497929428">Bendrinti</translation> -<translation id="6681800064886881394">Autorių teisės priklauso „Google Inc.“, 2013 m. Visos teisės saugomos.</translation> <translation id="677755392401385740">Pradėta naudotojo priegloba: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Rodyti / slėpti klaviatūrą.</translation> <translation id="6963936880795878952">Ryšiai su nuotoliniu kompiuteriu laikinai blokuojami, nes kažkas bandė prisijungti prie jo naudodamas netinkamą PIN kodą. Vėliau bandykite dar kartą.</translation>
diff --git a/remoting/resources/remoting_strings_lv.xtb b/remoting/resources/remoting_strings_lv.xtb index 231386c..9783bf32 100644 --- a/remoting/resources/remoting_strings_lv.xtb +++ b/remoting/resources/remoting_strings_lv.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Bezsaistē.</translation> <translation id="3695446226812920698">Uzzināt vairāk</translation> <translation id="3776024066357219166">Jūsu Chrome attālās darbvirsmas sesija ir pārtraukta.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Izvēlne</translation> <translation id="3905196214175737742">Saimniekdatora īpašnieka domēns nav derīgs.</translation> <translation id="3931191050278863510">Saimniekdatora darbība ir apturēta.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Pēdējoreiz tiešsaistē: <ph name="DATE" /></translation> <translation id="544077782045763683">Saimniekdators tika izslēgts.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Jūsu darbvirsma šobrīd tiek koplietota ar lietotāju <ph name="USER" />.</translation> <translation id="5750083143895808682">Pierakstījies kā <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Atkārtoti savienot</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Atbalsts</translation> <translation id="6612717000975622067">Sūtīt Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Koplietot</translation> -<translation id="6681800064886881394">Autortiesības © 2013 Google Inc. Visas tiesības paturētas.</translation> <translation id="677755392401385740">Saimniekdators startēts šādam lietotājam: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Rādīt/slēpt tastatūru</translation> <translation id="6963936880795878952">Savienojumi ar attālo datoru īslaicīgi ir bloķēti, jo kāda persona mēģināja izveidot savienojumu, izmantojot nederīgu PIN. Lūdzu, vēlāk mēģiniet vēlreiz.</translation>
diff --git a/remoting/resources/remoting_strings_mk.xtb b/remoting/resources/remoting_strings_mk.xtb index f704611..41d2d1c 100644 --- a/remoting/resources/remoting_strings_mk.xtb +++ b/remoting/resources/remoting_strings_mk.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлајн.</translation> <translation id="3695446226812920698">Дознајте како</translation> <translation id="3776024066357219166">Сесијата на Chrome Remote Desktop заврши.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Мени</translation> <translation id="3905196214175737742">Неважечки домен на сопственикот на домаќинот.</translation> <translation id="3931191050278863510">Домаќинот запре.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Последен пат онлајн.: <ph name="DATE" /></translation> <translation id="544077782045763683">Домаќинот се исклучи.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Работната површина моментално ја споделувате со <ph name="USER" />.</translation> <translation id="5750083143895808682">Најавени сте како <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Поврзи се повторно</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Поддршка</translation> <translation id="6612717000975622067">Испрати Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Сподели</translation> -<translation id="6681800064886881394">Авторски права 2013 Google LLC. Сите права се задржани.</translation> <translation id="677755392401385740">Стартуван домаќин за корисникот: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Покажи/сокриј тастатура.</translation> <translation id="6963936880795878952">Врските со далечинскиот компјутер се привремено блокирани бидејќи некој се обидуваше да се поврзе со него со неважечки PIN. Обидете се повторно подоцна.</translation>
diff --git a/remoting/resources/remoting_strings_ml.xtb b/remoting/resources/remoting_strings_ml.xtb index f21d0d25..7ca100e 100644 --- a/remoting/resources/remoting_strings_ml.xtb +++ b/remoting/resources/remoting_strings_ml.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ഓഫ്ലൈൻ.</translation> <translation id="3695446226812920698">എങ്ങനെയെന്നറിയുക</translation> <translation id="3776024066357219166">നിങ്ങളുടെ Chrome വിദൂര ഡെസ്ക്ടോപ്പ് സെഷന് അവസാനിച്ചു.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">മെനു</translation> <translation id="3905196214175737742">ഹോസ്റ്റ് ഉടമ ഡൊമെയ്ൻ അസാധുവാണ്.</translation> <translation id="3931191050278863510">ഹോസ്റ്റ് നിർത്തി.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">അവസാന ഓൺലൈൻ: <ph name="DATE" /></translation> <translation id="544077782045763683">ഹോസ്റ്റ് ഷട്ട് ഡൗൺ ചെയ്തു.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">നിങ്ങളുടെ ഡെസ്ക്ടോപ്പ് <ph name="USER" /> എന്നയാളുമായി നിലവിൽ പങ്കിടുന്നു.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> എന്നയാളായി സൈൻ ഇൻ ചെയ്തു.</translation> <translation id="579702532610384533">വീണ്ടും ബന്ധിപ്പിക്കുക</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">പിന്തുണ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del അയയ്ക്കുക</translation> <translation id="6654753848497929428">പങ്കിടുക</translation> -<translation id="6681800064886881394">പകർപ്പവകാശം 2013 Google Inc. എല്ലാ അവകാശങ്ങളും നിക്ഷിപ്തം.</translation> <translation id="677755392401385740">ഇനിപ്പറയുന്ന ഉപയോക്താവിനായി ഹോസ്റ്റ് ആരംഭിച്ചു: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">കീബോർഡ് ദൃശ്യമാക്കുക/മറയ്ക്കുക.</translation> <translation id="6963936880795878952">അസാധുവായ പിൻ ഉപയോഗിച്ച് ഒരാൾ റിമോട്ട് കമ്പ്യൂട്ടറിലേക്ക് കണക്റ്റ് ചെയ്യാൻ ശ്രമിച്ചതിനാൽ അതിലേക്കുള്ള കണക്ഷനുകൾ തൽക്കാലം ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
diff --git a/remoting/resources/remoting_strings_mn.xtb b/remoting/resources/remoting_strings_mn.xtb index e8a6d1d1c..49e7e0c 100644 --- a/remoting/resources/remoting_strings_mn.xtb +++ b/remoting/resources/remoting_strings_mn.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлайн.</translation> <translation id="3695446226812920698">Заавар харах</translation> <translation id="3776024066357219166">Chrome-ын Алсын Зайнаас Хянах Десктопын ажиллах хугацаа дууссан байна.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Цэс</translation> <translation id="3905196214175737742">Хүчингүй хост эзэмшигчийн домэйн.</translation> <translation id="3931191050278863510">Host зогссон байна.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Сүүлд онлайн байсан: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост унтарсан байна.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google ХХК</translation> <translation id="5708869785009007625">Одоогоор таны десктопыг <ph name="USER" />-тай хуваалцсан байна.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" />-р нэвтэрсэн байна.</translation> <translation id="579702532610384533">Дахин холбогд</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Дэмжлэг</translation> <translation id="6612717000975622067">Илгээх Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Хуваалцах</translation> -<translation id="6681800064886881394">Зохиогчийн эрх 2013 Google Inc. Бүх эрхийг хуулиар хамгаалсан.</translation> <translation id="677755392401385740">Хост нь хэрэглэгчид зориулсан үйлдлийг эхэлсэн байна:<ph name="HOST_USERNAME" /> .</translation> <translation id="6939719207673461467">Компьютерийн гарыг гаргах/хаах.</translation> <translation id="6963936880795878952">Хэн нэгэн буруу ПИН-р нэвтрэхийг оролдсон тул алсын компьютерт хийх холболтыг түр хугацаанд блоклосон байна. Дараа дахин оролдоно уу.</translation>
diff --git a/remoting/resources/remoting_strings_mr.xtb b/remoting/resources/remoting_strings_mr.xtb index 06cb8cc7..53978f46 100644 --- a/remoting/resources/remoting_strings_mr.xtb +++ b/remoting/resources/remoting_strings_mr.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ऑफलाइन.</translation> <translation id="3695446226812920698">कसे ते जाणून घ्या</translation> <translation id="3776024066357219166">तुमचे Chrome रिमोट डेस्कटॉप सेशन समाप्त झाले आहे.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">मेनू</translation> <translation id="3905196214175737742">चुकीचे होस्ट मालक डोमेन.</translation> <translation id="3931191050278863510">होस्ट थांबले.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">अखेरचे ऑनलाइन होते: <ph name="DATE" /></translation> <translation id="544077782045763683">होस्टने बंद केले आहे.</translation> <translation id="5601503069213153581">पिन</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">तुमचा डेस्कटॉप सध्या <ph name="USER" /> सह शेअर केला आहे.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> म्हणून साइन इन केले.</translation> <translation id="579702532610384533">रीकनेक्ट करा</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">साहय्य</translation> <translation id="6612717000975622067">Ctrl-Alt-Del पाठवा</translation> <translation id="6654753848497929428">शेअर करा</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. सर्व हक्क राखीव.</translation> <translation id="677755392401385740">वापरकर्त्यासाठी प्रारंभ केलेला होस्ट: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">कीबोर्ड दर्शवा/लपवा.</translation> <translation id="6963936880795878952">रिमोट कॉंप्युटरशी कनेक्शन तात्पुरते ब्लॉक केली आहेत, कारण कोणीतरी अवैध पिन सह त्यावर कनेक्ट करण्याचा प्रयत्न करत होते. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
diff --git a/remoting/resources/remoting_strings_ms.xtb b/remoting/resources/remoting_strings_ms.xtb index 38c11a7..4bebb1ac 100644 --- a/remoting/resources/remoting_strings_ms.xtb +++ b/remoting/resources/remoting_strings_ms.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Luar talian.</translation> <translation id="3695446226812920698">Ketahui caranya</translation> <translation id="3776024066357219166">Sesi Desktop Jauh Chrome anda telah tamat.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domain pemilik hos tidak sah.</translation> <translation id="3931191050278863510">Hos dihentikan.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Terakhir dalam talian: <ph name="DATE" /></translation> <translation id="544077782045763683">Hos telah ditutup.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Desktop anda sedang dikongsi dengan <ph name="USER" />.</translation> <translation id="5750083143895808682">Log masuk sebagai <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Sambung semula</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Sokongan</translation> <translation id="6612717000975622067">Hantar Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Kongsi</translation> -<translation id="6681800064886881394">Hak Cipta 2013 Google Inc. Hak Cipta Terpelihara.</translation> <translation id="677755392401385740">Hos dimulakan untuk pengguna: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Paparkan/Sembunyikan papan kekunci.</translation> <translation id="6963936880795878952">Sambungan kepada komputer jauh disekat buat sementara waktu kerana seseorang sedang cuba untuk menyambung kepadanya dengan PIN yang tidak sah. Sila cuba sebentar lagi.</translation>
diff --git a/remoting/resources/remoting_strings_my.xtb b/remoting/resources/remoting_strings_my.xtb index e68633a..0fa8379 100644 --- a/remoting/resources/remoting_strings_my.xtb +++ b/remoting/resources/remoting_strings_my.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">အော့ဖ်လိုင်း</translation> <translation id="3695446226812920698">လုပ်ပုံကို လေ့လာပါ။</translation> <translation id="3776024066357219166">သင့် Chrome အဝေးထိန်း ကွန်ပြူတာ အချိန်ပိုင်း ပြီးဆုံးသွားပါပြီ။</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">မီနျူး</translation> <translation id="3905196214175737742">ကွန်ယက်ပေါ်ရှိ စက်၏ မှားယွင်းသော ဒိုမိန်း</translation> <translation id="3931191050278863510">Host ရပ်တန့်၏။</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">နောက်ဆုံး အွန်လိုင်းတက်သည့်နေ့− <ph name="DATE" /></translation> <translation id="544077782045763683">Host ပိတ်သွား၏။</translation> <translation id="5601503069213153581">ပင်နံပါတ်</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">သင့်ဒက်စတော့သည်လက်ရှိတွ၍် <ph name="USER" /> နှင့်မျှဝေ သုံးစွဲနေသည်။</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> အဖြစ် လက်မှတ်ထိုးဝင်ပါ။</translation> <translation id="579702532610384533">ပြန်လည်ချိတ်ဆက်ရန်</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ပံ့ပိုးကူညီရန်</translation> <translation id="6612717000975622067">ပို့ရန် Ctrl-Alt-Del</translation> <translation id="6654753848497929428">မျှဝေရန်</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. လုပ်ပိုင်ခွင့်များ အားလုံးကို ချုပ်ထိန်းထားသည်။</translation> <translation id="677755392401385740">အသုံးပြုသူအတွက် အိမ်ရှင် အစပြုခဲ့: <ph name="HOST_USERNAME" />။</translation> <translation id="6939719207673461467">ပြ/ၐှက် လက်ကွက်</translation> <translation id="6963936880795878952">တစ်စုံတစ်ယောက်သည် မှားယွင်းသည့်ပင်နံပါတ်ဖြင့် ချိတ်ဆက်ရန်ကြိုးစားနေသောကြောင့် အဝေးထိန်းကွန်ပျူတာသို့ ချိတ်ဆက်မှုများကို ယာယီပိတ်ထားပါသည်။ နောက်မှထပ်လုပ်ကြည့်ပါ။</translation>
diff --git a/remoting/resources/remoting_strings_ne.xtb b/remoting/resources/remoting_strings_ne.xtb index 10f7061..16aedb4 100644 --- a/remoting/resources/remoting_strings_ne.xtb +++ b/remoting/resources/remoting_strings_ne.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">अफलाइन।</translation> <translation id="3695446226812920698">कसरी सिक्नुहोस्</translation> <translation id="3776024066357219166">तपाईंको Chrome रिमोट डेस्कटप सत्र समाप्त भएको छ ।</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">मेनु</translation> <translation id="3905196214175737742">अमान्य होस्ट मालिक डोमेन।</translation> <translation id="3931191050278863510">होस्ट रोकियो।</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">पछिल्लोपटक अनलाइन हुनुभएको मिति: <ph name="DATE" /></translation> <translation id="544077782045763683">होस्ट बन्द गरिएको छ।</translation> <translation id="5601503069213153581">पिन</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">तपाईंको डेस्कटप अहिले <ph name="USER" /> सँग साझा गरिएको छ ।</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> का रूपमा साइन इन गरियो।</translation> <translation id="579702532610384533">पुन: जडान गर्नुहोस्</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">सहायता प्रदान गर्ने सेवा</translation> <translation id="6612717000975622067">Ctrl-Alt-Del पठाउनुहोस्</translation> <translation id="6654753848497929428">साझा गर्नुहोस्</translation> -<translation id="6681800064886881394">प्रतिलिपिअधिकार 201३ Google संगठन। सर्वाधिकार सुरक्षित।</translation> <translation id="677755392401385740">यस प्रयोगकर्ताको लागि होस्ट सुरुवातकर्ता: <ph name="HOST_USERNAME" /></translation> <translation id="6939719207673461467">कुञ्जीपाटी देखाउनुहोस्/लुकाउनुहोस्।</translation> <translation id="6963936880795878952">कसैले अमान्य PIN मार्फत जडान गर्ने प्रयास गरिरहेको हुनाले दूरवर्ती कम्प्युटरमा गरिने जडानहरूलाई सदाका लागि रोक लगाइएको छ। कृपया पछि फेरि प्रयास गर्नुहोस्।</translation>
diff --git a/remoting/resources/remoting_strings_nl.xtb b/remoting/resources/remoting_strings_nl.xtb index 7faa04d..c5cab7ab 100644 --- a/remoting/resources/remoting_strings_nl.xtb +++ b/remoting/resources/remoting_strings_nl.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Meer informatie</translation> <translation id="3776024066357219166">Je Chrome Remote Desktop-sessie is beëindigd.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Ongeldig domein voor hosteigenaar.</translation> <translation id="3931191050278863510">Host is gestopt.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Laatst online: <ph name="DATE" /></translation> <translation id="544077782045763683">Host is afgesloten.</translation> <translation id="5601503069213153581">Pincode</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Je bureaublad wordt momenteel gedeeld met <ph name="USER" />.</translation> <translation id="5750083143895808682">Ingelogd als <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Opnieuw verbinding maken</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Support</translation> <translation id="6612717000975622067">Ctrl-Alt-Del verzenden</translation> <translation id="6654753848497929428">Delen</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Alle rechten voorbehouden.</translation> <translation id="677755392401385740">Host gestart voor gebruiker: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Toetsenbord weergeven/verbergen.</translation> <translation id="6963936880795878952">Verbindingen met de externe computer zijn tijdelijk geblokkeerd omdat iemand heeft geprobeerd met een ongeldige pincode verbinding te maken met de computer. Probeer het later opnieuw.</translation>
diff --git a/remoting/resources/remoting_strings_no.xtb b/remoting/resources/remoting_strings_no.xtb index f9d1d4a..3f986c32 100644 --- a/remoting/resources/remoting_strings_no.xtb +++ b/remoting/resources/remoting_strings_no.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Utenfor nettet.</translation> <translation id="3695446226812920698">Sånn gjør du det</translation> <translation id="3776024066357219166">Chrome Eksternt skrivebord-økten din er avsluttet.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Meny</translation> <translation id="3905196214175737742">Ugyldig domene for vertseieren.</translation> <translation id="3931191050278863510">Verten stoppet.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Sist på nett: <ph name="DATE" /></translation> <translation id="544077782045763683">Verten har slått seg av.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Skrivebordet ditt deles for øyeblikket med <ph name="USER" />.</translation> <translation id="5750083143895808682">Logget på som <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Koble til på nytt</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Brukerstøtte</translation> <translation id="6612717000975622067">Send Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Del</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Med enerett.</translation> <translation id="677755392401385740">Vert startet for brukeren: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Vis/skjul tastaturet.</translation> <translation id="6963936880795878952">Tilkoblinger til den eksterne datamaskinen er midlertidig blokkert fordi noen prøvde å koble seg til med en ugyldig PIN-kode. Prøv på nytt senere.</translation>
diff --git a/remoting/resources/remoting_strings_or.xtb b/remoting/resources/remoting_strings_or.xtb index 68bddba..2d58bed0 100644 --- a/remoting/resources/remoting_strings_or.xtb +++ b/remoting/resources/remoting_strings_or.xtb
@@ -53,7 +53,6 @@ <translation id="369442766917958684">ଅଫ୍ଲାଇନ୍ ଅଛି।</translation> <translation id="3695446226812920698">କିପରି ହେବ ତାହା ଜାଣନ୍ତୁ</translation> <translation id="3776024066357219166">ଆପଣଙ୍କର Chrome ରିମୋଟ୍ ଡେସ୍କଟପ୍ର ସମୟ ଅବଧି ସମାପ୍ତ ହୋଇଛି।</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ମେନୁ</translation> <translation id="3905196214175737742">ଅବୈଧ ହୋଷ୍ଟ ମାଲିକ ଡୋମେନ୍।</translation> <translation id="3931191050278863510">ହୋଷ୍ଟ ବନ୍ଦ ହୋଇଯାଇଛି।</translation> @@ -98,6 +97,7 @@ <translation id="5419418238395129586">ଗତଥର ଅନଲାଇନ୍ ଥିଲେ: <ph name="DATE" /></translation> <translation id="544077782045763683">ହୋଷ୍ଟ ବନ୍ଦ ହୋଇଯାଇଛି।</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ଆପଣଙ୍କର ଡେସ୍କଟପ୍ ବର୍ତ୍ତମାନ <ph name="USER" />ଙ୍କ.ସହିତ ସେୟାର୍ କରାଯାଇଛି।</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" />ରେ ସାଇନ୍-ଇନ୍ କରିଛନ୍ତି।</translation> <translation id="579702532610384533">ପୁନଃସଂଯୋଗ କରନ୍ତୁ</translation> @@ -117,7 +117,6 @@ <translation id="6583902294974160967">ସମର୍ଥନ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del ପଠାନ୍ତୁ</translation> <translation id="6654753848497929428">ସେୟାର୍ କରନ୍ତୁ</translation> -<translation id="6681800064886881394">କପିରାଇଟ୍ 2013 Google Inc। ସର୍ବସତ୍ତ୍ଵ ସଂରକ୍ଷିତ।</translation> <translation id="677755392401385740">ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ହୋଷ୍ଟ ଷ୍ଟାର୍ଟ ହେଲା: <ph name="HOST_USERNAME" />।</translation> <translation id="6939719207673461467">କୀ’ବୋର୍ଡ ଦେଖାନ୍ତୁ/ଲୁଚାନ୍ତୁ।</translation> <translation id="6963936880795878952">ରିମୋଟ୍ କମ୍ପ୍ୟୁଟର୍କୁ ସଂଯୋଗ ଅସ୍ଥାୟୀରୂପେ ଅବରୋଧ କରାଯାଇଛି କାରଣ କେହିଜଣେ ଏକ ଅବୈଧ ପିନ୍ରେ ଏହାକୁ ସଂଯୋଗ କରିବାକୁ ଚେଷ୍ଟା କରୁଥିଲେ। ଦୟାକରି, ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
diff --git a/remoting/resources/remoting_strings_pa.xtb b/remoting/resources/remoting_strings_pa.xtb index b6677dd..74a68f87 100644 --- a/remoting/resources/remoting_strings_pa.xtb +++ b/remoting/resources/remoting_strings_pa.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ਆਫ਼ਲਾਈਨ।</translation> <translation id="3695446226812920698">ਜਾਣੋ ਕਿਵੇਂ</translation> <translation id="3776024066357219166">ਤੁਹਾਡਾ 'Chrome ਰਿਮੋਟ ਡੈਸਕਟਾਪ' ਸੈਸ਼ਨ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ।</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">ਮੀਨੂ</translation> <translation id="3905196214175737742">ਅਵੈਧ ਹੋਸਟ ਮਾਲਕ ਡੋਮੇਨ।</translation> <translation id="3931191050278863510">ਹੋਸਟ ਬੰਦ ਕੀਤਾ।</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">ਪਿਛਲੀ ਵਾਰ ਆਨਲਾਈਨ ਹੋਣ ਦੀ ਤਾਰੀਖ: <ph name="DATE" /></translation> <translation id="544077782045763683">ਹੋਸਟ ਨੇ ਬੰਦ ਕੀਤਾ ਹੈ।</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ਤੁਹਾਡਾ ਡੈਸਕਟਾਪ ਇਸ ਵੇਲੇ <ph name="USER" /> ਨਾਲ ਸ਼ੇਅਰ ਕੀਤਾ ਗਿਆ ਹੈ।</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> ਵਜੋਂ ਸਾਈਨ ਇਨ ਕੀਤਾ ਗਿਆ।</translation> <translation id="579702532610384533">ਰੀਕਨੈਕਟ ਕਰੋ</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ਸਹਾਇਤਾ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del ਭੇਜੋ</translation> <translation id="6654753848497929428">ਸਾਂਝਾ ਕਰੋ</translation> -<translation id="6681800064886881394">ਕਾਪੀਰਾਈਟ 2013 Google Inc. ਸਾਰੇ ਹੱਕ ਰਾਖਵੇਂ ਹਨ।</translation> <translation id="677755392401385740">ਵਰਤੋਂਕਾਰ ਲਈ ਸ਼ੁਰੂ ਕੀਤਾ ਹੋਸਟ: <ph name="HOST_USERNAME" />।</translation> <translation id="6939719207673461467">ਕੀ-ਬੋਰਡ ਦਿਖਾਓ/ਲੁਕਾਓ।</translation> <translation id="6963936880795878952">ਰਿਮੋਟ ਕੰਪਿਊਟਰ 'ਤੇ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਅਸਥਾਈ ਤੌਰ 'ਤੇ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ ਕਿਉਂਕਿ ਕੋਈ ਵਿਅਕਤੀ ਅਵੈਧ ਪਿੰਨ ਨਾਲ ਇਸ ਨਾਲ ਕਨੈਕਟ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਸੀ। ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
diff --git a/remoting/resources/remoting_strings_pl.xtb b/remoting/resources/remoting_strings_pl.xtb index de823060..ee7ba34 100644 --- a/remoting/resources/remoting_strings_pl.xtb +++ b/remoting/resources/remoting_strings_pl.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Instrukcje</translation> <translation id="3776024066357219166">Sesja Pulpitu zdalnego Chrome została zakończona.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Nieprawidłowa domena właściciela hosta.</translation> <translation id="3931191050278863510">Host został zatrzymany.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Ostatnio online: <ph name="DATE" /></translation> <translation id="544077782045763683">Host został wyłączony.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Twój pulpit jest obecnie udostępniany użytkownikowi: <ph name="USER" />.</translation> <translation id="5750083143895808682">W tej chwili używasz konta <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Połącz ponownie</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Pomoc</translation> <translation id="6612717000975622067">Wyślij Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Udostępnij</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Wszelkie prawa zastrzeżone.</translation> <translation id="677755392401385740">Uruchomiono host dla użytkownika: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Pokaż/ukryj klawiaturę.</translation> <translation id="6963936880795878952">Połączenia z komputerem zdalnym są chwilowo zablokowane, bo ktoś próbował się z nim połączyć, podając nieprawidłowy kod PIN. Spróbuj ponownie później.</translation>
diff --git a/remoting/resources/remoting_strings_pt-BR.xtb b/remoting/resources/remoting_strings_pt-BR.xtb index e13ac26..e1865cdf 100644 --- a/remoting/resources/remoting_strings_pt-BR.xtb +++ b/remoting/resources/remoting_strings_pt-BR.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Off-line.</translation> <translation id="3695446226812920698">Saiba como</translation> <translation id="3776024066357219166">Sua sessão na Área de trabalho remota do Google Chrome foi encerrada.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domínio de proprietário de host inválido.</translation> <translation id="3931191050278863510">O host parou.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Última conexão: <ph name="DATE" /></translation> <translation id="544077782045763683">O host foi desligado.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Seu computador está sendo compartilhado com <ph name="USER" />.</translation> <translation id="5750083143895808682">Conectado como <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconectar</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Suporte</translation> <translation id="6612717000975622067">Enviar Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Compartilhar</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Todos os direitos reservados.</translation> <translation id="677755392401385740">Host iniciado para o usuário <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostrar/ocultar teclado</translation> <translation id="6963936880795878952">As conexões com o computador remoto estão temporariamente bloqueadas porque alguém estava tentando se conectar a ele com um PIN inválido. Tente novamente mais tarde.</translation>
diff --git a/remoting/resources/remoting_strings_pt-PT.xtb b/remoting/resources/remoting_strings_pt-PT.xtb index fe1812d..22721ed 100644 --- a/remoting/resources/remoting_strings_pt-PT.xtb +++ b/remoting/resources/remoting_strings_pt-PT.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Saiba como</translation> <translation id="3776024066357219166">A sessão do Ambiente de Trabalho Remoto do Chrome terminou.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Domínio do proprietário do anfitrião inválido.</translation> <translation id="3931191050278863510">O anfitrião parou.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Último acesso online: <ph name="DATE" /></translation> <translation id="544077782045763683">O anfitrião foi desligado.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">O seu ambiente de trabalho está a ser atualmente partilhado com <ph name="USER" />.</translation> <translation id="5750083143895808682">Com sessão iniciada como <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Restabelecer ligação</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Apoio técnico</translation> <translation id="6612717000975622067">Enviar Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Partilhar</translation> -<translation id="6681800064886881394">Copyright 2013 Google LLC Todos os Direitos Reservados.</translation> <translation id="677755392401385740">O anfitrião começou para o utilizador: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Mostrar/ocultar teclado.</translation> <translation id="6963936880795878952">As ligações ao computador remoto estão temporariamente bloqueadas porque alguém tentou estabelecer ligação com um PIN inválido. Tente novamente mais tarde.</translation>
diff --git a/remoting/resources/remoting_strings_ro.xtb b/remoting/resources/remoting_strings_ro.xtb index 4bd4628..5011857 100644 --- a/remoting/resources/remoting_strings_ro.xtb +++ b/remoting/resources/remoting_strings_ro.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Află cum</translation> <translation id="3776024066357219166">Sesiunea Desktop la distanță Chrome s-a încheiat.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Meniu</translation> <translation id="3905196214175737742">Domeniu nevalid pentru proprietarul gazdei.</translation> <translation id="3931191050278863510">Gazda s-a oprit.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Ultima dată online: <ph name="DATE" /></translation> <translation id="544077782045763683">Gazda a fost închisă.</translation> <translation id="5601503069213153581">Cod PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">În prezent, accesul la desktopul dvs. este permis pentru <ph name="USER" />.</translation> <translation id="5750083143895808682">Conectat(ă) ca <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Reconectează-te</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Asistență</translation> <translation id="6612717000975622067">Trimite Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Permite accesul</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Toate drepturile rezervate.</translation> <translation id="677755392401385740">Gazda a fost inițiată pentru utilizatorul: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Afișați/Ascundeți tastatura.</translation> <translation id="6963936880795878952">Conexiunile cu computerul la distanță sunt blocate temporar, deoarece cineva a încercat să se conecteze la acesta folosind un cod PIN nevalid. Încearcă din nou mai târziu.</translation>
diff --git a/remoting/resources/remoting_strings_ru.xtb b/remoting/resources/remoting_strings_ru.xtb index 299fddb..d1a4679 100644 --- a/remoting/resources/remoting_strings_ru.xtb +++ b/remoting/resources/remoting_strings_ru.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлайн.</translation> <translation id="3695446226812920698">Подробнее</translation> <translation id="3776024066357219166">Сеанс Удаленного рабочего стола Chrome завершен.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Меню</translation> <translation id="3905196214175737742">Владелец хоста использует недопустимый домен</translation> <translation id="3931191050278863510">Хост остановлен.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Последний раз в сети: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост отключен.</translation> <translation id="5601503069213153581">PIN-код</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">В настоящее время доступ к вашему рабочему столу предоставлен пользователю <ph name="USER" />.</translation> <translation id="5750083143895808682">Выполнен вход через аккаунт <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Подключиться повторно</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Помощь</translation> <translation id="6612717000975622067">Послать Ctrl+Alt+Del</translation> <translation id="6654753848497929428">Разрешить</translation> -<translation id="6681800064886881394">© Google Inc., 2013. Все права защищены.</translation> <translation id="677755392401385740">Запущен хост для пользователя: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Показать/скрыть клавиатуру</translation> <translation id="6963936880795878952">Подключения к удаленному компьютеру временно заблокированы, поскольку кто-то пытался установить соединение, используя неверный PIN-код. Повторите попытку позже.</translation>
diff --git a/remoting/resources/remoting_strings_si.xtb b/remoting/resources/remoting_strings_si.xtb index ad58888..06db24a 100644 --- a/remoting/resources/remoting_strings_si.xtb +++ b/remoting/resources/remoting_strings_si.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">නොබැඳි</translation> <translation id="3695446226812920698">කෙසේදැයි දැන ගන්න</translation> <translation id="3776024066357219166">ඔබේ Chrome දුරස්ථ වැඩබිම් වාරය අවසන් විය.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">මෙනුව</translation> <translation id="3905196214175737742">අවලංගු සත්කාරක හිමිකරු වසම.</translation> <translation id="3931191050278863510">ධාරකය නතර කළා.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">අවසානයට සබැඳිව සිටියේ: <ph name="DATE" /></translation> <translation id="544077782045763683">සත්කාරක වසා ඇත.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ඔබේ වැඩබිම දැනට <ph name="USER" /> සමඟ බෙදාගෙන ඇත.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> ලෙස පුරනය වී ඇත.</translation> <translation id="579702532610384533">නැවත සම්බන්ධ කරන්න</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">සහාය</translation> <translation id="6612717000975622067">Ctrl-Alt-Del යවන්න</translation> <translation id="6654753848497929428">බෙදා ගන්න</translation> -<translation id="6681800064886881394">ප්රකාශන හිමිකම 2013 Google Inc. සියලුම හිමිකම් ඇවිරිණි.</translation> <translation id="677755392401385740">මෙම පරිශීලක සඳහා සත්කාරක ඇරඹිණි: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">යතුරුපුවරඅව පෙන්වන්න/සඟවන්න.</translation> <translation id="6963936880795878952">යම් කෙනෙකු වලංගු නොවන PIN එකක් සමගින් එයට සම්බන්ධ වීමට උත්සාහ කරමින් සිටි නිසා දුරස්ථ පරිගණකය වෙත සම්බන්ධතා තාවකාලිකව අවහිර කර තිබේ. කරුණාකර පසුව නැවත උත්සාහ කරන්න.</translation>
diff --git a/remoting/resources/remoting_strings_sk.xtb b/remoting/resources/remoting_strings_sk.xtb index 11d289d..46ef12a5 100644 --- a/remoting/resources/remoting_strings_sk.xtb +++ b/remoting/resources/remoting_strings_sk.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Ako na to</translation> <translation id="3776024066357219166">Vaša relácia Vzdialenej plochy Chrome bola ukončená.</translation> -<translation id="3870154837782082782">Spoločnosť Google Inc.</translation> <translation id="3897092660631435901">Ponuka</translation> <translation id="3905196214175737742">Neplatná doména vlastníka hostiteľa</translation> <translation id="3931191050278863510">Hostenie bolo zastavené.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Naposledy online: <ph name="DATE" /></translation> <translation id="544077782045763683">Hostiteľ je vypnutý</translation> <translation id="5601503069213153581">Kód PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Pracovnú plochu momentálne zdieľate s používateľom <ph name="USER" />.</translation> <translation id="5750083143895808682">Prihlásený/-á ako <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Znova pripojiť</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Podpora</translation> <translation id="6612717000975622067">Odoslať akciu Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Zdieľať</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Všetky práva vyhradené.</translation> <translation id="677755392401385740">Hostiteľ bol spustený pre používateľa: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Zobraziť/skryť klávesnicu</translation> <translation id="6963936880795878952">Pripojenia k vzdialenému počítaču sú dočasne zablokované, pretože sa k nemu niekto snažil pripojiť pomocou neplatného kódu PIN. Skúste to znova neskôr.</translation>
diff --git a/remoting/resources/remoting_strings_sl.xtb b/remoting/resources/remoting_strings_sl.xtb index 2e5cb8d5..75e9c2b 100644 --- a/remoting/resources/remoting_strings_sl.xtb +++ b/remoting/resources/remoting_strings_sl.xtb
@@ -52,7 +52,6 @@ <translation id="369442766917958684">Brez povezave.</translation> <translation id="3695446226812920698">Oglejte si navodila</translation> <translation id="3776024066357219166">Seja Oddaljenega namizja za Chrome je končana.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Meni</translation> <translation id="3905196214175737742">Neveljavna domena lastnika gostitelja.</translation> <translation id="3931191050278863510">Gostitelj se je ustavil.</translation> @@ -91,6 +90,7 @@ <translation id="5397086374758643919">Odstranitveni program gostitelja za Oddaljeno namizje za Chrome</translation> <translation id="544077782045763683">Gostitelj se je zaustavil.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Vaše namizje je trenutno v skupni rabi z uporabnikom <ph name="USER" />.</translation> <translation id="5750083143895808682">Prijavljen kot <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Znova poveži</translation> @@ -106,7 +106,6 @@ <translation id="6542902059648396432">Prijava težave …</translation> <translation id="6612717000975622067">Pošlji Ctrl + Alt + Del</translation> <translation id="6654753848497929428">Skupna raba</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. Vse pravice pridržane.</translation> <translation id="677755392401385740">Gostitelj zagnan za uporabnika: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Pokaži/skrij tipkovnico.</translation> <translation id="6963936880795878952">Povezave z oddaljenim računalnikom so začasno onemogočene, ker je nekdo poskušal vzpostaviti povezavo z njim z neveljavno kodo PIN. Poskusite znova pozneje.</translation>
diff --git a/remoting/resources/remoting_strings_sq.xtb b/remoting/resources/remoting_strings_sq.xtb index 2b8cf63d..7f237e7 100644 --- a/remoting/resources/remoting_strings_sq.xtb +++ b/remoting/resources/remoting_strings_sq.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Jashtë linje.</translation> <translation id="3695446226812920698">Mëso se si</translation> <translation id="3776024066357219166">Sesioni yt i "Desktopit në distancë të Chrome" ka përfunduar.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Menyja</translation> <translation id="3905196214175737742">Domen i pavlefshëm i zotëruesit të strehimit.</translation> <translation id="3931191050278863510">Strehuesi ndaloi.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Për herë të fundit në linjë: <ph name="DATE" /></translation> <translation id="544077782045763683">Strehuesi ka ndërprerë punën</translation> <translation id="5601503069213153581">Kodi PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Desktopi yt është ndarë aktualisht me <ph name="USER" />.</translation> <translation id="5750083143895808682">Identifikuar si <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Rilidhe</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Mbështetja</translation> <translation id="6612717000975622067">Dërgo Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Ndaj</translation> -<translation id="6681800064886881394">Të drejtat e autorit 2013 të Google LLC Të gjitha të drejtat janë të rezervuara.</translation> <translation id="677755392401385740">Strehuesi u nis për përdoruesin: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Shfaq/fshih tastierën.</translation> <translation id="6963936880795878952">Lidhjet me kompjuterin në largësi janë të bllokuara përkohësisht sepse dikush po përpiqej të lidhej me të nëpërmjet një kodi PIN të pavlefshëm. Provo përsëri më vonë.</translation>
diff --git a/remoting/resources/remoting_strings_sr-Latn.xtb b/remoting/resources/remoting_strings_sr-Latn.xtb index 73c3686..185ceae 100644 --- a/remoting/resources/remoting_strings_sr-Latn.xtb +++ b/remoting/resources/remoting_strings_sr-Latn.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Oflajn je.</translation> <translation id="3695446226812920698">Saznajte kako</translation> <translation id="3776024066357219166">Sesija Chrome udaljenog računara je završena.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Meni</translation> <translation id="3905196214175737742">Domen vlasnika hosta je nevažeći.</translation> <translation id="3931191050278863510">Host je zaustavljen.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Poslednji put onlajn: <ph name="DATE" /></translation> <translation id="544077782045763683">Host se isključio.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Računar trenutno delite sa korisnikom <ph name="USER" />.</translation> <translation id="5750083143895808682">Prijavljeni ste kao <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Ponovo se poveži</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Podrška</translation> <translation id="6612717000975622067">Pošalji Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Deli</translation> -<translation id="6681800064886881394">Autorska prava 2013. Google LLC Sva prava su zadržana.</translation> <translation id="677755392401385740">Host je pokrenut za korisnika: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Prikaži/sakrij tastaturu.</translation> <translation id="6963936880795878952">Povezivanje sa udaljenim računarom je privremeno blokirano zato što je neko pokušavao da se poveže sa njim pomoću nevažećeg PIN-a. Probajte ponovo kasnije.</translation>
diff --git a/remoting/resources/remoting_strings_sr.xtb b/remoting/resources/remoting_strings_sr.xtb index 14b9d63..8513fd5 100644 --- a/remoting/resources/remoting_strings_sr.xtb +++ b/remoting/resources/remoting_strings_sr.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлајн је.</translation> <translation id="3695446226812920698">Сазнајте како</translation> <translation id="3776024066357219166">Сесија Chrome удаљеног рачунара је завршена.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Мени</translation> <translation id="3905196214175737742">Домен власника хоста је неважећи.</translation> <translation id="3931191050278863510">Хост је заустављен.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Последњи пут онлајн: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост се искључио.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Рачунар тренутно делите са корисником <ph name="USER" />.</translation> <translation id="5750083143895808682">Пријављени сте као <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Поново се повежи</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Подршка</translation> <translation id="6612717000975622067">Пошаљи Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Дели</translation> -<translation id="6681800064886881394">Ауторска права 2013. Google LLC Сва права су задржана.</translation> <translation id="677755392401385740">Хост је покренут за корисника: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Прикажи/сакриј тастатуру.</translation> <translation id="6963936880795878952">Повезивање са удаљеним рачунаром је привремено блокирано зато што је неко покушавао да се повеже са њим помоћу неважећег PIN-а. Пробајте поново касније.</translation>
diff --git a/remoting/resources/remoting_strings_sv.xtb b/remoting/resources/remoting_strings_sv.xtb index d097be8..25e01a5 100644 --- a/remoting/resources/remoting_strings_sv.xtb +++ b/remoting/resources/remoting_strings_sv.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Offline.</translation> <translation id="3695446226812920698">Läs mer</translation> <translation id="3776024066357219166">Chrome Remote Desktop-sessionen har avslutats.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Meny</translation> <translation id="3905196214175737742">Ogiltig domän för värdens ägare.</translation> <translation id="3931191050278863510">Värden stoppades.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Senast online: <ph name="DATE" /></translation> <translation id="544077782045763683">Värdenheten har stängts av.</translation> <translation id="5601503069213153581">Pinkod</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Ditt skrivbord delas just nu med <ph name="USER" />.</translation> <translation id="5750083143895808682">Inloggad som <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Återanslut</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Support</translation> <translation id="6612717000975622067">Skicka Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Dela</translation> -<translation id="6681800064886881394">Upphovsrätt 2013 Google LLC Med ensamrätt.</translation> <translation id="677755392401385740">Värd startad för användaren: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Visa/dölj tangentbordet.</translation> <translation id="6963936880795878952">Anslutningar till fjärrdatorn är tillfälligt blockerade eftersom någon har försökt ansluta till fjärrdatorn med en ogiltig pinkod. Försök igen senare.</translation>
diff --git a/remoting/resources/remoting_strings_sw.xtb b/remoting/resources/remoting_strings_sw.xtb index 0c135bf..a84cf0c 100644 --- a/remoting/resources/remoting_strings_sw.xtb +++ b/remoting/resources/remoting_strings_sw.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Nje ya mtandao.</translation> <translation id="3695446226812920698">Pata maelezo</translation> <translation id="3776024066357219166">Kipindi chako cha Eneo-kazi la Mbali la Chrome kimekamilika.</translation> -<translation id="3870154837782082782">Google LLC</translation> <translation id="3897092660631435901">Menyu</translation> <translation id="3905196214175737742">Kikoa cha mmiliki wa seva pangishi si sahihi.</translation> <translation id="3931191050278863510">Mpangishi amesimamishwa.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Mara ya mwisho kuwa mtandaoni: <ph name="DATE" /></translation> <translation id="544077782045763683">Pangishi imezima.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Kwa sasa kompyuta yako inashirikiwa na <ph name="USER" />.</translation> <translation id="5750083143895808682">Umeingia katika akaunti ukitumia <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Unganisha upya</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Usaidizi</translation> <translation id="6612717000975622067">Tuma Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Shiriki</translation> -<translation id="6681800064886881394">Hakimiliki 2013 Google Inc. Haki Zote Zimehifadhiwa.</translation> <translation id="677755392401385740">Seva pangishi ya mtumiaji: <ph name="HOST_USERNAME" /> Imeanza.</translation> <translation id="6939719207673461467">Onyesha/ficha kibodi.</translation> <translation id="6963936880795878952">Miunganisho ya kompyuta ya mbali imezuiwa kwa muda kwa sababu mtu fulani alikuwa akijaribu kuifikia kwa kutumia PIN isiyo sahihi. Tafadhali jaribu tena baadaye.</translation>
diff --git a/remoting/resources/remoting_strings_ta.xtb b/remoting/resources/remoting_strings_ta.xtb index 6b1ffd9..311cf9ae2 100644 --- a/remoting/resources/remoting_strings_ta.xtb +++ b/remoting/resources/remoting_strings_ta.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ஆஃப்லைன்.</translation> <translation id="3695446226812920698">எப்படி என அறிக</translation> <translation id="3776024066357219166">உங்கள் Chrome தொலைநிலை டெஸ்க்டாப் அமர்வு முடிந்தது.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">மெனு</translation> <translation id="3905196214175737742">தவறான ஹோஸ்ட் உரிமையாளர் டொமைன்.</translation> <translation id="3931191050278863510">ஹோஸ்ட் நிறுத்தப்பட்டது.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">கடைசியாக ஆன்லைனில் இருந்தது: <ph name="DATE" /></translation> <translation id="544077782045763683">ஹோஸ்ட் இயங்கவில்லை.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">தற்போது உங்கள் டெஸ்க்டாப் <ph name="USER" /> உடன் பகிரப்படுகிறது.</translation> <translation id="5750083143895808682">உள்நுழைந்துள்ள முகவரி: <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">மீண்டும் இணை</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">ஆதரவு</translation> <translation id="6612717000975622067">Ctrl-Alt-Del ஐ அனுப்பு</translation> <translation id="6654753848497929428">பகிர்</translation> -<translation id="6681800064886881394">பதிப்புரிமை 2013 Google Inc. அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டவை.</translation> <translation id="677755392401385740">ஹோஸ்ட் தொடங்கிய பயனர்: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">விசைப்பலகையைக் காட்டு/மறை.</translation> <translation id="6963936880795878952">யாரோ ஒருவர் தவறான பின்னைப் பயன்படுத்தித் தொலைநிலையில் இயங்கக்கூடிய கம்ப்யூட்டரை இணைக்க முயன்றதால், அதற்கான இணைப்புகள் தற்காலிகமாகத் தடுக்கப்பட்டுள்ளன. பிறகு முயலவும்.</translation>
diff --git a/remoting/resources/remoting_strings_te.xtb b/remoting/resources/remoting_strings_te.xtb index 087893b..5ae0929 100644 --- a/remoting/resources/remoting_strings_te.xtb +++ b/remoting/resources/remoting_strings_te.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ఆఫ్లైన్లో ఉన్నారు.</translation> <translation id="3695446226812920698">ఎలాగో తెలుసుకోండి</translation> <translation id="3776024066357219166">మీ Chrome రిమోట్ డెస్క్టాప్ సెషన్ ముగిసింది.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">మెనూ</translation> <translation id="3905196214175737742">చెల్లని హోస్ట్ యజమాని డొమైన్.</translation> <translation id="3931191050278863510">హోస్ట్ ఆగిపోయింది.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">చివరిగా ఆన్లైన్లో ఉన్నది: <ph name="DATE" /></translation> <translation id="544077782045763683">హోస్ట్ షట్డౌన్ అయ్యింది.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">మీ డెస్క్టాప్ ప్రస్తుతం <ph name="USER" />తో షేర్ చేయబడింది.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేసారు.</translation> <translation id="579702532610384533">మళ్ళీ కనెక్ట్ చేయి</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">మద్దతు</translation> <translation id="6612717000975622067">Ctrl-Alt-Delని పంపు</translation> <translation id="6654753848497929428">షేర్ చేయి</translation> -<translation id="6681800064886881394">కాపీరైట్ 2013 Google Inc. అన్ని హక్కులు రిజర్వ్ చేయబడ్డాయి.</translation> <translation id="677755392401385740">ఈ వినియోగదారు కోసం హోస్ట్ ప్రారంభించబడింది: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">కీబోర్డ్ని చూపు/దాచు.</translation> <translation id="6963936880795878952">ఒకరు చెల్లని PINతో రిమోట్ కంప్యూటర్కు కనెక్ట్ చేయడానికి ప్రయత్నిస్తున్నందున, దీనికి కనెక్షన్లు తాత్కాలికంగా బ్లాక్ చేయబడ్డాయి. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి.</translation>
diff --git a/remoting/resources/remoting_strings_th.xtb b/remoting/resources/remoting_strings_th.xtb index 9a3db45..2726d45 100644 --- a/remoting/resources/remoting_strings_th.xtb +++ b/remoting/resources/remoting_strings_th.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">ออฟไลน์</translation> <translation id="3695446226812920698">เรียนรู้วิธี</translation> <translation id="3776024066357219166">เซสชัน Chrome Remote Desktop ของคุณสิ้นสุดแล้ว</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">เมนู</translation> <translation id="3905196214175737742">โดเมนเจ้าของโฮสต์ไม่ถูกต้อง</translation> <translation id="3931191050278863510">หยุดโฮสต์แล้ว</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">ออนไลน์ครั้งล่าสุด: <ph name="DATE" /></translation> <translation id="544077782045763683">โฮสต์ปิดตัวลงแล้ว</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">ขณะนี้มีการแชร์เดสก์ท็อปของคุณกับ <ph name="USER" /></translation> <translation id="5750083143895808682">ลงชื่อเข้าใช้ด้วย <ph name="EMAIL_ADDRESS" /></translation> <translation id="579702532610384533">เชื่อมต่อใหม่</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">การสนับสนุน</translation> <translation id="6612717000975622067">ส่ง Ctrl-Alt-Del</translation> <translation id="6654753848497929428">แชร์</translation> -<translation id="6681800064886881394">ลิขสิทธิ์ 2013 Google Inc. สงวนลิขสิทธิ์</translation> <translation id="677755392401385740">โฮสต์เริ่มใช้งานสำหรับผู้ใช้: <ph name="HOST_USERNAME" /></translation> <translation id="6939719207673461467">แสดง/ซ่อนแป้นพิมพ์</translation> <translation id="6963936880795878952">การเชื่อมต่อกับคอมพิวเตอร์ระยะไกลถูกบล็อกไว้ชั่วคราว เนื่องจากมีผู้พยายามเชื่อมต่อกับคอมพิวเตอร์ดังกล่าวโดยใช้ PIN ที่ไม่ถูกต้อง โปรดลองอีกครั้งในภายหลัง</translation>
diff --git a/remoting/resources/remoting_strings_tr.xtb b/remoting/resources/remoting_strings_tr.xtb index 34317f06..844ddd12 100644 --- a/remoting/resources/remoting_strings_tr.xtb +++ b/remoting/resources/remoting_strings_tr.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Çevrimdışı.</translation> <translation id="3695446226812920698">Nasıl yapacağınızı öğrenin</translation> <translation id="3776024066357219166">Chrome Uzaktan Masaüstü oturumunuz sonlandı.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menü</translation> <translation id="3905196214175737742">Ana makinenin sahip alan adı geçersiz.</translation> <translation id="3931191050278863510">Ana makine durdu.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Son çevrimiçi olduğu tarih: <ph name="DATE" /></translation> <translation id="544077782045763683">Ana makine kapatıldı.</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Masaüstünüz şu anda <ph name="USER" /> ile paylaşılıyor.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> olarak oturum açtınız.</translation> <translation id="579702532610384533">Yeniden bağlan</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Destek</translation> <translation id="6612717000975622067">Ctrl-Alt-Del Gönder</translation> <translation id="6654753848497929428">Paylaş</translation> -<translation id="6681800064886881394">Telif Hakkı 2013 Google Inc. Tüm Hakları Saklıdır.</translation> <translation id="677755392401385740">Ana makine bu kullanıcı için başlatıldı: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Klavyeyi göster/gizle</translation> <translation id="6963936880795878952">Bir kullanıcı geçersiz PIN ile bağlanmaya çalıştığından uzak bilgisayara yapılan bağlantılar geçici olarak engellenmiştir. Lütfen daha sonra tekrar deneyin.</translation>
diff --git a/remoting/resources/remoting_strings_uk.xtb b/remoting/resources/remoting_strings_uk.xtb index 22eabf61..0e111d8 100644 --- a/remoting/resources/remoting_strings_uk.xtb +++ b/remoting/resources/remoting_strings_uk.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Офлайн.</translation> <translation id="3695446226812920698">Докладніше</translation> <translation id="3776024066357219166">Сеанс програми Віддалене керування Chrome закінчено.</translation> -<translation id="3870154837782082782">Google LLC.</translation> <translation id="3897092660631435901">Меню</translation> <translation id="3905196214175737742">Недійсний домен власника хосту.</translation> <translation id="3931191050278863510">Хост не працює.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Востаннє онлайн: <ph name="DATE" /></translation> <translation id="544077782045763683">Хост завершив роботу.</translation> <translation id="5601503069213153581">PIN-код</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Зараз доступ до цього комп’ютера має <ph name="USER" />.</translation> <translation id="5750083143895808682">Ви ввійшли як <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">З'єднати повторно</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Підтримка</translation> <translation id="6612717000975622067">Надіслати команду Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Надати доступ</translation> -<translation id="6681800064886881394">Авторське право 2013 Google LLC. Усі права захищено.</translation> <translation id="677755392401385740">Запущено хост для користувача <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Показати/сховати клавіатуру.</translation> <translation id="6963936880795878952">З’єднання з віддаленим комп’ютером тимчасово заблоковано, оскільки хтось намагався під’єднатися до нього, використовуючи недійсний PIN-код. Повторіть спробу пізніше.</translation>
diff --git a/remoting/resources/remoting_strings_ur.xtb b/remoting/resources/remoting_strings_ur.xtb index bcda7c5..1748540 100644 --- a/remoting/resources/remoting_strings_ur.xtb +++ b/remoting/resources/remoting_strings_ur.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">آف لائن۔</translation> <translation id="3695446226812920698">طریقہ جانیں</translation> <translation id="3776024066357219166">آپ کے Chrome ریموٹ ڈیسک ٹاپ کا سیشن ختم ہو گیا ہے۔</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">مینو</translation> <translation id="3905196214175737742">میزبان مالک کا غلط ڈومین</translation> <translation id="3931191050278863510">میزبان بند ہوگیا۔</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">آخری بار آن لائن دیکھا گيا: <ph name="DATE" /></translation> <translation id="544077782045763683">میزبان نے بند کر دیا ہے۔</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">آپ کا ڈیسک ٹاپ فی الحال <ph name="USER" /> کے ساتھ اشتراک کردہ ہے۔</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> کے بطور سائن ان کردہ۔</translation> <translation id="579702532610384533">دوبارہ منسلک ہوں</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">سپورٹ</translation> <translation id="6612717000975622067">Ctrl-Alt-Del بھیجیں</translation> <translation id="6654753848497929428">اشتراک کریں</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. جملہ حقوق محفوظ۔</translation> <translation id="677755392401385740">میزبان صارف کیلئے شروع ہوگیا ہے: <ph name="HOST_USERNAME" />۔</translation> <translation id="6939719207673461467">کی بورڈ دکھائیں / چھپائیں۔</translation> <translation id="6963936880795878952">ریموٹ کمپیوٹر کے کنکشنز عارضی طور پر مسدود کر دیے گئے ہیں کیونکہ کوئی شخص غلط PIN سے اس سے منسلک ہونے کی کوشش کر رہا تھا۔ براہ کرم بعد میں دوبارہ کوشش کریں۔</translation>
diff --git a/remoting/resources/remoting_strings_uz.xtb b/remoting/resources/remoting_strings_uz.xtb index fd60061..cd32862 100644 --- a/remoting/resources/remoting_strings_uz.xtb +++ b/remoting/resources/remoting_strings_uz.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Oflayn.</translation> <translation id="3695446226812920698">Batafsil</translation> <translation id="3776024066357219166">Chrome masofaviy ish stoli seansi yakunlandi.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menyu</translation> <translation id="3905196214175737742">Host egasi noto‘g‘ri domendan foydalanmoqda</translation> <translation id="3931191050278863510">Host to‘xtadi.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Oxirgi marta onlayn: <ph name="DATE" /></translation> <translation id="544077782045763683">Host o‘chib qoldi.</translation> <translation id="5601503069213153581">PIN kod</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Ayni vaqtda ish stolingizga ulanish ruxsati <ph name="USER" /> foydalanuvchisiga berilgan.</translation> <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> nomidan kirildi.</translation> <translation id="579702532610384533">Qaytadan ulanish</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Yordam</translation> <translation id="6612717000975622067">Ctrl-Alt-Del yuborish</translation> <translation id="6654753848497929428">Ruxsat</translation> -<translation id="6681800064886881394">© Google Inc., 2013. Barcha huquqlar himoyalangan.</translation> <translation id="677755392401385740"><ph name="HOST_USERNAME" /> uchun host ishga tushdi.</translation> <translation id="6939719207673461467">Klaviaturani ko‘rsatish/yashirish</translation> <translation id="6963936880795878952">Masofaviy kompyuterga ulanishlar vaqtincha taqiqlangan, chunki kimdir unga noto‘g‘ri PIN kod orqali ulanib ko‘rgan. Keyinroq qayta urinib ko‘ring.</translation>
diff --git a/remoting/resources/remoting_strings_vi.xtb b/remoting/resources/remoting_strings_vi.xtb index 159c6ae..7f13e2c 100644 --- a/remoting/resources/remoting_strings_vi.xtb +++ b/remoting/resources/remoting_strings_vi.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Ngoại tuyến.</translation> <translation id="3695446226812920698">Tìm hiểu cách thức</translation> <translation id="3776024066357219166">Phiên Chrome Remote Desktop của bạn đã kết thúc.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Menu</translation> <translation id="3905196214175737742">Miền của chủ sở hữu máy chủ không hợp lệ.</translation> <translation id="3931191050278863510">Máy chủ đã dừng lại.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Lần trực tuyến gần đây nhất: <ph name="DATE" /></translation> <translation id="544077782045763683">Máy chủ đã tắt.</translation> <translation id="5601503069213153581">Mã PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">Máy tính của bạn hiện đang được chia sẻ với <ph name="USER" />.</translation> <translation id="5750083143895808682">Đã đăng nhập bằng địa chỉ <ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Kết nối lại</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Hỗ trợ</translation> <translation id="6612717000975622067">Gửi Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Chia sẻ</translation> -<translation id="6681800064886881394">Bản quyền 2013 Google Inc. Mọi quyền được bảo lưu.</translation> <translation id="677755392401385740">Máy chủ đã khởi động cho người dùng: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Hiển thị / ẩn bàn phím.</translation> <translation id="6963936880795878952">Kết nối với máy tính từ xa tạm thời bị chặn vì ai đó đang cố gắng kết nối với máy tính đó bằng mã PIN không hợp lệ. Vui lòng thử lại sau.</translation>
diff --git a/remoting/resources/remoting_strings_zh-CN.xtb b/remoting/resources/remoting_strings_zh-CN.xtb index 417b29f..12550921 100644 --- a/remoting/resources/remoting_strings_zh-CN.xtb +++ b/remoting/resources/remoting_strings_zh-CN.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">离线。</translation> <translation id="3695446226812920698">如何解决</translation> <translation id="3776024066357219166">您的 Chrome 远程桌面会话已结束。</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">菜单</translation> <translation id="3905196214175737742">主机所有者所在网域无效。</translation> <translation id="3931191050278863510">主机已停止运行。</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">上次在线日期:<ph name="DATE" /></translation> <translation id="544077782045763683">主机已关机。</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">您目前正与 <ph name="USER" /> 共享您的桌面。</translation> <translation id="5750083143895808682">以 <ph name="EMAIL_ADDRESS" /> 的身份登录。</translation> <translation id="579702532610384533">重新连接</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">支持</translation> <translation id="6612717000975622067">发送Ctrl-Alt-Del</translation> <translation id="6654753848497929428">共享</translation> -<translation id="6681800064886881394">版权所有2013 Google Inc。保留所有权利。</translation> <translation id="677755392401385740">已为用户<ph name="HOST_USERNAME" />启动主机。</translation> <translation id="6939719207673461467">显示/隐藏键盘。</translation> <translation id="6963936880795878952">与远程计算机的连接已被暂时阻止,因为有人试图使用无效的 PIN 码连接到该计算机。请稍后重试。</translation>
diff --git a/remoting/resources/remoting_strings_zh-HK.xtb b/remoting/resources/remoting_strings_zh-HK.xtb index ce702bf..a606291c 100644 --- a/remoting/resources/remoting_strings_zh-HK.xtb +++ b/remoting/resources/remoting_strings_zh-HK.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">離線。</translation> <translation id="3695446226812920698">瞭解詳情</translation> <translation id="3776024066357219166">您的 Chrome 遠端桌面工作階段已結束。</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">選單</translation> <translation id="3905196214175737742">主機擁有者網域無效。</translation> <translation id="3931191050278863510">主機已停止。</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">上次上網日期:<ph name="DATE" /></translation> <translation id="544077782045763683">主機已關閉。</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">您目前正與 <ph name="USER" /> 共用桌面電腦。</translation> <translation id="5750083143895808682">以 <ph name="EMAIL_ADDRESS" /> 嘅身分登入。</translation> <translation id="579702532610384533">重新連線</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">支援</translation> <translation id="6612717000975622067">傳送 Ctrl-Alt-Del</translation> <translation id="6654753848497929428">共用</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. 保留所有權利。</translation> <translation id="677755392401385740">已為下列使用者啟動主機:<ph name="HOST_USERNAME" />`</translation> <translation id="6939719207673461467">顯示/隱藏鍵盤。</translation> <translation id="6963936880795878952">由於有人嘗試使用無效的 PIN 連線至遠端電腦,因此系統暫時封鎖您的連線,請稍後再試。</translation>
diff --git a/remoting/resources/remoting_strings_zh-TW.xtb b/remoting/resources/remoting_strings_zh-TW.xtb index 786aac53..923ed5f 100644 --- a/remoting/resources/remoting_strings_zh-TW.xtb +++ b/remoting/resources/remoting_strings_zh-TW.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">離線。</translation> <translation id="3695446226812920698">操作說明</translation> <translation id="3776024066357219166">你的 Chrome 遠端桌面工作階段已結束。</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">選單</translation> <translation id="3905196214175737742">主機擁有者網域無效。</translation> <translation id="3931191050278863510">主機已停止。</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">上次上線日期:<ph name="DATE" /></translation> <translation id="544077782045763683">主機已關閉。</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5690427481109656848">Google LLC</translation> <translation id="5708869785009007625">你目前正與 <ph name="USER" /> 共用電腦。</translation> <translation id="5750083143895808682">目前登入的帳戶是 <ph name="EMAIL_ADDRESS" />。</translation> <translation id="579702532610384533">重新連線</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">支援</translation> <translation id="6612717000975622067">傳送 Ctrl-Alt-Del</translation> <translation id="6654753848497929428">共用</translation> -<translation id="6681800064886881394">Copyright 2013 Google Inc. 保留所有權利。</translation> <translation id="677755392401385740">已為下列使用者啟動主機:<ph name="HOST_USERNAME" />。</translation> <translation id="6939719207673461467">顯示/隱藏鍵盤。</translation> <translation id="6963936880795878952">有人嘗試使用無效的 PIN 連線至遠端電腦,因此您的連線暫時遭到封鎖。請稍後再試。</translation>
diff --git a/remoting/resources/remoting_strings_zu.xtb b/remoting/resources/remoting_strings_zu.xtb index 88c8482..42f13d3 100644 --- a/remoting/resources/remoting_strings_zu.xtb +++ b/remoting/resources/remoting_strings_zu.xtb
@@ -54,7 +54,6 @@ <translation id="369442766917958684">Okungaxhunyiwe kwi-inthanethi.</translation> <translation id="3695446226812920698">Funda ukuthi kanjani</translation> <translation id="3776024066357219166">Iseshini yakho yedeskithophu ye-Chrome ekude iphelile.</translation> -<translation id="3870154837782082782">Google Inc.</translation> <translation id="3897092660631435901">Imenyu</translation> <translation id="3905196214175737742">Isizinda somnikazi wosokhaya asivumelekile.</translation> <translation id="3931191050278863510">Usokhaya uvinjiwe.</translation> @@ -99,6 +98,7 @@ <translation id="5419418238395129586">Ukugcina ku-inthanethi: <ph name="DATE" /></translation> <translation id="544077782045763683">Usokhaya ucishile.</translation> <translation id="5601503069213153581">Iphinikhodi</translation> +<translation id="5690427481109656848">I-Google LLC</translation> <translation id="5708869785009007625">Ideskithophu yakho okwamanje yabiwa no-<ph name="USER" />.</translation> <translation id="5750083143895808682">Ingene ngemvume njengo-<ph name="EMAIL_ADDRESS" />.</translation> <translation id="579702532610384533">Phinda uxhumeke</translation> @@ -118,7 +118,6 @@ <translation id="6583902294974160967">Usekelo</translation> <translation id="6612717000975622067">Thumela u-Ctrl-Alt-Del</translation> <translation id="6654753848497929428">Yaba</translation> -<translation id="6681800064886881394">Copyright 2014 Google Inc. Wonke amalungelo agciniwe.</translation> <translation id="677755392401385740">Umsingathi uqalelwe umsebenzisi: <ph name="HOST_USERNAME" />.</translation> <translation id="6939719207673461467">Bonisa/fihla ikhibhodi.</translation> <translation id="6963936880795878952">Ukuxhumeka kukhompuyutha ekude manje kuvinjwe okwesikhashana ngoba umuntu othole ubekade ezama ukuxhumeka kuyo ngephinikhodi engavumelekile. Sicela uzame futhi emuva kwesikhathi.</translation>
diff --git a/sandbox/mac/sandbox_logging.cc b/sandbox/mac/sandbox_logging.cc index 7f30c2c..702224d 100644 --- a/sandbox/mac/sandbox_logging.cc +++ b/sandbox/mac/sandbox_logging.cc
@@ -104,10 +104,8 @@ asl_set(asl_message.get(), ASL_KEY_MSG, message); asl_send(asl_client.get(), asl_message.get()); - if (__builtin_available(macOS 10.11, *)) { - if (level == Level::FATAL) { - abort_report_np(message); - } + if (level == Level::FATAL) { + abort_report_np(message); } }
diff --git a/sandbox/policy/BUILD.gn b/sandbox/policy/BUILD.gn index 87b84ff..5b94f20 100644 --- a/sandbox/policy/BUILD.gn +++ b/sandbox/policy/BUILD.gn
@@ -129,7 +129,7 @@ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.logger", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.mediacodec", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net", - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.netstack", + "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net.interfaces", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.scenic", ]
diff --git a/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc b/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc index d3d3949..23c5bca9 100644 --- a/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc +++ b/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc
@@ -15,7 +15,7 @@ #include <fuchsia/logger/cpp/fidl.h> #include <fuchsia/mediacodec/cpp/fidl.h> #include <fuchsia/net/cpp/fidl.h> -#include <fuchsia/netstack/cpp/fidl.h> +#include <fuchsia/net/interfaces/cpp/fidl.h> #include <fuchsia/sysmem/cpp/fidl.h> #include <fuchsia/ui/scenic/cpp/fidl.h> #include <lib/sys/cpp/component_context.h> @@ -90,7 +90,7 @@ constexpr SandboxConfig kNetworkConfig = { base::make_span((const char* const[]){ fuchsia::net::NameLookup::Name_, - fuchsia::netstack::Netstack::Name_, + fuchsia::net::interfaces::State::Name_, "fuchsia.posix.socket.Provider", }), kProvideSslConfig,
diff --git a/sandbox/policy/mac/common.sb b/sandbox/policy/mac/common.sb index 1d71672..84c7e99 100644 --- a/sandbox/policy/mac/common.sb +++ b/sandbox/policy/mac/common.sb
@@ -30,9 +30,6 @@ (define filter-syscalls "FILTER_SYSCALLS") (define filter-syscalls-debug "FILTER_SYSCALLS_DEBUG") -; Backwards compatibility for 10.10. -(if (not (defined? 'path)) - (define path literal)) ; Backwards compatibility for 10.11. (if (not (defined? 'iokit-registry-entry-class)) (define iokit-registry-entry-class iokit-user-client-class))
diff --git a/sandbox/policy/mac/gpu.sb b/sandbox/policy/mac/gpu.sb index c02bbd5..dc0cd5f609 100644 --- a/sandbox/policy/mac/gpu.sb +++ b/sandbox/policy/mac/gpu.sb
@@ -19,13 +19,10 @@ (define disable-sandbox-denial-logging "DISABLE_SANDBOX_DENIAL_LOGGING") (define enable-logging "ENABLE_LOGGING") (define homedir-as-literal "USER_HOMEDIR_AS_LITERAL") -(define elcap-or-later "ELCAP_OR_LATER") (define macos-1013 "MACOS_1013") (define field-trial-server-name "FIELD_TRIAL_SERVER_NAME") -; Backwards compatibility for 10.9 -(if (not (defined? 'path)) - (define path literal)) +; Backwards compatibility for 10.11 (if (not (defined? 'iokit-registry-entry-class)) (define iokit-registry-entry-class iokit-user-client-class)) @@ -33,10 +30,6 @@ (define (user-homedir-path subpath) (string-append (param homedir-as-literal) subpath)) -; (path) is not supported until 10.10. -; TODO(kerrnel): remove this when 10.9 is no longer supported. -(define (path x) (literal x)) - ; DISABLE_SANDBOX_DENIAL_LOGGING turns off log messages in the system log. (if (param-true? disable-sandbox-denial-logging) (deny default (with no-log)) @@ -85,8 +78,7 @@ (iokit-user-client-class "IOSurfaceSendRight")) ; https://crbug.com/515280 -(if (param-true? elcap-or-later) - (allow file-read* (subpath "/System/Library/Extensions"))) +(allow file-read* (subpath "/System/Library/Extensions")) ; Needed for VideoToolbox usage - https://crbug.com/767037 (allow mach-lookup (global-name "com.apple.coremedia.videodecoder"))
diff --git a/sandbox/policy/mac/sandbox_mac.h b/sandbox/policy/mac/sandbox_mac.h index 864825b4..6d10a37 100644 --- a/sandbox/policy/mac/sandbox_mac.h +++ b/sandbox/policy/mac/sandbox_mac.h
@@ -56,7 +56,6 @@ static const char* kSandboxOSVersion; // TODO(kerrnel): this is only for the legacy sandbox. - static const char* kSandboxElCapOrLater; static const char* kSandboxMacOS1013; static const char* kSandboxFieldTrialSeverName;
diff --git a/sandbox/policy/mac/sandbox_mac.mm b/sandbox/policy/mac/sandbox_mac.mm index 9a175edb..9d2de6d6 100644 --- a/sandbox/policy/mac/sandbox_mac.mm +++ b/sandbox/policy/mac/sandbox_mac.mm
@@ -70,7 +70,6 @@ const char* SandboxMac::kSandboxHomedirAsLiteral = "USER_HOMEDIR_AS_LITERAL"; const char* SandboxMac::kSandboxLoggingPathAsLiteral = "LOG_FILE_PATH"; const char* SandboxMac::kSandboxOSVersion = "OS_VERSION"; -const char* SandboxMac::kSandboxElCapOrLater = "ELCAP_OR_LATER"; const char* SandboxMac::kSandboxMacOS1013 = "MACOS_1013"; const char* SandboxMac::kSandboxFieldTrialSeverName = "FIELD_TRIAL_SERVER_NAME"; const char* SandboxMac::kSandboxBundleVersionPath = "BUNDLE_VERSION_PATH"; @@ -192,10 +191,6 @@ return false; } - bool elcap_or_later = base::mac::IsAtLeastOS10_11(); - if (!compiler.InsertBooleanParam(kSandboxElCapOrLater, elcap_or_later)) - return false; - bool macos_1013 = base::mac::IsOS10_13(); if (!compiler.InsertBooleanParam(kSandboxMacOS1013, macos_1013)) return false;
diff --git a/services/device/public/mojom/fingerprint.mojom b/services/device/public/mojom/fingerprint.mojom index cb72cb9b9..699d6610 100644 --- a/services/device/public/mojom/fingerprint.mojom +++ b/services/device/public/mojom/fingerprint.mojom
@@ -6,6 +6,9 @@ // Note: this needs to stay in sync with // src/platform2/system_api/dbus/biod/constants.proto in the ChromeOS repro. +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused (See FingerprintScanResult metrics +// enum). enum ScanResult { SUCCESS = 0, PARTIAL = 1,
diff --git a/services/device/usb/usb_device_handle_win.cc b/services/device/usb/usb_device_handle_win.cc index 1d94b7dc..9903ffeeb 100644 --- a/services/device/usb/usb_device_handle_win.cc +++ b/services/device/usb/usb_device_handle_win.cc
@@ -99,7 +99,7 @@ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::WILL_BLOCK); if (!WinUsb_ResetPipe(handle, pipeId)) { - USB_PLOG(DEBUG) << "Failed to reset pipe " << static_cast<int>(pipeId); + USB_PLOG(DEBUG) << "Failed to reset pipe " << int{pipeId}; return false; } @@ -111,8 +111,7 @@ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::WILL_BLOCK); if (!WinUsb_SetCurrentAlternateSetting(handle, settingNumber)) { - USB_PLOG(DEBUG) << "Failed to set alternate setting " - << static_cast<int>(settingNumber); + USB_PLOG(DEBUG) << "Failed to set alternate setting " << int{settingNumber}; return false; } @@ -203,7 +202,6 @@ return; device_->HandleClosed(this); - device_ = nullptr; if (hub_handle_.IsValid()) { CancelIo(hub_handle_.Get()); @@ -226,6 +224,8 @@ scoped_refptr<UsbDeviceHandleWin> self(this); while (!requests_.empty()) requests_.begin()->second->Abort(); + + device_ = nullptr; } void UsbDeviceHandleWin::SetConfiguration(int configuration_value, @@ -587,15 +587,31 @@ interface_info.info = interface.get(); RegisterEndpoints(interface.get(), *alternate); - if (interface->interface_number == interface->first_interface) { - auto it = device_->functions().find(interface->interface_number); - if (it != device_->functions().end()) { - interface_info.function_driver = it->second.driver; - interface_info.function_path = it->second.path; + if (device_->driver_type() == UsbDeviceWin::DriverType::kComposite) { + if (interface->interface_number == interface->first_interface) { + auto it = device_->functions().find(interface->interface_number); + if (it != device_->functions().end()) { + interface_info.function_driver = it->second.driver; + interface_info.function_path = it->second.path; + } } } } } + + if (device_->driver_type() == UsbDeviceWin::DriverType::kWinUSB) { + // If this is not a composite device we can assume UsbServiceWin has + // set up the device with a single function entry no matter how many + // functions the device appears to have based on its descriptors. + DCHECK_EQ(1u, device_->functions().size()); + DCHECK(base::Contains(device_->functions(), 0)); + const UsbDeviceWin::FunctionInfo& function_info = + device_->functions().find(0)->second; + DCHECK(base::Contains(interfaces_, 0)); + Interface& interface_info = interfaces_[0]; + interface_info.function_driver = function_info.driver; + interface_info.function_path = function_info.path; + } } UsbDeviceHandleWin::UsbDeviceHandleWin(scoped_refptr<UsbDeviceWin> device, @@ -660,12 +676,8 @@ return; } - if (interface->info->first_interface != interface->info->interface_number) { - auto first_interface_it = - interfaces_.find(interface->info->first_interface); - DCHECK(first_interface_it != interfaces_.end()); - Interface* first_interface = &first_interface_it->second; - + Interface* first_interface = GetFirstInterfaceForFunction(interface); + if (first_interface != interface) { OpenInterfaceHandle( first_interface, base::BindOnce(&UsbDeviceHandleWin::OnFirstInterfaceOpened, @@ -684,6 +696,28 @@ OnFunctionAvailable(std::move(callback), interface); } +UsbDeviceHandleWin::Interface* UsbDeviceHandleWin::GetFirstInterfaceForFunction( + Interface* interface) { + switch (device_->driver_type()) { + case UsbDeviceWin::DriverType::kUnsupported: + NOTREACHED(); + return nullptr; + case UsbDeviceWin::DriverType::kWinUSB: + // If WinUSB has been loaded for a composite device then all of its + // interfaces must be treated as a single function. + DCHECK(base::Contains(interfaces_, 0)); + return &interfaces_[0]; + case UsbDeviceWin::DriverType::kComposite: { + if (interface->info->interface_number == interface->info->first_interface) + return interface; + + auto it = interfaces_.find(interface->info->first_interface); + DCHECK(it != interfaces_.end()); + return &it->second; + } + } +} + void UsbDeviceHandleWin::OnFunctionAvailable(OpenInterfaceCallback callback, Interface* interface) { base::ScopedClosureRunner run_callback( @@ -694,16 +728,14 @@ if (!base::EqualsCaseInsensitiveASCII(interface->function_driver, kWinUsbDriverName)) { - USB_LOG(ERROR) << "Interface " - << static_cast<int>(interface->info->interface_number) + USB_LOG(ERROR) << "Interface " << int{interface->info->interface_number} << " uses driver \"" << interface->function_driver << "\" instead of WinUSB."; return; } if (interface->function_path.empty()) { - USB_LOG(ERROR) << "Interface " - << static_cast<int>(interface->info->interface_number) + USB_LOG(ERROR) << "Interface " << int{interface->info->interface_number} << " has no device path."; return; } @@ -732,10 +764,12 @@ auto interface_it = interfaces_.find(interface_number); DCHECK(interface_it != interfaces_.end()); Interface* interface = &interface_it->second; - DCHECK_NE(interface->info->first_interface, - interface->info->interface_number); - DCHECK_EQ(interface->info->first_interface, - first_interface->info->interface_number); + if (device_->driver_type() == UsbDeviceWin::DriverType::kComposite) { + DCHECK_NE(interface->info->first_interface, + interface->info->interface_number); + DCHECK_EQ(interface->info->first_interface, + first_interface->info->interface_number); + } base::ScopedClosureRunner run_callback( base::BindOnce(std::move(callback), interface)); @@ -745,8 +779,8 @@ first_interface->reference_count++; - int index = - interface->info->interface_number - interface->info->first_interface - 1; + int index = interface->info->interface_number - + first_interface->info->interface_number - 1; WINUSB_INTERFACE_HANDLE handle; if (WinUsb_GetAssociatedInterface(first_interface->handle.Get(), index, &handle)) { @@ -754,7 +788,7 @@ } else { USB_PLOG(ERROR) << "Failed to get associated interface " << index << " from interface " - << static_cast<int>(interface->info->first_interface); + << int{first_interface->info->interface_number}; ReleaseInterfaceReference(first_interface); } } @@ -953,12 +987,7 @@ if (!interface) { handle = hub_handle_.Get(); } else { - if (interface->info->interface_number != interface->info->first_interface) { - auto it = interfaces_.find(interface->info->first_interface); - DCHECK(it != interfaces_.end()); - interface = &it->second; - } - + interface = GetFirstInterfaceForFunction(interface); handle = interface->handle.Get(); interface->reference_count++; } @@ -1083,18 +1112,25 @@ } bool UsbDeviceHandleWin::AllFunctionsEnumerated() const { - for (const auto& map_entry : interfaces_) { - const Interface& interface = map_entry.second; - - // Iterate over functions, rather than interfaces. - if (interface.info->first_interface != interface.info->interface_number) - continue; - - if (interface.function_driver.empty()) + switch (device_->driver_type()) { + case UsbDeviceWin::DriverType::kUnsupported: + NOTREACHED(); return false; - } + case UsbDeviceWin::DriverType::kWinUSB: + return true; + case UsbDeviceWin::DriverType::kComposite: + for (const auto& map_entry : interfaces_) { + const Interface& interface = map_entry.second; - return true; + // Iterate over functions, rather than interfaces. + if (interface.info->first_interface != interface.info->interface_number) + continue; + + if (interface.function_driver.empty()) + return false; + } + return true; + } } void UsbDeviceHandleWin::ReleaseInterfaceReference(Interface* interface) { @@ -1111,11 +1147,9 @@ if (interface->function_handle.IsValid()) interface->function_handle.Close(); - if (interface->info->interface_number != interface->info->first_interface) { - auto it = interfaces_.find(interface->info->first_interface); - DCHECK(it != interfaces_.end()); - ReleaseInterfaceReference(&it->second); - } + Interface* first_interface = GetFirstInterfaceForFunction(interface); + if (first_interface != interface) + ReleaseInterfaceReference(first_interface); } } // namespace device
diff --git a/services/device/usb/usb_device_handle_win.h b/services/device/usb/usb_device_handle_win.h index de6e145..a07bc7b 100644 --- a/services/device/usb/usb_device_handle_win.h +++ b/services/device/usb/usb_device_handle_win.h
@@ -130,6 +130,13 @@ void OpenInterfaceHandle(Interface* interface, OpenInterfaceCallback callback); + + // Interfaces on a USB device are organized into "functions". When making a + // request to a device the first interface of each function is the one that + // has a valid |function_handle|. This function finds the correct interface + // for making requests to the provided interface based on the device's driver + // configuration. + Interface* GetFirstInterfaceForFunction(Interface* interface); void OnFunctionAvailable(OpenInterfaceCallback callback, Interface* interface); void OnFirstInterfaceOpened(int interface_number,
diff --git a/services/device/usb/usb_device_win.cc b/services/device/usb/usb_device_win.cc index 5921762..7c3f4af 100644 --- a/services/device/usb/usb_device_win.cc +++ b/services/device/usb/usb_device_win.cc
@@ -29,12 +29,12 @@ const base::flat_map<int, FunctionInfo>& functions, uint32_t bus_number, uint32_t port_number, - bool is_supported) + DriverType driver_type) : UsbDevice(bus_number, port_number), device_path_(device_path), hub_path_(hub_path), functions_(functions), - is_supported_(is_supported) {} + driver_type_(driver_type) {} UsbDeviceWin::~UsbDeviceWin() {} @@ -42,7 +42,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); scoped_refptr<UsbDeviceHandle> device_handle; - if (is_supported_) { + if (driver_type_ != DriverType::kUnsupported) { device_handle = new UsbDeviceHandleWin(this); handles().push_back(device_handle.get()); }
diff --git a/services/device/usb/usb_device_win.h b/services/device/usb/usb_device_win.h index 9514777..f0a268c6 100644 --- a/services/device/usb/usb_device_win.h +++ b/services/device/usb/usb_device_win.h
@@ -28,12 +28,18 @@ std::wstring path; }; + enum class DriverType { + kUnsupported, + kWinUSB, + kComposite, + }; + UsbDeviceWin(const std::wstring& device_path, const std::wstring& hub_path, const base::flat_map<int, FunctionInfo>& functions, uint32_t bus_number, uint32_t port_number, - bool is_supported); + DriverType driver_type); // UsbDevice implementation: void Open(OpenCallback callback) override; @@ -48,6 +54,7 @@ const base::flat_map<int, FunctionInfo>& functions() const { return functions_; } + DriverType driver_type() const { return driver_type_; } // Opens the device's parent hub in order to read the device, configuration // and string descriptors. @@ -85,7 +92,7 @@ const std::wstring device_path_; const std::wstring hub_path_; base::flat_map<int, FunctionInfo> functions_; - const bool is_supported_; + const DriverType driver_type_; DISALLOW_COPY_AND_ASSIGN(UsbDeviceWin); };
diff --git a/services/device/usb/usb_service_win.cc b/services/device/usb/usb_service_win.cc index 51477ef3..2ac1866 100644 --- a/services/device/usb/usb_service_win.cc +++ b/services/device/usb/usb_service_win.cc
@@ -503,10 +503,10 @@ return; } - bool is_supported = false; + auto driver_type = UsbDeviceWin::DriverType::kUnsupported; std::vector<std::pair<int, UsbDeviceWin::FunctionInfo>> functions; if (IsCompositeDevice(service_name)) { - is_supported = true; + driver_type = UsbDeviceWin::DriverType::kComposite; // For composite devices Windows a composite device driver (usually the // built-in usbccgp.sys) creates child device nodes for each device // function. The device paths for these children must be opened in order @@ -518,9 +518,9 @@ } } } else if (base::EqualsCaseInsensitiveASCII(service_name, L"winusb")) { - is_supported = true; - // A non-composite device has a single device node for all interfaces as - // it only has a single function. + driver_type = UsbDeviceWin::DriverType::kWinUSB; + // A non-composite device has a single device node for all interfaces. It + // may still include multiple functions but they will be ignored. UsbDeviceWin::FunctionInfo info; info.driver = service_name; info.path = device_path; @@ -538,7 +538,7 @@ FROM_HERE, base::BindOnce(&UsbServiceWin::CreateDeviceObject, service_, std::move(device_path), std::move(hub_path), std::move(functions), bus_number, port_number, - is_supported, service_name)); + driver_type, service_name)); } void EnumeratePotentialFunction( @@ -660,7 +660,7 @@ const base::flat_map<int, UsbDeviceWin::FunctionInfo>& functions, uint32_t bus_number, uint32_t port_number, - bool is_supported, + UsbDeviceWin::DriverType driver_type, const std::wstring& driver_name) { // Devices that appear during initial enumeration are gathered into the first // result returned by GetDevices() and prevent device add/remove notifications @@ -669,7 +669,7 @@ ++first_enumeration_countdown_; auto device = base::MakeRefCounted<UsbDeviceWin>( - device_path, hub_path, functions, bus_number, port_number, is_supported); + device_path, hub_path, functions, bus_number, port_number, driver_type); devices_by_path_[device->device_path()] = device; device->ReadDescriptors(base::BindOnce(&UsbServiceWin::DeviceReady, weak_factory_.GetWeakPtr(), device,
diff --git a/services/device/usb/usb_service_win.h b/services/device/usb/usb_service_win.h index f8841d82..6b6562c5 100644 --- a/services/device/usb/usb_service_win.h +++ b/services/device/usb/usb_service_win.h
@@ -47,7 +47,7 @@ const base::flat_map<int, UsbDeviceWin::FunctionInfo>& functions, uint32_t bus_number, uint32_t port_number, - bool is_supported, + UsbDeviceWin::DriverType driver_type, const std::wstring& driver_name); void UpdateFunction(const std::wstring& device_path, int interface_number,
diff --git a/services/network/first_party_sets/first_party_set_parser.cc b/services/network/first_party_sets/first_party_set_parser.cc index cd23baff..e901547 100644 --- a/services/network/first_party_sets/first_party_set_parser.cc +++ b/services/network/first_party_sets/first_party_set_parser.cc
@@ -58,12 +58,13 @@ const char kFirstPartySetOwnerField[] = "owner"; const char kFirstPartySetMembersField[] = "members"; -// Parses a single First-Party Set into a map from member to owner (not -// including the owner). Note that this is intended for use *only* on sets that +// Parses a single First-Party Set into a map from member to owner (including an +// entry owner -> owner). Note that this is intended for use *only* on sets that // were preloaded via the component updater, so this does not check assertions // or versions. It rejects sets which are non-disjoint with // previously-encountered sets (i.e. sets which have non-empty intersections -// with `elements`). +// with `elements`), and singleton sets (i.e. sets must have an owner and at +// least one valid member). // // Uses `elements` to check disjointness of sets; builds the mapping in `map`; // and augments `elements` to include the elements of the set that was parsed. @@ -92,6 +93,7 @@ return false; elements.insert(*canonical_owner); + map.emplace(*canonical_owner, *canonical_owner); // Confirm that the members field is present, and is an array of strings. const base::Value* maybe_members_list = @@ -112,7 +114,7 @@ map.emplace(*member, *canonical_owner); elements.insert(std::move(*member)); } - return true; + return !maybe_members_list->GetList().empty(); } } // namespace
diff --git a/services/network/first_party_sets/first_party_set_parser_unittest.cc b/services/network/first_party_sets/first_party_set_parser_unittest.cc index cb6bc9f..1b80e1c3 100644 --- a/services/network/first_party_sets/first_party_set_parser_unittest.cc +++ b/services/network/first_party_sets/first_party_set_parser_unittest.cc
@@ -59,6 +59,19 @@ Pointee(IsEmpty())); } +TEST(FirstPartySetParser, RejectsSingletonSet) { + const std::string input = + R"([{ + "owner": "https://example.test", + "members": [] + }])"; + + // Sanity check that the input is actually valid JSON. + ASSERT_TRUE(base::JSONReader::Read(input)); + + EXPECT_FALSE(FirstPartySetParser::ParsePreloadedSets(input)); +} + TEST(FirstPartySetParser, AcceptsMinimal) { const std::string input = R"([{ @@ -71,6 +84,8 @@ EXPECT_THAT(FirstPartySetParser::ParsePreloadedSets(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://aaaa.test"), SerializesTo("https://example.test"))))); } @@ -206,6 +221,8 @@ EXPECT_THAT(FirstPartySetParser::ParsePreloadedSets(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://aaaa.test"), SerializesTo("https://example.test"))))); } @@ -222,6 +239,8 @@ EXPECT_THAT(FirstPartySetParser::ParsePreloadedSets(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://aaaa.test"), SerializesTo("https://example.test"))))); } @@ -245,8 +264,12 @@ EXPECT_THAT( FirstPartySetParser::ParsePreloadedSets(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://foo.test"), + SerializesTo("https://foo.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://foo.test"))))); } @@ -307,6 +330,8 @@ EXPECT_THAT(FirstPartySetParser::ParsePreloadedSets(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test"))))); }
diff --git a/services/network/first_party_sets/preloaded_first_party_sets.cc b/services/network/first_party_sets/preloaded_first_party_sets.cc index 021938ff..f6f9df5 100644 --- a/services/network/first_party_sets/preloaded_first_party_sets.cc +++ b/services/network/first_party_sets/preloaded_first_party_sets.cc
@@ -87,20 +87,42 @@ const base::flat_set<net::SchemefulSite>& manual_members = manually_specified_set_->second; - sets_.erase( - base::ranges::remove_if(sets_, - [&manual_members, &manual_owner](const auto& p) { - return p.first == manual_owner || - p.second == manual_owner || - manual_members.contains(p.first) || - manual_members.contains(p.second); - }), - sets_.end()); + const auto was_manually_provided = + [&manual_members, &manual_owner](const net::SchemefulSite& site) { + return site == manual_owner || manual_members.contains(site); + }; + + // Erase the intersection between the manually-specified set and the + // CU-supplied set, and any members whose owner was in the intersection. + sets_.erase(base::ranges::remove_if(sets_, + [&was_manually_provided](const auto& p) { + return was_manually_provided(p.first) || + was_manually_provided(p.second); + }), + sets_.end()); + + // Now remove singleton sets. We already removed any sites that were part + // of the intersection, or whose owner was part of the intersection. This + // leaves sites that *are* owners, which no longer have any (other) + // members. + std::set<net::SchemefulSite> owners_with_members; + for (const auto& it : sets_) { + if (it.first != it.second) + owners_with_members.insert(it.second); + } + sets_.erase(base::ranges::remove_if( + sets_, + [&owners_with_members](const auto& p) { + return p.first == p.second && + !base::Contains(owners_with_members, p.first); + }), + sets_.end()); // Next, we must add the manually-added set to the parsed value. for (const net::SchemefulSite& member : manual_members) { sets_.emplace(member, manual_owner); } + sets_.emplace(manual_owner, manual_owner); } } // namespace network
diff --git a/services/network/first_party_sets/preloaded_first_party_sets.h b/services/network/first_party_sets/preloaded_first_party_sets.h index 8aab127..fec0ff2 100644 --- a/services/network/first_party_sets/preloaded_first_party_sets.h +++ b/services/network/first_party_sets/preloaded_first_party_sets.h
@@ -50,6 +50,9 @@ // `manually_specified_set_`. void ApplyManuallySpecifiedSet(); + // Represents the mapping of site -> site, where keys are members of sets, and + // values are owners of the sets. Owners are explicitly represented as members + // of the set. base::flat_map<net::SchemefulSite, net::SchemefulSite> sets_; base::Optional< std::pair<net::SchemefulSite, base::flat_set<net::SchemefulSite>>>
diff --git a/services/network/first_party_sets/preloaded_first_party_sets_unittest.cc b/services/network/first_party_sets/preloaded_first_party_sets_unittest.cc index 02ffb7d..c9e399a9 100644 --- a/services/network/first_party_sets/preloaded_first_party_sets_unittest.cc +++ b/services/network/first_party_sets/preloaded_first_party_sets_unittest.cc
@@ -39,6 +39,8 @@ EXPECT_THAT(PreloadedFirstPartySets().ParseAndSet(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://aaaa.test"), SerializesTo("https://example.test"))))); } @@ -60,8 +62,12 @@ EXPECT_THAT( PreloadedFirstPartySets().ParseAndSet(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://foo.test"), + SerializesTo("https://foo.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://foo.test"))))); } @@ -84,8 +90,12 @@ PreloadedFirstPartySets sets; EXPECT_THAT( sets.ParseAndSet(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://foo.test"), + SerializesTo("https://foo.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://foo.test"))))); @@ -189,6 +199,8 @@ sets.SetManuallySpecifiedSet("https://example.test,https://member.test"); EXPECT_THAT(sets.ParseAndSet("[]"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member.test"), SerializesTo("https://example.test"))))); } @@ -200,6 +212,8 @@ "https://www.example.test,https://www.member.test"); EXPECT_THAT(sets.ParseAndSet("[]"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member.test"), SerializesTo("https://example.test"))))); } @@ -210,6 +224,8 @@ "https://example.test,https://member1.test,https://member2.test"); EXPECT_THAT(sets.ParseAndSet("[]"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), @@ -228,6 +244,8 @@ "https://example.test,https://example.test,https://member1.test"); EXPECT_THAT(sets.ParseAndSet("[]"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test"))))); } @@ -241,6 +259,8 @@ https://member1.test)"); EXPECT_THAT(sets.ParseAndSet("[]"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), @@ -267,10 +287,14 @@ "https://example.test,https://member1.test,https://member2.test"); EXPECT_THAT( sets.ParseAndSet(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://bar.test"), + SerializesTo("https://bar.test")), Pair(SerializesTo("https://member4.test"), SerializesTo("https://bar.test"))))); } @@ -295,8 +319,12 @@ "https://example.test,https://member1.test,https://member3.test"); EXPECT_THAT(sets.ParseAndSet(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://bar.test"), + SerializesTo("https://bar.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://bar.test")), Pair(SerializesTo("https://member3.test"), @@ -322,10 +350,14 @@ sets.SetManuallySpecifiedSet("https://example.test,https://member3.test"); EXPECT_THAT(sets.ParseAndSet(input), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://foo.test"), + SerializesTo("https://foo.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://foo.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://foo.test")), + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member3.test"), SerializesTo("https://example.test"))))); } @@ -350,12 +382,18 @@ "https://example.test,https://member1.test,https://member2.test"); EXPECT_THAT( sets.ParseAndSet(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://foo.test"), + SerializesTo("https://foo.test")), Pair(SerializesTo("https://member3.test"), SerializesTo("https://foo.test")), + Pair(SerializesTo("https://bar.test"), + SerializesTo("https://bar.test")), Pair(SerializesTo("https://member4.test"), SerializesTo("https://bar.test"))))); } @@ -376,19 +414,49 @@ "https://example.test,https://member1.test,https://member2.test"); EXPECT_THAT( sets.ParseAndSet(input), - Pointee(UnorderedElementsAre(Pair(SerializesTo("https://member1.test"), + Pointee(UnorderedElementsAre(Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://example.test")), + Pair(SerializesTo("https://bar.test"), + SerializesTo("https://bar.test")), Pair(SerializesTo("https://member3.test"), SerializesTo("https://bar.test"))))); EXPECT_THAT(sets.ParseAndSet("{}"), Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), Pair(SerializesTo("https://member1.test"), SerializesTo("https://example.test")), Pair(SerializesTo("https://member2.test"), SerializesTo("https://example.test"))))); } +TEST(PreloadedFirstPartySets, SetsManuallySpecified_PrunesInducedSingletons) { + const std::string input = R"( + [ + { + "owner": "https://foo.test", + "members": ["https://member1.test"] + } + ] + )"; + ASSERT_TRUE(base::JSONReader::Read(input)); + + PreloadedFirstPartySets sets; + sets.SetManuallySpecifiedSet("https://example.test,https://member1.test"); + // If we just erased entries that overlapped with the manually-supplied set, + // https://foo.test would be left as a singleton set. But since we disallow + // singleton sets, we ensure that such cases are caught and removed. + EXPECT_THAT(sets.ParseAndSet(input), + Pointee(UnorderedElementsAre( + Pair(SerializesTo("https://example.test"), + SerializesTo("https://example.test")), + Pair(SerializesTo("https://member1.test"), + SerializesTo("https://example.test"))))); +} + } // namespace network
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index 9b2a1717..65bb883 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -888,9 +888,10 @@ // Here and below, defer calling NotifyCompleted to make sure the URLLoader // finishes initializing before getting deleted. base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&URLLoader::NotifyCompleted, - weak_ptr_factory_.GetWeakPtr(), - net::ERR_TRUST_TOKEN_OPERATION_CACHE_HIT)); + FROM_HERE, + base::BindOnce( + &URLLoader::NotifyCompleted, weak_ptr_factory_.GetWeakPtr(), + net::ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST)); } else { base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&URLLoader::NotifyCompleted,
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc index e9e0a790..7a2dcadc 100644 --- a/services/network/url_loader_unittest.cc +++ b/services/network/url_loader_unittest.cc
@@ -5852,7 +5852,7 @@ delete_run_loop.Run(); EXPECT_EQ(client()->completion_status().error_code, - net::ERR_TRUST_TOKEN_OPERATION_CACHE_HIT); + net::ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST); EXPECT_EQ(client()->completion_status().trust_token_operation_status, mojom::TrustTokenOperationStatus::kAlreadyExists); // Verify the DevTools event was fired and it has the right status.
diff --git a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/BarcodeDetectionImplTest.java b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/BarcodeDetectionImplTest.java index e8b17fa7..4ef03d5 100644 --- a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/BarcodeDetectionImplTest.java +++ b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/BarcodeDetectionImplTest.java
@@ -4,6 +4,8 @@ package org.chromium.shape_detection; +import android.os.Build; + import androidx.test.filters.SmallTest; import org.junit.Assert; @@ -17,6 +19,7 @@ import org.chromium.base.test.params.ParameterSet; import org.chromium.base.test.params.ParameterizedRunner; import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.Feature; import org.chromium.shape_detection.mojom.BarcodeDetection; import org.chromium.shape_detection.mojom.BarcodeDetectionProvider; @@ -35,6 +38,7 @@ @RunWith(ParameterizedRunner.class) @Batch(Batch.UNIT_TESTS) @UseRunnerDelegate(BaseJUnit4RunnerDelegate.class) +@DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.N_MR1, message = "crbug.com/1153716") public class BarcodeDetectionImplTest { private static final org.chromium.skia.mojom.BitmapWithArbitraryBpp QR_CODE_BITMAP = TestUtils.mojoBitmapFromFile("qr_code.png");
diff --git a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/FaceDetectionImplTest.java b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/FaceDetectionImplTest.java index 83e7d094..56502f4 100644 --- a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/FaceDetectionImplTest.java +++ b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/FaceDetectionImplTest.java
@@ -8,6 +8,7 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.RectF; +import android.os.Build; import androidx.test.filters.SmallTest; @@ -17,6 +18,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.Feature; import org.chromium.shape_detection.mojom.FaceDetection; import org.chromium.shape_detection.mojom.FaceDetectionResult; @@ -30,6 +32,7 @@ */ @RunWith(BaseJUnit4ClassRunner.class) @Batch(Batch.UNIT_TESTS) +@DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.N_MR1, message = "crbug.com/1153716") public class FaceDetectionImplTest { private static final org.chromium.skia.mojom.BitmapWithArbitraryBpp MONA_LISA_BITMAP = TestUtils.mojoBitmapFromFile("mona_lisa.jpg");
diff --git a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java index 2ed98741..45d84265 100644 --- a/services/shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java +++ b/services/shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java
@@ -4,6 +4,8 @@ package org.chromium.shape_detection; +import android.os.Build; + import androidx.test.filters.SmallTest; import org.junit.Assert; @@ -12,6 +14,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.Feature; import org.chromium.gfx.mojom.RectF; import org.chromium.shape_detection.mojom.TextDetection; @@ -25,6 +28,7 @@ */ @RunWith(BaseJUnit4ClassRunner.class) @Batch(Batch.UNIT_TESTS) +@DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.N_MR1, message = "crbug.com/1153716") public class TextDetectionImplTest { private static final String[] DETECTION_EXPECTED_TEXT = { "The quick brown fox jumped over the lazy dog.", "Helvetica Neue 36."};
diff --git a/services/shape_detection/barcode_detection_impl_mac.h b/services/shape_detection/barcode_detection_impl_mac.h index b4fd577..3799769 100644 --- a/services/shape_detection/barcode_detection_impl_mac.h +++ b/services/shape_detection/barcode_detection_impl_mac.h
@@ -18,7 +18,7 @@ namespace shape_detection { -class API_AVAILABLE(macosx(10.10)) BarcodeDetectionImplMac +class BarcodeDetectionImplMac : public shape_detection::mojom::BarcodeDetection { public: BarcodeDetectionImplMac();
diff --git a/services/shape_detection/barcode_detection_impl_mac_unittest.mm b/services/shape_detection/barcode_detection_impl_mac_unittest.mm index d5ca22ea..ae4a1696 100644 --- a/services/shape_detection/barcode_detection_impl_mac_unittest.mm +++ b/services/shape_detection/barcode_detection_impl_mac_unittest.mm
@@ -120,11 +120,6 @@ } impl_ = GetParam().factory.Run(mojom::BarcodeDetectorOptions::New()); - if (!impl_) { - LOG(WARNING) << "Barcode Detection is not supported before Mac OSX 10.10." - << "Skipping test."; - return; - } // Generate a barcode image as a CIImage by using |qr_code_generator|. NSData* const qr_code_data =
diff --git a/services/shape_detection/text_detection_impl_mac.mm b/services/shape_detection/text_detection_impl_mac.mm index d3a3fc4..0b802d5 100644 --- a/services/shape_detection/text_detection_impl_mac.mm +++ b/services/shape_detection/text_detection_impl_mac.mm
@@ -4,7 +4,6 @@ #include "services/shape_detection/text_detection_impl_mac.h" -#include "base/mac/mac_util.h" #include "base/mac/scoped_cftyperef.h" #include "base/strings/sys_string_conversions.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -17,11 +16,8 @@ // static void TextDetectionImpl::Create( mojo::PendingReceiver<mojom::TextDetection> receiver) { - // Text detection needs at least MAC OS X 10.11. - if (@available(macOS 10.11, *)) { - mojo::MakeSelfOwnedReceiver(std::make_unique<TextDetectionImplMac>(), - std::move(receiver)); - } + mojo::MakeSelfOwnedReceiver(std::make_unique<TextDetectionImplMac>(), + std::move(receiver)); } TextDetectionImplMac::TextDetectionImplMac() { @@ -35,8 +31,6 @@ void TextDetectionImplMac::Detect(const SkBitmap& bitmap, DetectCallback callback) { - DCHECK(base::mac::IsAtLeastOS10_11()); - base::scoped_nsobject<CIImage> ci_image = CreateCIImageFromSkBitmap(bitmap); if (!ci_image) { std::move(callback).Run({});
diff --git a/services/shape_detection/text_detection_impl_mac_unittest.mm b/services/shape_detection/text_detection_impl_mac_unittest.mm index ee447e5..9ea6043 100644 --- a/services/shape_detection/text_detection_impl_mac_unittest.mm +++ b/services/shape_detection/text_detection_impl_mac_unittest.mm
@@ -41,64 +41,61 @@ // This test generates an image with a single text line and scans it back. TEST_F(TextDetectionImplMacTest, ScanOnce) { - // Text detection needs at least MAC OS X 10.11, and GPU infrastructure. + // Text detection needs GPU infrastructure. if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kUseGpuInTests) || - !base::mac::IsAtLeastOS10_11()) { + switches::kUseGpuInTests)) { return; } - if (@available(macOS 10.11, *)) { - impl_.reset(new TextDetectionImplMac); - base::ScopedCFTypeRef<CGColorSpaceRef> rgb_colorspace( - CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); + impl_.reset(new TextDetectionImplMac); + base::ScopedCFTypeRef<CGColorSpaceRef> rgb_colorspace( + CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); - const int width = 200; - const int height = 50; - base::ScopedCFTypeRef<CGContextRef> context(CGBitmapContextCreate( - nullptr, width, height, 8 /* bitsPerComponent */, - width * 4 /* rowBytes */, rgb_colorspace, - kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host)); + const int width = 200; + const int height = 50; + base::ScopedCFTypeRef<CGContextRef> context(CGBitmapContextCreate( + nullptr, width, height, 8 /* bitsPerComponent */, + width * 4 /* rowBytes */, rgb_colorspace, + kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host)); - // Draw a white background. - CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); - CGContextFillRect(context, CGRectMake(0.0, 0.0, width, height)); + // Draw a white background. + CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); + CGContextFillRect(context, CGRectMake(0.0, 0.0, width, height)); - // Create a line of Helvetica 16 text, and draw it in the |context|. - base::scoped_nsobject<NSFont> helvetica( - [NSFont fontWithName:@"Helvetica" size:16]); - NSDictionary* attributes = [NSDictionary - dictionaryWithObjectsAndKeys:helvetica, kCTFontAttributeName, nil]; + // Create a line of Helvetica 16 text, and draw it in the |context|. + base::scoped_nsobject<NSFont> helvetica([NSFont fontWithName:@"Helvetica" + size:16]); + NSDictionary* attributes = [NSDictionary + dictionaryWithObjectsAndKeys:helvetica, kCTFontAttributeName, nil]; - base::scoped_nsobject<NSAttributedString> info([[NSAttributedString alloc] - initWithString:@"https://www.chromium.org" - attributes:attributes]); + base::scoped_nsobject<NSAttributedString> info([[NSAttributedString alloc] + initWithString:@"https://www.chromium.org" + attributes:attributes]); - base::ScopedCFTypeRef<CTLineRef> line( - CTLineCreateWithAttributedString((CFAttributedStringRef)info.get())); + base::ScopedCFTypeRef<CTLineRef> line( + CTLineCreateWithAttributedString((CFAttributedStringRef)info.get())); - CGContextSetTextPosition(context, 10.0, height / 2.0); - CTLineDraw(line, context); + CGContextSetTextPosition(context, 10.0, height / 2.0); + CTLineDraw(line, context); - // Extract a CGImage and its raw pixels from |context|. - base::ScopedCFTypeRef<CGImageRef> cg_image( - CGBitmapContextCreateImage(context)); - EXPECT_EQ(static_cast<size_t>(width), CGImageGetWidth(cg_image)); - EXPECT_EQ(static_cast<size_t>(height), CGImageGetHeight(cg_image)); + // Extract a CGImage and its raw pixels from |context|. + base::ScopedCFTypeRef<CGImageRef> cg_image( + CGBitmapContextCreateImage(context)); + EXPECT_EQ(static_cast<size_t>(width), CGImageGetWidth(cg_image)); + EXPECT_EQ(static_cast<size_t>(height), CGImageGetHeight(cg_image)); - SkBitmap bitmap; - ASSERT_TRUE(SkCreateBitmapFromCGImage(&bitmap, cg_image)); + SkBitmap bitmap; + ASSERT_TRUE(SkCreateBitmapFromCGImage(&bitmap, cg_image)); - base::RunLoop run_loop; - // Send the image to Detect() and expect the response in callback. - EXPECT_CALL(*this, Detection(1)) - .WillOnce(RunOnceClosure(run_loop.QuitClosure())); - impl_->Detect(bitmap, - base::BindOnce(&TextDetectionImplMacTest::DetectCallback, - base::Unretained(this))); + base::RunLoop run_loop; + // Send the image to Detect() and expect the response in callback. + EXPECT_CALL(*this, Detection(1)) + .WillOnce(RunOnceClosure(run_loop.QuitClosure())); + impl_->Detect(bitmap, + base::BindOnce(&TextDetectionImplMacTest::DetectCallback, + base::Unretained(this))); - run_loop.Run(); - } + run_loop.Run(); } } // shape_detection namespace
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index a702c9d..aa59887 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -14341,6 +14341,35 @@ "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/" + }, + { + "args": [ + "--far-file", + "gen/fuchsia/engine/web_engine/web_engine.far", + "--far-file", + "gen/fuchsia/runners/cast_runner/cast_runner.far", + "--total-size-name", + "chrome_fuchsia", + "--compression-args", + "-14" + ], + "isolate_name": "fuchsia_sizes", + "merge": { + "script": "//tools/perf/process_perf_results.py" + }, + "name": "fuchsia_sizes", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "arm64", + "inside_docker": "1", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://fuchsia/release:fuchsia_sizes/" } ] }, @@ -53805,6 +53834,33 @@ "linux-example-builder": { "additional_compile_targets": [ "chrome" + ], + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "interactive_ui_tests", + "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" + } ] }, "linux-fieldtrial-rel": {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index f026e30..e4ae25a6 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -858,6 +858,10 @@ "script": "//testing/scripts/run_flatbuffers_unittests.py", "type": "script", }, + "fuchsia_sizes": { + "label": "//fuchsia/release:fuchsia_sizes", + "type": "generated_script", + }, "fuchsia_telemetry_gpu_integration_test": { "args": [ "../../content/test/gpu/run_gpu_integration_test_fuchsia.py",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 065062d..72cb4e6 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -1646,6 +1646,24 @@ }, }, + 'fuchsia_sizes_tests': { + 'fuchsia_sizes': { + 'merge': { + 'script': '//tools/perf/process_perf_results.py', + }, + 'args': [ + '--far-file', + 'gen/fuchsia/engine/web_engine/web_engine.far', + '--far-file', + 'gen/fuchsia/runners/cast_runner/cast_runner.far', + '--total-size-name', + 'chrome_fuchsia', + '--compression-args', + '-14', + ], + }, + }, + 'gl_gtests_validating': { 'gl_tests_validating': { 'test': 'gl_tests', @@ -3791,6 +3809,15 @@ 'wayland_client_perftests': {}, }, + 'linux_example_builder_gtests': { + 'base_unittests': {}, + 'interactive_ui_tests': { + 'swarming': { + 'shards': 3, + }, + }, + }, + 'linux_flavor_specific_chromium_gtests': { # Android, Chrome OS and Linux 'sandbox_linux_unittests': {}, @@ -5411,6 +5438,11 @@ 'layout_ng_gtests', ], + 'fuchsia_arm64_isolated_scripts': [ + 'fuchsia_sizes_tests', + 'gpu_angle_fuchsia_unittests_isolated_scripts', + ], + 'fuchsia_x64_isolated_scripts': [ 'chromium_webkit_isolated_scripts', 'gpu_angle_fuchsia_unittests_isolated_scripts'
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 94767ee..f1e0a0e 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2379,7 +2379,7 @@ ], 'test_suites': { 'gtest_tests': 'fuchsia_gtests', - 'isolated_scripts': 'gpu_angle_fuchsia_unittests_isolated_scripts', + 'isolated_scripts': 'fuchsia_arm64_isolated_scripts', }, 'mixins': [ 'arm64', @@ -2686,6 +2686,9 @@ 'additional_compile_targets': [ 'chrome', ], + 'test_suites': { + 'gtest_tests': 'linux_example_builder_gtests', + }, }, 'linux-fieldtrial-rel': { 'mixins': [
diff --git a/testing/test.gni b/testing/test.gni index 643c80c..4f446e1 100644 --- a/testing/test.gni +++ b/testing/test.gni
@@ -136,11 +136,24 @@ configs = [] # Prevent list overwriting warning. configs = invoker.configs - deps = [] forward_variables_from( invoker, "*", - _apk_specific_vars + _wrapper_script_vars + TESTONLY_AND_VISIBILITY) + [ "deps" ] + _apk_specific_vars + _wrapper_script_vars + + TESTONLY_AND_VISIBILITY) + + # Native targets do not need to depend on java targets. Filter them out + # so that the shared library can be built without needing to wait for + # dependent java targets. + deps = [] + if (defined(invoker.deps)) { + foreach(_dep, invoker.deps) { + _target_label = get_label_info(_dep, "label_no_toolchain") + if (filter_exclude([ _target_label ], java_target_patterns) != []) { + deps += [ _dep ] + } + } + } if (!defined(invoker.use_default_launcher) || invoker.use_default_launcher) {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index d750261..3b4e2a3 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -5865,6 +5865,27 @@ ] } ], + "ReparseServerPredictionsFollowingFormChange": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ReparseServerPredictionsFollowingFormChange" + ] + } + ] + } + ], "ReportCertificateErrors": [ { "platforms": [ @@ -6389,6 +6410,27 @@ ] } ], + "SecondaryServerFieldPredictions": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SecondaryServerFieldPredictions" + ] + } + ] + } + ], "ServiceManagerForBackgroundPrefetch": [ { "platforms": [ @@ -7115,6 +7157,27 @@ ] } ], + "TreatNewPasswordHeuristicsAsReliable": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TreatNewPasswordHeuristicsAsReliable" + ] + } + ] + } + ], "TrustTokenOriginTrial": [ { "platforms": [ @@ -8147,27 +8210,6 @@ ] } ], - "WellKnownChangePassword": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WellKnownChangePassword" - ] - } - ] - } - ], "WindowsNativeSpellChecker": [ { "platforms": [
diff --git a/third_party/blink/common/DIR_METADATA b/third_party/blink/common/DIR_METADATA new file mode 100644 index 0000000..bcfcab4 --- /dev/null +++ b/third_party/blink/common/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Blink" +}
diff --git a/third_party/blink/common/OWNERS b/third_party/blink/common/OWNERS index 7a5b430..20eecf7 100644 --- a/third_party/blink/common/OWNERS +++ b/third_party/blink/common/OWNERS
@@ -11,5 +11,3 @@ # Any core owner can approve blink finch flags. per-file features.cc=file://third_party/blink/renderer/core/OWNERS - -# COMPONENT: Blink
diff --git a/third_party/blink/common/blob/DIR_METADATA b/third_party/blink/common/blob/DIR_METADATA new file mode 100644 index 0000000..955fe831 --- /dev/null +++ b/third_party/blink/common/blob/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Storage>FileAPI" +} + +team_email: "storage-dev@chromium.org"
diff --git a/third_party/blink/common/blob/OWNERS b/third_party/blink/common/blob/OWNERS index 6a67518..5fe885e 100644 --- a/third_party/blink/common/blob/OWNERS +++ b/third_party/blink/common/blob/OWNERS
@@ -1,5 +1,2 @@ file://storage/browser/blob/OWNERS -# TEAM: storage-dev@chromium.org -# COMPONENT: Blink>Storage>FileAPI -
diff --git a/third_party/blink/common/bluetooth/DIR_METADATA b/third_party/blink/common/bluetooth/DIR_METADATA new file mode 100644 index 0000000..002457dc --- /dev/null +++ b/third_party/blink/common/bluetooth/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Bluetooth" +} + +team_email: "web-bluetooth@chromium.org"
diff --git a/third_party/blink/common/bluetooth/OWNERS b/third_party/blink/common/bluetooth/OWNERS index 030d4f2..c10d540 100644 --- a/third_party/blink/common/bluetooth/OWNERS +++ b/third_party/blink/common/bluetooth/OWNERS
@@ -4,6 +4,3 @@ # new sandbox escapes. per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: web-bluetooth@chromium.org -# COMPONENT: Blink>Bluetooth
diff --git a/third_party/blink/common/feature_policy/DIR_METADATA b/third_party/blink/common/feature_policy/DIR_METADATA new file mode 100644 index 0000000..3eb37bc --- /dev/null +++ b/third_party/blink/common/feature_policy/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Blink>FeaturePolicy" +}
diff --git a/third_party/blink/common/feature_policy/OWNERS b/third_party/blink/common/feature_policy/OWNERS index 3232c0c..909d625 100644 --- a/third_party/blink/common/feature_policy/OWNERS +++ b/third_party/blink/common/feature_policy/OWNERS
@@ -2,7 +2,6 @@ raymes@chromium.org loonybear@chromium.org -# COMPONENT: Blink>FeaturePolicy per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/common/feature_policy/document_policy.cc b/third_party/blink/common/feature_policy/document_policy.cc index 234eee563..5749caa 100644 --- a/third_party/blink/common/feature_policy/document_policy.cc +++ b/third_party/blink/common/feature_policy/document_policy.cc
@@ -21,6 +21,21 @@ header_policy.endpoint_map, feature_defaults); } +// static +std::unique_ptr<DocumentPolicy> DocumentPolicy::CopyStateFrom( + const DocumentPolicy* source) { + if (!source) + return nullptr; + + std::unique_ptr<DocumentPolicy> new_policy = + DocumentPolicy::CreateWithHeaderPolicy( + {/* header_policy */ {}, /* endpoint_map */ {}}); + + new_policy->internal_feature_state_ = source->internal_feature_state_; + new_policy->endpoint_map_ = source->endpoint_map_; + return new_policy; +} + namespace { net::structured_headers::Item PolicyValueToItem(const PolicyValue& value) { switch (value.Type()) {
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 4559a93c..7771af0 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -273,10 +273,6 @@ const base::Feature kIntensiveWakeUpThrottling{ "IntensiveWakeUpThrottling", base::FEATURE_DISABLED_BY_DEFAULT}; -// When enabled, timers with timeout=0 are not throttled. -const base::Feature kOptOutZeroTimeoutTimersFromThrottling{ - "OptOutZeroTimeoutTimersFromThrottling", base::FEATURE_ENABLED_BY_DEFAULT}; - // Name of the parameter that controls the grace period during which there is no // intensive wake up throttling after a page is hidden. Defined here to allow // access from about_flags.cc. The FeatureParam is defined in
diff --git a/third_party/blink/common/fetch/DIR_METADATA b/third_party/blink/common/fetch/DIR_METADATA new file mode 100644 index 0000000..dbf3715 --- /dev/null +++ b/third_party/blink/common/fetch/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Network>FetchAPI" +} + +team_email: "blink-network-dev@chromium.org"
diff --git a/third_party/blink/common/fetch/OWNERS b/third_party/blink/common/fetch/OWNERS index b2e47ad..fd7b644 100644 --- a/third_party/blink/common/fetch/OWNERS +++ b/third_party/blink/common/fetch/OWNERS
@@ -2,6 +2,3 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: blink-network-dev@chromium.org -# COMPONENT: Blink>Network>FetchAPI
diff --git a/third_party/blink/common/font_unique_name_lookup/DIR_METADATA b/third_party/blink/common/font_unique_name_lookup/DIR_METADATA new file mode 100644 index 0000000..594a7d65 --- /dev/null +++ b/third_party/blink/common/font_unique_name_lookup/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Blink>Fonts" +}
diff --git a/third_party/blink/common/font_unique_name_lookup/OWNERS b/third_party/blink/common/font_unique_name_lookup/OWNERS index 5819672..f196c82 100644 --- a/third_party/blink/common/font_unique_name_lookup/OWNERS +++ b/third_party/blink/common/font_unique_name_lookup/OWNERS
@@ -1,3 +1 @@ drott@chromium.org - -# COMPONENT: Blink>Fonts
diff --git a/third_party/blink/common/indexeddb/DIR_METADATA b/third_party/blink/common/indexeddb/DIR_METADATA new file mode 100644 index 0000000..af99a94 --- /dev/null +++ b/third_party/blink/common/indexeddb/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Storage>IndexedDB" +} + +team_email: "storage-dev@chromium.org"
diff --git a/third_party/blink/common/indexeddb/OWNERS b/third_party/blink/common/indexeddb/OWNERS index 4d50d63..a2789c2 100644 --- a/third_party/blink/common/indexeddb/OWNERS +++ b/third_party/blink/common/indexeddb/OWNERS
@@ -4,6 +4,3 @@ per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS per-file *.typemap=set noparent per-file *.typemap=file://ipc/SECURITY_OWNERS - -# TEAM: storage-dev@chromium.org -# COMPONENT: Blink>Storage>IndexedDB
diff --git a/third_party/blink/common/loader/DIR_METADATA b/third_party/blink/common/loader/DIR_METADATA new file mode 100644 index 0000000..af30f87 --- /dev/null +++ b/third_party/blink/common/loader/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Loader" +} + +team_email: "loading-dev@chromium.org"
diff --git a/third_party/blink/common/loader/OWNERS b/third_party/blink/common/loader/OWNERS index e4c226c..d5fefd8 100644 --- a/third_party/blink/common/loader/OWNERS +++ b/third_party/blink/common/loader/OWNERS
@@ -1,5 +1,2 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: loading-dev@chromium.org -# COMPONENT: Blink>Loader
diff --git a/third_party/blink/common/media/DIR_METADATA b/third_party/blink/common/media/DIR_METADATA new file mode 100644 index 0000000..a777258 --- /dev/null +++ b/third_party/blink/common/media/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Blink>Media" +}
diff --git a/third_party/blink/common/media/OWNERS b/third_party/blink/common/media/OWNERS index 473779c..168af18 100644 --- a/third_party/blink/common/media/OWNERS +++ b/third_party/blink/common/media/OWNERS
@@ -1,3 +1 @@ file://media/OWNERS - -# COMPONENT: Blink>Media
diff --git a/third_party/blink/common/mediastream/DIR_METADATA b/third_party/blink/common/mediastream/DIR_METADATA new file mode 100644 index 0000000..066f18a --- /dev/null +++ b/third_party/blink/common/mediastream/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>GetUserMedia" +} + +team_email: "webrtc-dev@chromium.org"
diff --git a/third_party/blink/common/mediastream/OWNERS b/third_party/blink/common/mediastream/OWNERS index 7f3f570..7653ee49 100644 --- a/third_party/blink/common/mediastream/OWNERS +++ b/third_party/blink/common/mediastream/OWNERS
@@ -3,6 +3,3 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: webrtc-dev@chromium.org -# COMPONENT: Blink>GetUserMedia
diff --git a/third_party/blink/common/messaging/DIR_METADATA b/third_party/blink/common/messaging/DIR_METADATA new file mode 100644 index 0000000..169c29b --- /dev/null +++ b/third_party/blink/common/messaging/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>Messaging" +} + +team_email: "platform-architecture-dev@chromium.org"
diff --git a/third_party/blink/common/messaging/OWNERS b/third_party/blink/common/messaging/OWNERS index 2ae4d6da..632fec4 100644 --- a/third_party/blink/common/messaging/OWNERS +++ b/third_party/blink/common/messaging/OWNERS
@@ -3,6 +3,3 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: platform-architecture-dev@chromium.org -# COMPONENT: Blink>Messaging
diff --git a/third_party/blink/common/mime_util/DIR_METADATA b/third_party/blink/common/mime_util/DIR_METADATA new file mode 100644 index 0000000..2d14a86 --- /dev/null +++ b/third_party/blink/common/mime_util/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Network" +}
diff --git a/third_party/blink/common/mime_util/OWNERS b/third_party/blink/common/mime_util/OWNERS index f03aa50..9825bef9 100644 --- a/third_party/blink/common/mime_util/OWNERS +++ b/third_party/blink/common/mime_util/OWNERS
@@ -1,5 +1,3 @@ asanka@chromium.org mmenke@chromium.org rsleevi@chromium.org - -# COMPONENT: Internals>Network
diff --git a/third_party/blink/common/notifications/DIR_METADATA b/third_party/blink/common/notifications/DIR_METADATA new file mode 100644 index 0000000..e05071ce --- /dev/null +++ b/third_party/blink/common/notifications/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "UI>Notifications" +} + +team_email: "platform-capabilities@chromium.org"
diff --git a/third_party/blink/common/notifications/OWNERS b/third_party/blink/common/notifications/OWNERS index 0f8fb440..34d5d68 100644 --- a/third_party/blink/common/notifications/OWNERS +++ b/third_party/blink/common/notifications/OWNERS
@@ -2,6 +2,3 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS - -# TEAM: platform-capabilities@chromium.org -# COMPONENT: UI>Notifications
diff --git a/third_party/blink/common/origin_trials/DIR_METADATA b/third_party/blink/common/origin_trials/DIR_METADATA new file mode 100644 index 0000000..69a375b1 --- /dev/null +++ b/third_party/blink/common/origin_trials/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Internals>OriginTrials" +} + +team_email: "experimentation-dev@chromium.org"
diff --git a/third_party/blink/common/origin_trials/OWNERS b/third_party/blink/common/origin_trials/OWNERS index cd5f7a43..50c5c0d 100644 --- a/third_party/blink/common/origin_trials/OWNERS +++ b/third_party/blink/common/origin_trials/OWNERS
@@ -7,6 +7,3 @@ chasej@chromium.org iclelland@chromium.org mek@chromium.org - -# TEAM: experimentation-dev@chromium.org -# COMPONENT: Internals>OriginTrials
diff --git a/third_party/blink/common/permissions/DIR_METADATA b/third_party/blink/common/permissions/DIR_METADATA new file mode 100644 index 0000000..e558745 --- /dev/null +++ b/third_party/blink/common/permissions/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Blink>PermissionsAPI" +}
diff --git a/third_party/blink/common/permissions/OWNERS b/third_party/blink/common/permissions/OWNERS index d83a9c5..5fc2b35 100644 --- a/third_party/blink/common/permissions/OWNERS +++ b/third_party/blink/common/permissions/OWNERS
@@ -1,3 +1 @@ file://third_party/blink/renderer/modules/permissions/OWNERS - -# COMPONENT: Blink>PermissionsAPI
diff --git a/third_party/blink/common/privacy_budget/DIR_METADATA b/third_party/blink/common/privacy_budget/DIR_METADATA new file mode 100644 index 0000000..8799ee18 --- /dev/null +++ b/third_party/blink/common/privacy_budget/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Privacy>Fingerprinting" +} + +team_email: "privacy-sandbox-dev@chromium.org"
diff --git a/third_party/blink/common/privacy_budget/OWNERS b/third_party/blink/common/privacy_budget/OWNERS index cfc756a1..dc54869 100644 --- a/third_party/blink/common/privacy_budget/OWNERS +++ b/third_party/blink/common/privacy_budget/OWNERS
@@ -1,4 +1 @@ file://third_party/blink/public/common/privacy_budget/OWNERS - -# TEAM: privacy-sandbox-dev@chromium.org -# COMPONENT: Privacy>Fingerprinting
diff --git a/third_party/blink/common/service_worker/DIR_METADATA b/third_party/blink/common/service_worker/DIR_METADATA new file mode 100644 index 0000000..2a951d09 --- /dev/null +++ b/third_party/blink/common/service_worker/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Blink>ServiceWorker" +} + +team_email: "worker-dev@chromium.org"
diff --git a/third_party/blink/common/service_worker/OWNERS b/third_party/blink/common/service_worker/OWNERS index e370236aa..c07cce4c 100644 --- a/third_party/blink/common/service_worker/OWNERS +++ b/third_party/blink/common/service_worker/OWNERS
@@ -2,6 +2,3 @@ per-file *_type_converter*.*=set noparent per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS - -# TEAM: worker-dev@chromium.org -# COMPONENT: Blink>ServiceWorker
diff --git a/third_party/blink/public/common/feature_policy/document_policy.h b/third_party/blink/public/common/feature_policy/document_policy.h index 6c7fa148..7dae83c4 100644 --- a/third_party/blink/public/common/feature_policy/document_policy.h +++ b/third_party/blink/public/common/feature_policy/document_policy.h
@@ -76,6 +76,8 @@ static std::unique_ptr<DocumentPolicy> CreateWithHeaderPolicy( const ParsedDocumentPolicy& header_policy); + static std::unique_ptr<DocumentPolicy> CopyStateFrom(const DocumentPolicy*); + // Returns true if the feature is unrestricted (has its default value for the // platform) bool IsFeatureEnabled(mojom::DocumentPolicyFeature feature) const; @@ -131,9 +133,10 @@ void UpdateFeatureState(const DocumentPolicyFeatureState& feature_state); // Internal feature state is represented as an array to avoid overhead - // in using container classes. - PolicyValue internal_feature_state_ - [static_cast<size_t>(mojom::DocumentPolicyFeature::kMaxValue) + 1]; + // of indexing into map like structure. + std::array<PolicyValue, + static_cast<size_t>(mojom::DocumentPolicyFeature::kMaxValue) + 1> + internal_feature_state_; FeatureEndpointMap endpoint_map_;
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index 51e79162..e284128f 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -79,9 +79,6 @@ BLINK_COMMON_EXPORT extern const char kIntensiveWakeUpThrottling_GracePeriodSeconds_Name[]; -BLINK_COMMON_EXPORT extern const base::Feature - kOptOutZeroTimeoutTimersFromThrottling; - #if BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) BLINK_COMMON_EXPORT extern const base::Feature kWebRtcH264WithOpenH264FFmpeg; #endif // BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
diff --git a/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h b/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h index faf2b452..8ac0bd5 100644 --- a/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h +++ b/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h
@@ -7,33 +7,13 @@ namespace blink { -// Named Mac system colors. Each of these corresponds to a selector on -// NSColor. +// Named Mac system colors. enum class MacSystemColorID { - kAlternateSelectedControl, kControlAccentBlueColor, kControlAccentColor, - kControlBackground, - kControlDarkShadow, - kControlHighlight, - kControlLightHighlight, - kControlShadow, - kControlText, - kDisabledControlText, - kHeader, - kHighlight, kKeyboardFocusIndicator, - kMenuBackground, - kScrollBar, kSecondarySelectedControl, - kSelectedMenuItemText, - kSelectedText, kSelectedTextBackground, - kShadow, - kText, - kWindowBackground, - kWindowFrame, - kWindowFrameText, kCount, };
diff --git a/third_party/blink/public/common/sms/webotp_service_outcome.h b/third_party/blink/public/common/sms/webotp_service_outcome.h index 70ced5f..d9effc3 100644 --- a/third_party/blink/public/common/sms/webotp_service_outcome.h +++ b/third_party/blink/public/common/sms/webotp_service_outcome.h
@@ -18,7 +18,8 @@ kAborted = 4, kTimeout = 5, kUserCancelled = 6, - kMaxValue = kUserCancelled + kBackendNotAvailable = 7, + kMaxValue = kBackendNotAvailable }; } // namespace blink
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom index ce62ad77..57d82a3 100644 --- a/third_party/blink/public/mojom/frame/frame.mojom +++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -4,6 +4,7 @@ module blink.mojom; +import "cc/mojom/browser_controls_state.mojom"; import "cc/mojom/touch_action.mojom"; import "mojo/public/mojom/base/string16.mojom"; import "mojo/public/mojom/base/unguessable_token.mojom"; @@ -970,6 +971,13 @@ // guest contents. ForwardMessageFromHost(blink.mojom.TransferableMessage message, url.mojom.Origin source_origin); + + // Notifies the renderer whether hiding/showing the browser controls is + // enabled, what the current state should be, and whether or not to + // animate to the proper state. + UpdateBrowserControlsState(cc.mojom.BrowserControlsState constraints, + cc.mojom.BrowserControlsState current, + bool animate); }; // Implemented in Blink, this interface defines remote main-frame-specific
diff --git a/third_party/blink/public/platform/TaskTypes.md b/third_party/blink/public/platform/TaskTypes.md index 9caf6c1e..4272df7 100644 --- a/third_party/blink/public/platform/TaskTypes.md +++ b/third_party/blink/public/platform/TaskTypes.md
@@ -19,9 +19,9 @@ | MediaElementEvent | No | No | No | Yes | Yes | Yes | | CanvasBlobSerialization | No | No | Yes | Yes | Yes | Yes | | Microtask | No | No | Yes | Yes | Yes | Yes | -| JavascriptTimerDelayedLowNesting | Yes | No [^2] | Yes | Yes | Yes | Yes | -| JavascriptTimerDelayedHighNesting | Yes | Yes [^3] | Yes | Yes | Yes | Yes | -| JavascriptTimerImmediate | No [^1] | No | Yes | Yes | Yes | Yes | +| JavascriptTimerDelayedLowNesting | Yes | No [^1] | Yes | Yes | Yes | Yes | +| JavascriptTimerDelayedHighNesting | Yes | Yes [^2] | Yes | Yes | Yes | Yes | +| JavascriptTimerImmediate | No | No | Yes | Yes | Yes | Yes | | RemoteEvent | No | No | Yes | Yes | Yes | Yes | | WebSocket | No | No | Yes | Yes | Yes | Yes | | PostedMessage | No | No | No | Yes | Yes | Yes | @@ -63,9 +63,7 @@ has been backgrounded for 5 minutes. See [Chrome Platform Status entry](https://www.chromestatus.com/feature/4718288976216064). -[^1] "Yes" if the "OptOutZeroTimeoutTimersFromThrottling" feature is disabled. - -[^2] "Yes" if the "IntensiveWakeUpThrottling" feature is enabled and the +[^1] "Yes" if the "IntensiveWakeUpThrottling" feature is enabled and the "can_intensively_throttle_low_nesting_level" param is "true". -[^3] "No" if the "IntensiveWakeUpThrottling" feature is disabled. +[^2] "No" if the "IntensiveWakeUpThrottling" feature is disabled.
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h index f6eb370..82770c8 100644 --- a/third_party/blink/public/platform/web_content_settings_client.h +++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -94,10 +94,6 @@ // Reports that passive mixed content was found at the provided URL. virtual void PassiveInsecureContentFound(const WebURL&) {} - // Notifies the client that the frame would have instantiated a plugin if - // plugins were enabled. - virtual void DidNotAllowPlugins() {} - // Notifies the client that the frame would have executed script if script // were enabled. virtual void DidNotAllowScript() {}
diff --git a/third_party/blink/public/platform/web_url_error.h b/third_party/blink/public/platform/web_url_error.h index 136f2068..89aabf3 100644 --- a/third_party/blink/public/platform/web_url_error.h +++ b/third_party/blink/public/platform/web_url_error.h
@@ -132,7 +132,7 @@ // More detailed reason for failing the response with // net::ERR_TRUST_TOKEN_OPERATION_FAILED or - // net::ERR_TRUST_TOKEN_OPERATION_CACHE_HIT. + // net::ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST. // // A value of kOk means that this request failed for a reason other than a // Trust Tokens operation failure. This does not necessarily mean that a Trust
diff --git a/third_party/blink/public/strings/translations/blink_strings_af.xtb b/third_party/blink/public/strings/translations/blink_strings_af.xtb index 4519025..c7b4d09 100644 --- a/third_party/blink/public/strings/translations/blink_strings_af.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_af.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Voer asseblief 'n deel gevolg deur "<ph name="ATSIGN" />" in. "<ph name="INVALIDADDRESS" />" is onvolledig.</translation> <translation id="5334352251556557839">Kan nie media speel nie.</translation> <translation id="537648784377940524">Minimum datum (<ph name="MIN_DATE_OR_TIME" />) moet voor maksimum datum (<ph name="MAX_DATE_OR_TIME" />) wees.</translation> +<translation id="5378437566635403538">uitgevou, dialoog is oop.</translation> <translation id="5406322316791861025">figuur</translation> <translation id="5425179576310518467">huidige datum</translation> <translation id="5453733299334684579">boomitem</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">nog opsies</translation> <translation id="576709008726043716">inleiding</translation> <translation id="57838592816432529">Demp</translation> +<translation id="5787939484346677755">uitgevou, outovoltooi-opsies beskikbaar.</translation> <translation id="5860033963881614850">Af</translation> <translation id="588258955323874662">Volskerm</translation> <translation id="5888666972993069672">Saai nou uit na <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">lyskassie</translation> <translation id="6150588977291308318">bibliografie</translation> <translation id="6164829606128959761">meter</translation> +<translation id="6165053282446038410">uitgevou, <ph name="COUNT" /> outovoltooi-opsies beskikbaar.</translation> <translation id="6166809985690652833">nawoord</translation> <translation id="6209276755895393898">Dit lyk soos: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">huidige bladsy</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">opskrif</translation> <translation id="6941933287844615239">laai media af</translation> <translation id="6981594929165378967">invoeging</translation> +<translation id="698788488269350478">uitgevou.</translation> <translation id="6989848892321993519">Verleng asseblief hierdie teks na <ph name="MIN_CHARACTERS" /> karakters of meer (jy gebruik tans 1 karakter).</translation> <translation id="7034405885550056553">voorstel</translation> <translation id="709897737746224366">Kry passing vir versoekte formaat.</translation> <translation id="7102274145889307184">huidige ligging</translation> <translation id="7118469954320184356">Geen beskrywing is beskikbaar nie.</translation> <translation id="7139483182332611405">voorwoord</translation> +<translation id="7198226213493847604">kieslysopspringerknoppie</translation> <translation id="7214187073215825913">inhoudinligting</translation> <translation id="7238347055216017155">beklemtoning</translation> <translation id="7263440858009898357">Kies asseblief 'n item uit die lys.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">hoofstuk</translation> <translation id="8845239796550121995">Saai nou na jou TV uit</translation> <translation id="8851136666856101339">hoof</translation> +<translation id="8861621546968757188">dialoogopspringerknoppie</translation> <translation id="8875657656876809964">Videoterugspeelfout</translation> <translation id="8889402386540077796">Skakering</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_am.xtb b/third_party/blink/public/strings/translations/blink_strings_am.xtb index 0e429f6..b3a3f2e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_am.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_am.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">እባክዎ አንድ ክፍል ያስገቡና «<ph name="ATSIGN" />»ን ያስከትሉ። «<ph name="INVALIDADDRESS" />» ያልተሟላ ነው።</translation> <translation id="5334352251556557839">ሚዲያን ማጫወት አልተቻለም።</translation> <translation id="537648784377940524">አነስተኛው ቀን (<ph name="MIN_DATE_OR_TIME" />) ከከፍተኛው ቀን (<ph name="MAX_DATE_OR_TIME" />) በፊት መምጣት አለበት።</translation> +<translation id="5378437566635403538">ተዘርግቷል፣ መገናኛ ተከፍቷል።</translation> <translation id="5406322316791861025">ምስል</translation> <translation id="5425179576310518467">የአሁኑ ቀን</translation> <translation id="5453733299334684579">የዛፍ ንጥል</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">ተጨማሪ አማራጮች</translation> <translation id="576709008726043716">መግቢያ</translation> <translation id="57838592816432529">ድምጽ ይዝጉ</translation> +<translation id="5787939484346677755">ተዘርግቷል፣ የራስ-ማጠናቀቅ አማራጮች አሉ።</translation> <translation id="5860033963881614850">አጥፋ</translation> <translation id="588258955323874662">ሙሉ ገጽ ዕይታ</translation> <translation id="5888666972993069672">አሁን ወደ <ph name="DEVICE_FRIENDLY_NAME" /> cast በማድረግ ላይ</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">የዝርዝር ሳጥን</translation> <translation id="6150588977291308318">ዋቢ መጽሐፍት</translation> <translation id="6164829606128959761">ሜትር</translation> +<translation id="6165053282446038410">ተዘርግቷል፣ <ph name="COUNT" /> የራስ-ማጠናቀቅ አማራጮች አሉ።</translation> <translation id="6166809985690652833">ድሕረ ቃል</translation> <translation id="6209276755895393898">ይህ ይመስላል፦ <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">የአሁኑ ገጽ</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">ራስጌ</translation> <translation id="6941933287844615239">ማህደረ መረጃን አውርድ</translation> <translation id="6981594929165378967">ማስገባት</translation> +<translation id="698788488269350478">ተዘርግቷል።</translation> <translation id="6989848892321993519">እባክዎ ይህን ጽሑፍ ወደ <ph name="MIN_CHARACTERS" /> ወይም ከዚያ በላይ ቁምፊዎች ያራዝሙት (አሁን እየተጠቀሙ ያሉት 1 ቁምፊ ነው)።</translation> <translation id="7034405885550056553">የአስተያየት ጥቆማ</translation> <translation id="709897737746224366">እባክዎ የተጠየቀውን ቅርጸት ያዛምዱ።</translation> <translation id="7102274145889307184">የአሁኑ አካባቢ</translation> <translation id="7118469954320184356">ምንም መግለጫ የለም።</translation> <translation id="7139483182332611405">መቅድም</translation> +<translation id="7198226213493847604">የምናለ ብቅ-ባይ አዝራር</translation> <translation id="7214187073215825913">የይዘት መረጃ</translation> <translation id="7238347055216017155">ትኩረት</translation> <translation id="7263440858009898357">እባክዎ በዝርዝሩ ውስጥ አንድ ንጥል ይምረጡ።</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">ምዕራፍ</translation> <translation id="8845239796550121995">አሁን ወደ የእርስዎ ቴሌቪዥን cast በማድረግ ላይ</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">የመገናኛ ብቅ-ባይ አዝራር</translation> <translation id="8875657656876809964">የቪዲዮ መልሶ ማጫወት ስህተት</translation> <translation id="8889402386540077796">ለይ ቀለም</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> ኪባ</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_az.xtb b/third_party/blink/public/strings/translations/blink_strings_az.xtb index f6698ae..9de5a977 100644 --- a/third_party/blink/public/strings/translations/blink_strings_az.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_az.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">'<ph name="ATSIGN" />' ilə davam edən hissəni daxil edin. '<ph name="INVALIDADDRESS" />' natamamdır.</translation> <translation id="5334352251556557839">Medianı oxutmaq mümkün deyil.</translation> <translation id="537648784377940524">Minimum tarix (<ph name="MIN_DATE_OR_TIME" />) Maksimum tarixdən (<ph name="MAX_DATE_OR_TIME" />) əvvəl gəlməlidir.</translation> +<translation id="5378437566635403538">genişləndirilib, dialoq açılıb.</translation> <translation id="5406322316791861025">rəqəm</translation> <translation id="5425179576310518467">cari tarix</translation> <translation id="5453733299334684579">ağac elementi</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">əlavə seçimlər</translation> <translation id="576709008726043716">giriş</translation> <translation id="57838592816432529">Səssiz</translation> +<translation id="5787939484346677755">genişləndirilib, avtomatik tamamlama seçimləri əlçatandır.</translation> <translation id="5860033963881614850">Deaktiv</translation> <translation id="588258955323874662">Tam ekran</translation> <translation id="5888666972993069672">İndi <ph name="DEVICE_FRIENDLY_NAME" /> cihazına yayımlanır</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">siyahı qutusu</translation> <translation id="6150588977291308318">biblioqrafiya</translation> <translation id="6164829606128959761">metr</translation> +<translation id="6165053282446038410">genişləndirilib, <ph name="COUNT" /> avtomatik tamamlama seçimi əlçatandır.</translation> <translation id="6166809985690652833">son söz</translation> <translation id="6209276755895393898">Ola bilər: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">cari səhifə</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">başlıq</translation> <translation id="6941933287844615239">medianı endirin</translation> <translation id="6981594929165378967">əlavə etmə</translation> +<translation id="698788488269350478">genişləndirilib.</translation> <translation id="6989848892321993519">Bu mətni <ph name="MIN_CHARACTERS" /> və ya daha çox simvola qədər uzadın (hazırda 1 simvol istifadə edirsiniz).</translation> <translation id="7034405885550056553">təklif</translation> <translation id="709897737746224366">Tələb olunan formata uyğun edin.</translation> <translation id="7102274145889307184">cari məkan</translation> <translation id="7118469954320184356">Təsvir əlçatan deyil.</translation> <translation id="7139483182332611405">ön söz</translation> +<translation id="7198226213493847604">menyu popap düyməsi</translation> <translation id="7214187073215825913">kontent məlumatı</translation> <translation id="7238347055216017155">vurğu</translation> <translation id="7263440858009898357">Lütfən, siyahıdan bir element seçin.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">fəsil</translation> <translation id="8845239796550121995">İndi TV-də yayımlanır</translation> <translation id="8851136666856101339">əsas</translation> +<translation id="8861621546968757188">dialoq popap düyməsi</translation> <translation id="8875657656876809964">Video oxutma xətası</translation> <translation id="8889402386540077796">Rəng çaları</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bg.xtb b/third_party/blink/public/strings/translations/blink_strings_bg.xtb index 103cb37..629261df 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bg.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bg.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Моля, въведете текст преди „<ph name="ATSIGN" />“. „<ph name="INVALIDADDRESS" />“ е непълно.</translation> <translation id="5334352251556557839">Мултимедийното съдържание не може да бъде възпроизведено.</translation> <translation id="537648784377940524">Най-ранната дата (<ph name="MIN_DATE_OR_TIME" />) трябва да е преди най-късната (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">разгънато, отворен диалогов прозорец.</translation> <translation id="5406322316791861025">фигура</translation> <translation id="5425179576310518467">текуща дата</translation> <translation id="5453733299334684579">елемент от дърво</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">още опции</translation> <translation id="576709008726043716">въведение</translation> <translation id="57838592816432529">Заглушаване</translation> +<translation id="5787939484346677755">разгънато, има опции за автоматично довършване.</translation> <translation id="5860033963881614850">Изключено</translation> <translation id="588258955323874662">Цял екран</translation> <translation id="5888666972993069672">В момента се предава към „<ph name="DEVICE_FRIENDLY_NAME" />“</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">списъчно поле</translation> <translation id="6150588977291308318">библиография</translation> <translation id="6164829606128959761">индикатор</translation> +<translation id="6165053282446038410">разгънато, има <ph name="COUNT" /> опции за автоматично довършване.</translation> <translation id="6166809985690652833">послеслов</translation> <translation id="6209276755895393898">Изглежда, че това е: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">текуща страница</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">горен колонтитул</translation> <translation id="6941933287844615239">изтегляне на мултимедията</translation> <translation id="6981594929165378967">вмъкване</translation> +<translation id="698788488269350478">разгънато.</translation> <translation id="6989848892321993519">Моля, удължете този текст до поне <ph name="MIN_CHARACTERS" /> знака (понастоящем използвате 1 знак).</translation> <translation id="7034405885550056553">предложение</translation> <translation id="709897737746224366">Моля, спазвайте изисквания формат.</translation> <translation id="7102274145889307184">текущо местоположение</translation> <translation id="7118469954320184356">Няма описание.</translation> <translation id="7139483182332611405">предисловие</translation> +<translation id="7198226213493847604">бутон за отваряне на изскачащо меню</translation> <translation id="7214187073215825913">информация за съдържанието</translation> <translation id="7238347055216017155">наблягане</translation> <translation id="7263440858009898357">Моля, изберете елемент в списъка.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">глава</translation> <translation id="8845239796550121995">В момента се предава към телевизора ви</translation> <translation id="8851136666856101339">основен елемент</translation> +<translation id="8861621546968757188">бутон за отваряне на изскачащ диалогов прозорец</translation> <translation id="8875657656876809964">Грешка при възпроизвеждането на видеоклипа</translation> <translation id="8889402386540077796">Цветови тон</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KБ</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bs.xtb b/third_party/blink/public/strings/translations/blink_strings_bs.xtb index db745f65..8f71ba54 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bs.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Unesite dio adrese ispred znaka "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" nije potpuna e-adresa.</translation> <translation id="5334352251556557839">Nije moguće reproducirati medijski sadržaj.</translation> <translation id="537648784377940524">Najraniji datum (<ph name="MIN_DATE_OR_TIME" />) mora doći prije najkasnijeg datuma (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">prošireno, dijalog je otvoren.</translation> <translation id="5406322316791861025">cifra</translation> <translation id="5425179576310518467">trenutni datum</translation> <translation id="5453733299334684579">stavka stabla</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">više opcija</translation> <translation id="576709008726043716">uvod</translation> <translation id="57838592816432529">Isključi zvuk</translation> +<translation id="5787939484346677755">prošireno, dostupne su opcije samodovršavanja.</translation> <translation id="5860033963881614850">Isklj.</translation> <translation id="588258955323874662">Cijeli ekran</translation> <translation id="5888666972993069672">Sada se emitira na uređaj <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">okvir s listom</translation> <translation id="6150588977291308318">bibliografija</translation> <translation id="6164829606128959761">metar</translation> +<translation id="6165053282446038410">prošireno, dostupan je sljedeći broj opcija samodovršavanja: <ph name="COUNT" />.</translation> <translation id="6166809985690652833">pogovor</translation> <translation id="6209276755895393898">Čini se da je ovo: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">trenutna stranica</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">zaglavlje</translation> <translation id="6941933287844615239">preuzmi medije</translation> <translation id="6981594929165378967">umetanje</translation> +<translation id="698788488269350478">proširen.</translation> <translation id="6989848892321993519">Produžite ovaj tekst tako da broj znakova bude najmanje <ph name="MIN_CHARACTERS" /> (trenutno koristite 1 znak).</translation> <translation id="7034405885550056553">prijedlog</translation> <translation id="709897737746224366">Udovoljite zadanom formatu.</translation> <translation id="7102274145889307184">trenutna lokacija</translation> <translation id="7118469954320184356">Nema opisa.</translation> <translation id="7139483182332611405">predgovor</translation> +<translation id="7198226213493847604">skočni gumb izbornika</translation> <translation id="7214187073215825913">informacije o sadržaju</translation> <translation id="7238347055216017155">isticanje</translation> <translation id="7263440858009898357">Odaberite stavku s liste.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">poglavlje</translation> <translation id="8845239796550121995">Sada se emitira na vaš TV</translation> <translation id="8851136666856101339">glavni</translation> +<translation id="8861621546968757188">skočni gumb dijaloga</translation> <translation id="8875657656876809964">Greška u reprodukciji videozapisa</translation> <translation id="8889402386540077796">Nijansa</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ca.xtb b/third_party/blink/public/strings/translations/blink_strings_ca.xtb index d71f541..8328f236 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ca.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ca.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Introduïu un nom d'usuari seguit de "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" no és una adreça completa.</translation> <translation id="5334352251556557839">No s'ha pogut reproduir el contingut multimèdia.</translation> <translation id="537648784377940524">La data mínima (<ph name="MIN_DATE_OR_TIME" />) ha de ser anterior a la data màxima (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">està desplegat; s'ha obert un quadre de diàleg.</translation> <translation id="5406322316791861025">figura</translation> <translation id="5425179576310518467">data actual</translation> <translation id="5453733299334684579">element de l'arbre</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">més opcions</translation> <translation id="576709008726043716">introducció</translation> <translation id="57838592816432529">Silencia</translation> +<translation id="5787939484346677755">està desplegat; hi ha opcions de compleció automàtica disponibles.</translation> <translation id="5860033963881614850">Desactivat</translation> <translation id="588258955323874662">Pantalla completa</translation> <translation id="5888666972993069672">S'està emetent a <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">quadre de llista</translation> <translation id="6150588977291308318">bibliografia</translation> <translation id="6164829606128959761">comptador</translation> +<translation id="6165053282446038410">està desplegat; hi ha <ph name="COUNT" /> opcions de compleció automàtica disponibles.</translation> <translation id="6166809985690652833">cloenda</translation> <translation id="6209276755895393898">Sembla el següent: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">pàgina actual</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">capçalera</translation> <translation id="6941933287844615239">baixa els fitxers multimèdia</translation> <translation id="6981594929165378967">inserció</translation> +<translation id="698788488269350478">està desplegat.</translation> <translation id="6989848892321993519">Allarga aquest text fins a <ph name="MIN_CHARACTERS" /> caràcters o més (ara n'utilitzes 1).</translation> <translation id="7034405885550056553">suggeriment</translation> <translation id="709897737746224366">Feu servir el format sol·licitat.</translation> <translation id="7102274145889307184">ubicació actual</translation> <translation id="7118469954320184356">No hi ha cap descripció disponible.</translation> <translation id="7139483182332611405">prefaci</translation> +<translation id="7198226213493847604">botó emergent del menú</translation> <translation id="7214187073215825913">informació sobre el contingut</translation> <translation id="7238347055216017155">èmfasi</translation> <translation id="7263440858009898357">Seleccioneu un element de la llista.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">capítol</translation> <translation id="8845239796550121995">S'està emetent al televisor</translation> <translation id="8851136666856101339">principal</translation> +<translation id="8861621546968757188">botó emergent del quadre de diàleg</translation> <translation id="8875657656876809964">Error de reproducció del vídeo</translation> <translation id="8889402386540077796">To</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_da.xtb b/third_party/blink/public/strings/translations/blink_strings_da.xtb index 9e9320b..333de8b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_da.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_da.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Angiv den del, der kommer før "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" er ufuldstændig.</translation> <translation id="5334352251556557839">Mediet kunne ikke afspilles.</translation> <translation id="537648784377940524">Minimumsdatoen (<ph name="MIN_DATE_OR_TIME" />) skal finde sted før maksimumsdatoen (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">udvidet, dialogboksen er åben.</translation> <translation id="5406322316791861025">tal</translation> <translation id="5425179576310518467">aktuel dato</translation> <translation id="5453733299334684579">træelement</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">flere valgmuligheder</translation> <translation id="576709008726043716">indledning</translation> <translation id="57838592816432529">Slå lyden fra</translation> +<translation id="5787939484346677755">udvidet, automatisk udfyldte valgmuligheder er tilgængelige.</translation> <translation id="5860033963881614850">Fra</translation> <translation id="588258955323874662">Fuld skærm</translation> <translation id="5888666972993069672">Caster nu til <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">listefelt</translation> <translation id="6150588977291308318">bibliografi</translation> <translation id="6164829606128959761">måler</translation> +<translation id="6165053282446038410">udvidet, <ph name="COUNT" /> automatisk udfyldte valgmuligheder er tilgængelige.</translation> <translation id="6166809985690652833">efterskrift</translation> <translation id="6209276755895393898">Det lader til at være: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">aktuel side</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">header</translation> <translation id="6941933287844615239">download medier</translation> <translation id="6981594929165378967">indsættelse</translation> +<translation id="698788488269350478">udvidet.</translation> <translation id="6989848892321993519">Forlæng denne tekst til <ph name="MIN_CHARACTERS" /> eller flere tegn (du bruger i øjeblikket ét tegn).</translation> <translation id="7034405885550056553">forslag</translation> <translation id="709897737746224366">Find et match til det anmodede format.</translation> <translation id="7102274145889307184">aktuel placering</translation> <translation id="7118469954320184356">Der er ingen beskrivelse.</translation> <translation id="7139483182332611405">forord</translation> +<translation id="7198226213493847604">pop op-knap til åbning af menu</translation> <translation id="7214187073215825913">oplysninger om indholdet</translation> <translation id="7238347055216017155">fremhævning</translation> <translation id="7263440858009898357">Vælg et punkt på listen.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">kapitel</translation> <translation id="8845239796550121995">Caster nu til dit fjernsyn</translation> <translation id="8851136666856101339">hovd</translation> +<translation id="8861621546968757188">pop op-knap til åbning af dialogboks</translation> <translation id="8875657656876809964">Fejl under videoafspilning</translation> <translation id="8889402386540077796">Farvetone</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> kB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_el.xtb b/third_party/blink/public/strings/translations/blink_strings_el.xtb index 4683ad4..f5ea25bc 100644 --- a/third_party/blink/public/strings/translations/blink_strings_el.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_el.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Καταχωρίστε το τμήμα της διεύθυνσης πριν το σύμβολο "<ph name="ATSIGN" />". Η διεύθυνση "<ph name="INVALIDADDRESS" />" δεν είναι πλήρης.</translation> <translation id="5334352251556557839">Δεν είναι δυνατή η αναπαραγωγή μέσων.</translation> <translation id="537648784377940524">Η ελάχιστη ημερομηνία (<ph name="MIN_DATE_OR_TIME" />) πρέπει να είναι προγενέστερη της μέγιστης ημερομηνίας (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">αναπτυγμένο, το παράθυρο διαλόγου είναι ανοικτό.</translation> <translation id="5406322316791861025">αριθμός</translation> <translation id="5425179576310518467">τρέχουσα ημερομηνία</translation> <translation id="5453733299334684579">στοιχείο δέντρου</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">περισσότερες επιλογές</translation> <translation id="576709008726043716">εισαγωγή</translation> <translation id="57838592816432529">Σίγαση</translation> +<translation id="5787939484346677755">αναπτυγμένο, διαθέσιμες επιλογές αυτόματης συμπλήρωσης.</translation> <translation id="5860033963881614850">Απενεργοποιημένη</translation> <translation id="588258955323874662">Πλήρης οθόνη</translation> <translation id="5888666972993069672">Μετάδοση τώρα στη συσκευή <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">πλαίσιο λίστας</translation> <translation id="6150588977291308318">βιβλιογραφία</translation> <translation id="6164829606128959761">μετρητής</translation> +<translation id="6165053282446038410">αναπτυγμένο, <ph name="COUNT" /> διαθέσιμες επιλογές αυτόματης συμπλήρωσης.</translation> <translation id="6166809985690652833">επίλογος</translation> <translation id="6209276755895393898">Φαίνεται πως είναι: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">τρέχουσα σελίδα</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">κεφαλίδα</translation> <translation id="6941933287844615239">λήψη μέσων</translation> <translation id="6981594929165378967">εισαγωγή</translation> +<translation id="698788488269350478">αναπτυγμένο.</translation> <translation id="6989848892321993519">Αυξήστε την έκταση αυτού του κειμένου στους <ph name="MIN_CHARACTERS" /> χαρακτήρες ή περισσότερο (αυτήν τη στιγμή χρησιμοποιείτε 1 χαρακτήρα).</translation> <translation id="7034405885550056553">πρόταση</translation> <translation id="709897737746224366">Αντιστοιχίστε τη ζητούμενη μορφή.</translation> <translation id="7102274145889307184">τρέχουσα τοποθεσία</translation> <translation id="7118469954320184356">Δεν υπάρχει διαθέσιμη περιγραφή.</translation> <translation id="7139483182332611405">πρόλογος</translation> +<translation id="7198226213493847604">αναδυόμενο κουμπί μενού</translation> <translation id="7214187073215825913">πληροφορίες για το περιεχόμενο</translation> <translation id="7238347055216017155">έμφαση</translation> <translation id="7263440858009898357">Επιλέξτε ένα στοιχείο από τη λίστα.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">κεφάλαιο</translation> <translation id="8845239796550121995">Γίνεται μετάδοση στην TV</translation> <translation id="8851136666856101339">κύριο</translation> +<translation id="8861621546968757188">αναδυόμενο κουμπί παραθύρου διαλόγου</translation> <translation id="8875657656876809964">Σφάλμα αναπαραγωγής βίντεο</translation> <translation id="8889402386540077796">Απόχρωση</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb index c583d0d..01b11d8d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Please enter a part followed by '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' is incomplete.</translation> <translation id="5334352251556557839">Unable to play media.</translation> <translation id="537648784377940524">Minimum date (<ph name="MIN_DATE_OR_TIME" />) must come before maximum date (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">expanded, dialogue opened.</translation> <translation id="5406322316791861025">figure</translation> <translation id="5425179576310518467">current date</translation> <translation id="5453733299334684579">tree item</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">more options</translation> <translation id="576709008726043716">introduction</translation> <translation id="57838592816432529">Mute</translation> +<translation id="5787939484346677755">expanded, auto-complete options available.</translation> <translation id="5860033963881614850">Off</translation> <translation id="588258955323874662">Full screen</translation> <translation id="5888666972993069672">Now casting to <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">list box</translation> <translation id="6150588977291308318">bibliography</translation> <translation id="6164829606128959761">meter</translation> +<translation id="6165053282446038410">expanded, <ph name="COUNT" /> auto-complete options available.</translation> <translation id="6166809985690652833">afterword</translation> <translation id="6209276755895393898">Appears to be: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">current page</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">header</translation> <translation id="6941933287844615239">download media</translation> <translation id="6981594929165378967">insertion</translation> +<translation id="698788488269350478">expanded.</translation> <translation id="6989848892321993519">Please lengthen this text to <ph name="MIN_CHARACTERS" /> characters or more (you are currently using 1 character).</translation> <translation id="7034405885550056553">suggestion</translation> <translation id="709897737746224366">Please match the format requested.</translation> <translation id="7102274145889307184">current location</translation> <translation id="7118469954320184356">No description available.</translation> <translation id="7139483182332611405">preface</translation> +<translation id="7198226213493847604">menu pop-up button</translation> <translation id="7214187073215825913">content information</translation> <translation id="7238347055216017155">emphasis</translation> <translation id="7263440858009898357">Please select an item in the list.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">chapter</translation> <translation id="8845239796550121995">Now casting to your TV</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">dialogue pop-up button</translation> <translation id="8875657656876809964">Video playback error</translation> <translation id="8889402386540077796">Hue</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_et.xtb b/third_party/blink/public/strings/translations/blink_strings_et.xtb index 84d913e..e0018405 100644 --- a/third_party/blink/public/strings/translations/blink_strings_et.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_et.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Sisestage märgile „<ph name="ATSIGN" />” eelnev osa. Aadress „<ph name="INVALIDADDRESS" />” pole täielik.</translation> <translation id="5334352251556557839">Meediasisu ei saa esitada.</translation> <translation id="537648784377940524">Minimaalne kuupäev (<ph name="MIN_DATE_OR_TIME" />) peab olema enne maksimaalset kuupäeva (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">laiendatud, dialoog on avatud.</translation> <translation id="5406322316791861025">joonis</translation> <translation id="5425179576310518467">praegune kuupäev</translation> <translation id="5453733299334684579">puuüksus</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">rohkem valikuid</translation> <translation id="576709008726043716">sissejuhatus</translation> <translation id="57838592816432529">Vaigista</translation> +<translation id="5787939484346677755">laiendatud, automaattäite valikud on saadaval.</translation> <translation id="5860033963881614850">Väljas</translation> <translation id="588258955323874662">Täisekraan</translation> <translation id="5888666972993069672">Nüüd kantakse üle seadmesse <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">loendikast</translation> <translation id="6150588977291308318">bibliograafia</translation> <translation id="6164829606128959761">mõõdik</translation> +<translation id="6165053282446038410">laiendatud, saadaval on <ph name="COUNT" /> automaattäite valikut.</translation> <translation id="6166809985690652833">järelsõna</translation> <translation id="6209276755895393898">Näib olevat: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">praegune leht</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">päis</translation> <translation id="6941933287844615239">laadi meedia alla</translation> <translation id="6981594929165378967">lisamine</translation> +<translation id="698788488269350478">laiendatud.</translation> <translation id="6989848892321993519">Pikendage teksti vähemalt <ph name="MIN_CHARACTERS" /> tähemärgini (kasutate praegu ühte tähemärki).</translation> <translation id="7034405885550056553">soovitus</translation> <translation id="709897737746224366">Vastendage nõutav vorming.</translation> <translation id="7102274145889307184">praegune asukoht</translation> <translation id="7118469954320184356">Kirjeldust pole.</translation> <translation id="7139483182332611405">eessõna</translation> +<translation id="7198226213493847604">menüü hüpiknupp</translation> <translation id="7214187073215825913">sisu teave</translation> <translation id="7238347055216017155">rõhutus</translation> <translation id="7263440858009898357">Valige loendist element.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">peatükk</translation> <translation id="8845239796550121995">Kantakse nüüd üle telerisse</translation> <translation id="8851136666856101339">pea</translation> +<translation id="8861621546968757188">dialoogi hüpiknupp</translation> <translation id="8875657656876809964">Video taasesituse viga</translation> <translation id="8889402386540077796">Värvitoon</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> kB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fi.xtb b/third_party/blink/public/strings/translations/blink_strings_fi.xtb index 14ab989..92b9d1cc 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fi.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Lisää <ph name="ATSIGN" />-osaa ennen tuleva osa. <ph name="INVALIDADDRESS" /> on puutteellinen.</translation> <translation id="5334352251556557839">Mediaa ei voi toistaa.</translation> <translation id="537648784377940524">Vähimmäispäivämäärän (<ph name="MIN_DATE_OR_TIME" />) on oltava ennen enimmäispäivämäärää (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">laajennettu, valintaikkuna avattu.</translation> <translation id="5406322316791861025">kuva</translation> <translation id="5425179576310518467">nykyinen päivämäärä</translation> <translation id="5453733299334684579">puukohde</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">lisäasetukset</translation> <translation id="576709008726043716">johdanto</translation> <translation id="57838592816432529">Mykistä</translation> +<translation id="5787939484346677755">laajennettu, automaattista täydennysehdotusta saatavilla.</translation> <translation id="5860033963881614850">Pois päältä</translation> <translation id="588258955323874662">Koko ruutu</translation> <translation id="5888666972993069672">Katsotaan TV:stä <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">luetteloruutu</translation> <translation id="6150588977291308318">lähdeluettelo</translation> <translation id="6164829606128959761">mittari</translation> +<translation id="6165053282446038410">laajennettu, <ph name="COUNT" /> automaattista täydennysehdotusta saatavilla.</translation> <translation id="6166809985690652833">jälkipuhe</translation> <translation id="6209276755895393898">Näkyy olevan: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">nykyinen sivu</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">otsikko</translation> <translation id="6941933287844615239">lataa media</translation> <translation id="6981594929165378967">lisäys</translation> +<translation id="698788488269350478">laajennettu.</translation> <translation id="6989848892321993519">Pidennä tämä teksti vähintään <ph name="MIN_CHARACTERS" /> merkkiin (tällä hetkellä käytössä 1 merkki).</translation> <translation id="7034405885550056553">ehdotus</translation> <translation id="709897737746224366">Käytä pyydettyä muotoilua.</translation> <translation id="7102274145889307184">nykyinen sijainti</translation> <translation id="7118469954320184356">Ei kuvausta saatavilla</translation> <translation id="7139483182332611405">johdanto</translation> +<translation id="7198226213493847604">valikon avauspainike</translation> <translation id="7214187073215825913">sisältötiedot</translation> <translation id="7238347055216017155">korostus</translation> <translation id="7263440858009898357">Valitse kohde luettelosta.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">luku</translation> <translation id="8845239796550121995">Suoratoistetaan televisioosi</translation> <translation id="8851136666856101339">pää</translation> +<translation id="8861621546968757188">valintaikkunan avauspainike</translation> <translation id="8875657656876809964">Videon toistovirhe</translation> <translation id="8889402386540077796">Sävy</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> kt</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fil.xtb b/third_party/blink/public/strings/translations/blink_strings_fil.xtb index f9325e6..4250ca0 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fil.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fil.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Mangyaring maglagay ng isang bahagi na sinusundan ng '<ph name="ATSIGN" />.' Hindi kumpleto ang '<ph name="INVALIDADDRESS" />.'</translation> <translation id="5334352251556557839">Hindi ma-play ang media.</translation> <translation id="537648784377940524">Mauna dapat ang Minimum na petsa (<ph name="MIN_DATE_OR_TIME" />) sa Maximum na petsa (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">na-expand, binuksan ang dialog.</translation> <translation id="5406322316791861025">anyo</translation> <translation id="5425179576310518467">kasalukuyang petsa</translation> <translation id="5453733299334684579">item sa tree</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">higit pang opsyon</translation> <translation id="576709008726043716">panimula</translation> <translation id="57838592816432529">I-mute</translation> +<translation id="5787939484346677755">na-expand, opsyon sa autocomplete ang available.</translation> <translation id="5860033963881614850">Naka-off</translation> <translation id="588258955323874662">Fullscreen</translation> <translation id="5888666972993069672">Nagka-cast na sa <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">kahon ng listahan</translation> <translation id="6150588977291308318">bibliograpiya</translation> <translation id="6164829606128959761">metro</translation> +<translation id="6165053282446038410">na-expand, <ph name="COUNT" /> (na) opsyon sa autocomplete ang available.</translation> <translation id="6166809985690652833">afterword</translation> <translation id="6209276755895393898">Mukhang: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">kasalukuyang page</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">header</translation> <translation id="6941933287844615239">i-download ang media</translation> <translation id="6981594929165378967">paglagay</translation> +<translation id="698788488269350478">na-expand.</translation> <translation id="6989848892321993519">Pakidagdagan ang text na ito nang hanggang <ph name="MIN_CHARACTERS" /> (na) character o higit pa (kasalukuyan kang gumagamit ng 1 character).</translation> <translation id="7034405885550056553">suhestyon</translation> <translation id="709897737746224366">Pakitugma ang hiniling na format.</translation> <translation id="7102274145889307184">kasalukuyang lokasyon</translation> <translation id="7118469954320184356">Walang available na paglalarawan.</translation> <translation id="7139483182332611405">preface</translation> +<translation id="7198226213493847604">button ng pop up ng menu</translation> <translation id="7214187073215825913">impormasyon ng content</translation> <translation id="7238347055216017155">diin</translation> <translation id="7263440858009898357">Mangyaring pumili ng item sa listahan.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">kabanata</translation> <translation id="8845239796550121995">Ikina-cast ngayon sa iyong TV</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">button ng pop up ng dialog</translation> <translation id="8875657656876809964">Error sa pag-playback ng video</translation> <translation id="8889402386540077796">Hue</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hi.xtb b/third_party/blink/public/strings/translations/blink_strings_hi.xtb index 0c3b64f8..a500b49a 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">कृपया '<ph name="ATSIGN" />' के पहले वाला भाग डालें. '<ph name="INVALIDADDRESS" />' अधूरा है.</translation> <translation id="5334352251556557839">मीडिया नहीं चला पा रहे हैं.</translation> <translation id="537648784377940524">शुरुआती तारीख (<ph name="MIN_DATE_OR_TIME" />), आखिरी तारीख (<ph name="MAX_DATE_OR_TIME" />) से पहले की होनी चाहिए.</translation> +<translation id="5378437566635403538">बड़ा किया गया, डायलॉग खोला गया.</translation> <translation id="5406322316791861025">आकृति</translation> <translation id="5425179576310518467">मौजूदा तारीख</translation> <translation id="5453733299334684579">ट्री आइटम</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">ज़्यादा विकल्प</translation> <translation id="576709008726043716">परिचय</translation> <translation id="57838592816432529">म्यूट करें</translation> +<translation id="5787939484346677755">बड़ा किया गया, इसे अपने-आप पूरा करने के लिए विकल्प उपलब्ध हैं.</translation> <translation id="5860033963881614850">बंद</translation> <translation id="588258955323874662">पूर्णस्क्रीन</translation> <translation id="5888666972993069672">अब <ph name="DEVICE_FRIENDLY_NAME" /> पर कास्ट किया जा रहा है</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">सूची बॉक्स</translation> <translation id="6150588977291308318">संदर्भ सूची</translation> <translation id="6164829606128959761">मीटर</translation> +<translation id="6165053282446038410">बड़ा किया गया, इसे अपने-आप पूरा करने के लिए <ph name="COUNT" /> विकल्प उपलब्ध हैं.</translation> <translation id="6166809985690652833">उपसंहार</translation> <translation id="6209276755895393898">यह इमेज इस बारे में लगती है: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">मौजूदा पेज</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">हेडर</translation> <translation id="6941933287844615239">मीडिया डाउनलोड करें</translation> <translation id="6981594929165378967">डालना</translation> +<translation id="698788488269350478">बड़ा किया गया.</translation> <translation id="6989848892321993519">कृपया इस लेख को <ph name="MIN_CHARACTERS" /> या उससे ज़्यादा वर्णों तक बढ़ाएं (आप इस समय 1 वर्ण का उपयोग कर रहे हैं).</translation> <translation id="7034405885550056553">सुझाव</translation> <translation id="709897737746224366">कृपया अनुरोधित प्रारूप का मिलान करें.</translation> <translation id="7102274145889307184">मौजूदा जगह की जानकारी</translation> <translation id="7118469954320184356">कोई जानकारी मौजूद नहीं है.</translation> <translation id="7139483182332611405">आमुख</translation> +<translation id="7198226213493847604">मेन्यू पॉप अप बटन</translation> <translation id="7214187073215825913">सामग्री की जानकारी</translation> <translation id="7238347055216017155">एक या एक से ज़्यादा बनाए गए खास वर्ण</translation> <translation id="7263440858009898357">कृपया सूची में किसी आइटम को चुनें.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">पाठ</translation> <translation id="8845239796550121995">अब आपके टीवी पर कास्ट हो रहा है</translation> <translation id="8851136666856101339">मुख्य</translation> +<translation id="8861621546968757188">डायलॉग पॉप अप बटन</translation> <translation id="8875657656876809964">वीडियो चलाने में गड़बड़ी</translation> <translation id="8889402386540077796">रंग</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> केबी</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hr.xtb b/third_party/blink/public/strings/translations/blink_strings_hr.xtb index 5aa308b0..acb0fbd 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Unesite dio adrese ispred znaka "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" nije potpuna e-adresa.</translation> <translation id="5334352251556557839">Reprodukcija medija nije uspjela.</translation> <translation id="537648784377940524">Minimalni datum (<ph name="MIN_DATE_OR_TIME" />) mora prethoditi Maksimalnom datumu (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">prošireno, dijalog je otvoren.</translation> <translation id="5406322316791861025">lik</translation> <translation id="5425179576310518467">trenutačni datum</translation> <translation id="5453733299334684579">stavka stabla</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">više opcija</translation> <translation id="576709008726043716">uvod</translation> <translation id="57838592816432529">Isključi zvuk</translation> +<translation id="5787939484346677755">prošireno, dostupne su opcije samodovršavanja.</translation> <translation id="5860033963881614850">Isključeno</translation> <translation id="588258955323874662">Puni zaslon</translation> <translation id="5888666972993069672">Trenutačno se emitira na uređaju <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">okvir s popisom</translation> <translation id="6150588977291308318">bibliografija</translation> <translation id="6164829606128959761">mjerač</translation> +<translation id="6165053282446038410">prošireno, dostupan je sljedeći broj opcija samodovršavanja: <ph name="COUNT" />.</translation> <translation id="6166809985690652833">pogovor</translation> <translation id="6209276755895393898">Čini se da je to: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">trenutačna stranica</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">zaglavlje</translation> <translation id="6941933287844615239">preuzmi medij</translation> <translation id="6981594929165378967">umetanje</translation> +<translation id="698788488269350478">proširen.</translation> <translation id="6989848892321993519">Produljite broj znakova u tekstu na minimalno <ph name="MIN_CHARACTERS" /> (trenutačno imate 1 znak).</translation> <translation id="7034405885550056553">prijedlog</translation> <translation id="709897737746224366">Udovoljite zadanom formatu.</translation> <translation id="7102274145889307184">trenutačna lokacija</translation> <translation id="7118469954320184356">Opis nije dostupan.</translation> <translation id="7139483182332611405">predgovor</translation> +<translation id="7198226213493847604">skočni gumb izbornika</translation> <translation id="7214187073215825913">informacije o sadržaju</translation> <translation id="7238347055216017155">isticanje</translation> <translation id="7263440858009898357">Odaberite stavku s popisa.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">poglavlje</translation> <translation id="8845239796550121995">Emitira se na televizoru</translation> <translation id="8851136666856101339">glav</translation> +<translation id="8861621546968757188">skočni gumb dijaloga</translation> <translation id="8875657656876809964">Pogreška pri reprodukciji videozapisa</translation> <translation id="8889402386540077796">Ton</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hu.xtb b/third_party/blink/public/strings/translations/blink_strings_hu.xtb index b0f0d29..0c46a94 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hu.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Kérjük, adja meg a „<ph name="ATSIGN" />” előtti részt is. A „<ph name="INVALIDADDRESS" />” cím nem teljes.</translation> <translation id="5334352251556557839">Nem sikerült a médiafájl lejátszása.</translation> <translation id="537648784377940524">A minimális dátumnak (<ph name="MIN_DATE_OR_TIME" />) a maximális dátum (<ph name="MAX_DATE_OR_TIME" />) elé kell esnie.</translation> +<translation id="5378437566635403538">kibontva, párbeszédablak megnyitva.</translation> <translation id="5406322316791861025">alak</translation> <translation id="5425179576310518467">aktuális dátum</translation> <translation id="5453733299334684579">faelem</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">további beállítások</translation> <translation id="576709008726043716">bevezetés</translation> <translation id="57838592816432529">Némítás</translation> +<translation id="5787939484346677755">kibontva, rendelkezésre állnak automatikus kiegészítési lehetőségek.</translation> <translation id="5860033963881614850">Kikapcsolva</translation> <translation id="588258955323874662">Teljes képernyő</translation> <translation id="5888666972993069672">Átküldés ide: <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">listamező</translation> <translation id="6150588977291308318">bibliográfia</translation> <translation id="6164829606128959761">mérő</translation> +<translation id="6165053282446038410">kibontva, <ph name="COUNT" /> automatikus kiegészítési lehetőség áll rendelkezésre.</translation> <translation id="6166809985690652833">utószó</translation> <translation id="6209276755895393898">Úgy tűnik, hogy a következőről van szó: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">aktuális oldal</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">fejléc</translation> <translation id="6941933287844615239">médiafájlok letöltése</translation> <translation id="6981594929165378967">beszúrás</translation> +<translation id="698788488269350478">kibontva.</translation> <translation id="6989848892321993519">Legalább <ph name="MIN_CHARACTERS" /> karakter hosszú szöveget adjon meg (jelenleg 1 karaktert használ).</translation> <translation id="7034405885550056553">javaslat</translation> <translation id="709897737746224366">Kérjük, tartsa magát a kívánt formátumhoz.</translation> <translation id="7102274145889307184">aktuális hely</translation> <translation id="7118469954320184356">Nincs leírás.</translation> <translation id="7139483182332611405">bevezető</translation> +<translation id="7198226213493847604">menüt megnyitó előugró gomb</translation> <translation id="7214187073215825913">tartalom adatai</translation> <translation id="7238347055216017155">hangsúly</translation> <translation id="7263440858009898357">Kérjük, válasszon egyet a lista elemei közül.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">fejezet</translation> <translation id="8845239796550121995">Átküldés a tévére folyamatban</translation> <translation id="8851136666856101339">fő</translation> +<translation id="8861621546968757188">párbeszédpanelt megnyitó előugró gomb</translation> <translation id="8875657656876809964">Videólejátszási hiba</translation> <translation id="8889402386540077796">Színárnyalat</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> kB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ka.xtb b/third_party/blink/public/strings/translations/blink_strings_ka.xtb index c989695..f07f12b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ka.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ka.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">გთხოვთ შეიყვანოთ ნაწილი, რომელსაც მოსდევს „<ph name="ATSIGN" />“. „<ph name="INVALIDADDRESS" />“ არის არასრული.</translation> <translation id="5334352251556557839">მედიის დაკვრა ვერ მოხერხდა.</translation> <translation id="537648784377940524">მინიმალური თარიღი (<ph name="MIN_DATE_OR_TIME" />) წინ უნდა უსწრებდეს მაქსიმალურ თარიღს (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">გაშლილია, გახსნილია დიალოგი.</translation> <translation id="5406322316791861025">მონაცემი</translation> <translation id="5425179576310518467">ამჟამინდელი თარიღი</translation> <translation id="5453733299334684579">ხის ელემენტი</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">დამატებითი ვარიანტები</translation> <translation id="576709008726043716">შესავალი</translation> <translation id="57838592816432529">დადუმება</translation> +<translation id="5787939484346677755">გაშლილია, ხელმისაწვდომია ავტომატური შევსების ვარიანტები.</translation> <translation id="5860033963881614850">გამორთვა</translation> <translation id="588258955323874662">სრული ეკრანი</translation> <translation id="5888666972993069672">ახლა ტრანსლირდება „<ph name="DEVICE_FRIENDLY_NAME" />“-ზე</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">სიის ველი</translation> <translation id="6150588977291308318">ბიბლიოგრაფია</translation> <translation id="6164829606128959761">მთვლელი</translation> +<translation id="6165053282446038410">გაშლილია, ხელმისაწვდომია ავტომატური შევსების <ph name="COUNT" /> ვარიანტი.</translation> <translation id="6166809985690652833">ბოლოსიტყვაობა</translation> <translation id="6209276755895393898">როგორც ჩანს, ეს არის <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">ამჟამინდელი გვერდი</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">ზედა კოლონტიტული</translation> <translation id="6941933287844615239">მედია-ფაილის ჩამოტვირთვა</translation> <translation id="6981594929165378967">ჩასმა</translation> +<translation id="698788488269350478">გაშლილია.</translation> <translation id="6989848892321993519">გთხოვთ, გაზარდოთ ეს ტექსტი <ph name="MIN_CHARACTERS" /> ან მეტ სიმბოლომდე (ამჟამად 1 სიმბოლოს იყენებთ).</translation> <translation id="7034405885550056553">შემოთავაზება</translation> <translation id="709897737746224366">გთხოვთ, შეუსაბამეთ მოთხოვნილ ფორმატს.</translation> <translation id="7102274145889307184">ამჟამინდელი მდებარეობა</translation> <translation id="7118469954320184356">აღწერილობა მიუწვდომელია.</translation> <translation id="7139483182332611405">წინათქმა</translation> +<translation id="7198226213493847604">მენიუს ამომხტარი ღილაკი</translation> <translation id="7214187073215825913">ინფორმაცია კონტენტის შესახებ</translation> <translation id="7238347055216017155">ხაზგასმა</translation> <translation id="7263440858009898357">გთხოვთ აირჩიოთ ელემენტი სიაში.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">თავი</translation> <translation id="8845239796550121995">ამჟამად ტრანსლირებს თქვენს ტელევიზორზე</translation> <translation id="8851136666856101339">ძირითადი</translation> +<translation id="8861621546968757188">დიალოგის ამომხტარი ღილაკი</translation> <translation id="8875657656876809964">შეცდომა ვიდეოს დაკვრისას</translation> <translation id="8889402386540077796">შეფერილობა</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> კბ</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lo.xtb b/third_party/blink/public/strings/translations/blink_strings_lo.xtb index 78141ce..b637f27 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lo.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lo.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">ກະລຸນາໃສ່ພາກສ່ວນໜຶ່ງຕາມມາດ້ວຍ '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' ບໍ່ສົມບູນ.</translation> <translation id="5334352251556557839">ບໍ່ສາມາດຫຼິ້ນສື່ໄດ້.</translation> <translation id="537648784377940524">ວັນທີໜ້ອຍສຸດ (<ph name="MIN_DATE_OR_TIME" />) ຕ້ອງມາກ່ອນວັນທີຫຼາຍສຸດ (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">ຂະຫຍາຍແລ້ວ, ເປີດກ່ອງໂຕ້ຕອບແລ້ວ.</translation> <translation id="5406322316791861025">ຮູບ</translation> <translation id="5425179576310518467">ວັນທີປະຈຸບັນ</translation> <translation id="5453733299334684579">ລາຍການຕົ້ນໄມ້</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">ຕົວເລືອກເພີ່ມເຕີມ</translation> <translation id="576709008726043716">ການນຳສະເໜີ</translation> <translation id="57838592816432529">ປິດສຽງ</translation> +<translation id="5787939484346677755">ຂະຫຍາຍແລ້ວ, ມີຕົວເລືອກການເຮັດສຳເລັດອັດຕະໂນມັດໃຫ້ນຳໃຊ້.</translation> <translation id="5860033963881614850">ປິດ</translation> <translation id="588258955323874662">ເຕັມໜ້າຈໍ</translation> <translation id="5888666972993069672">ຕອນນີ້ກຳລັງສົ່ງສັນຍານໃສ່ <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">ກ່ອງລາຍການ</translation> <translation id="6150588977291308318">ບັນນານຸກົມ</translation> <translation id="6164829606128959761">ແມັດ</translation> +<translation id="6165053282446038410">ຂະຫຍາຍແລ້ວ, ມີຕົວເລືອກການເຮັດສຳເລັດອັດຕະໂນມັດ <ph name="COUNT" /> ລາຍການໃຫ້ນຳໃຊ້.</translation> <translation id="6166809985690652833">ຄຳກ່າວທ້າຍບົດ</translation> <translation id="6209276755895393898">ປາກົດວ່າເປັນ: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">ໜ້າປັດຈຸບັນ</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">ຫົວເຈ້ຍ</translation> <translation id="6941933287844615239">ດາວໂຫຼດສື່</translation> <translation id="6981594929165378967">ການແຊກໃສ່</translation> +<translation id="698788488269350478">ຂະຫຍາຍແລ້ວ.</translation> <translation id="6989848892321993519">ກະລຸນາຂະຫຍາຍຄວາມຍາວຂອງຂໍ້ຄວາມນີ້ເປັນ <ph name="MIN_CHARACTERS" /> ຕົວອັກສອນຂຶ້ນໄປ (ໃນປັດຈຸບັນທ່ານກຳລັງໃຊ້ 1 ຕົວອັກສອນ).</translation> <translation id="7034405885550056553">ການແນະນຳ</translation> <translation id="709897737746224366">ກະລຸນາຈັບຄູ່ຮູບແບບທີ່ໄດ້ສະເໜີ.</translation> <translation id="7102274145889307184">ສະຖານທີ່ປັດຈຸບັນ</translation> <translation id="7118469954320184356">ບໍ່ມີລາຍລະອຽດ.</translation> <translation id="7139483182332611405">ຄຳນຳ</translation> +<translation id="7198226213493847604">ປຸ່ມປັອບອັບຂອງເມນູ</translation> <translation id="7214187073215825913">ຂໍ້ມູນເນື້ອຫາ</translation> <translation id="7238347055216017155">ເນັ້ນໜັກ</translation> <translation id="7263440858009898357">ກະລຸນາເລືອກລາຍການຢູ່ໃນລາຍຊື່.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">ພາກ</translation> <translation id="8845239796550121995">ດຽວນີ້ກຳລັງສົ່ງສັນຍານຫາໂທລະພາບຂອງທ່ານ</translation> <translation id="8851136666856101339">ຕົ້ນຕໍ</translation> +<translation id="8861621546968757188">ປຸ່ມປັອບອັບກ່ອງໂຕ້ຕອບ</translation> <translation id="8875657656876809964">ການຫຼິ້ນວິດີໂອມີຂໍ້ຜິດພາດ</translation> <translation id="8889402386540077796">ສີສັນ</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lv.xtb b/third_party/blink/public/strings/translations/blink_strings_lv.xtb index 817a241..4c37b29 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lv.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lv.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Lūdzu, ievadiet daļu, kas atrodas pirms zīmes <ph name="ATSIGN" />. “<ph name="INVALIDADDRESS" />” ir nepilna adrese.</translation> <translation id="5334352251556557839">Nevar atskaņot multividi.</translation> <translation id="537648784377940524">Minimālajai datuma vērtībai (<ph name="MIN_DATE_OR_TIME" />) ir jābūt pirms maksimālās datuma vērtības (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">izvērsts, atvērts dialoglodziņš.</translation> <translation id="5406322316791861025">cipars</translation> <translation id="5425179576310518467">pašreizējais datums</translation> <translation id="5453733299334684579">koka vienums</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">citas opcijas</translation> <translation id="576709008726043716">ievads</translation> <translation id="57838592816432529">Izslēgt skaņu</translation> +<translation id="5787939484346677755">izvērsts, ir pieejamas automātiskās pabeigšanas iespējas.</translation> <translation id="5860033963881614850">Izsl.</translation> <translation id="588258955323874662">Pilnekrāna</translation> <translation id="5888666972993069672">Notiek apraide šajā ierīcē: <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">sarakstlodziņš</translation> <translation id="6150588977291308318">bibliogrāfija</translation> <translation id="6164829606128959761">mērītājs</translation> +<translation id="6165053282446038410">izvērsts, pieejamo automātiskās pabeigšanas iespēju skaits ir <ph name="COUNT" />.</translation> <translation id="6166809985690652833">pēcvārds</translation> <translation id="6209276755895393898">Šķiet, ka tas ir: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">pašreizējā lapa</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">galvene</translation> <translation id="6941933287844615239">lejupielādēt multivides failus</translation> <translation id="6981594929165378967">ievietošana</translation> +<translation id="698788488269350478">izvērsts.</translation> <translation id="6989848892321993519">Lūdzu, papildiniet šo tekstu līdz vismaz <ph name="MIN_CHARACTERS" /> rakstzīmēm (pašlaik tas ietver 1 rakstzīmi).</translation> <translation id="7034405885550056553">ieteikums</translation> <translation id="709897737746224366">Pieskaņojiet vērtību prasītajam formātam.</translation> <translation id="7102274145889307184">pašreizējā atrašanās vieta</translation> <translation id="7118469954320184356">Nav apraksta.</translation> <translation id="7139483182332611405">ievadraksts</translation> +<translation id="7198226213493847604">poga uznirstošās izvēlnes atvēršanai</translation> <translation id="7214187073215825913">informācija par saturu</translation> <translation id="7238347055216017155">izcēlums</translation> <translation id="7263440858009898357">Atlasiet vienumu sarakstā.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">nodaļa</translation> <translation id="8845239796550121995">Pašlaik notiek apraide uz jūsu TV</translation> <translation id="8851136666856101339">galvenais</translation> +<translation id="8861621546968757188">poga uznirstošā dialoglodziņa atvēršanai</translation> <translation id="8875657656876809964">Videoklipa atskaņošanas kļūda</translation> <translation id="8889402386540077796">Nokrāsa</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mk.xtb b/third_party/blink/public/strings/translations/blink_strings_mk.xtb index cc1d340..5f90c79 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mk.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Внесете дел проследен со „<ph name="ATSIGN" />“. „<ph name="INVALIDADDRESS" />“ е нецелосна.</translation> <translation id="5334352251556557839">Не може да пушта аудиовизуелни содржини.</translation> <translation id="537648784377940524">Најраниот датум (<ph name="MIN_DATE_OR_TIME" />) мора да биде пред најдоцниот датум (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">Проширено, дијалогот е отворен.</translation> <translation id="5406322316791861025">слика</translation> <translation id="5425179576310518467">тековен датум</translation> <translation id="5453733299334684579">ставка на дрво</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">повеќе опции</translation> <translation id="576709008726043716">вовед</translation> <translation id="57838592816432529">Исклучи звук</translation> +<translation id="5787939484346677755">Проширено, достапни се опции за автоматско довршување.</translation> <translation id="5860033963881614850">Исклучено</translation> <translation id="588258955323874662">Цел екран</translation> <translation id="5888666972993069672">Сега се емитува на <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">поле со список</translation> <translation id="6150588977291308318">библиографија</translation> <translation id="6164829606128959761">мерач</translation> +<translation id="6165053282446038410">Проширено, достапни се <ph name="COUNT" /> опции за автоматско довршување.</translation> <translation id="6166809985690652833">поговор</translation> <translation id="6209276755895393898">Се чини дека е: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">тековна страница</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">заглавие</translation> <translation id="6941933287844615239">преземи аудио-визуелни содржини</translation> <translation id="6981594929165378967">вметнување</translation> +<translation id="698788488269350478">Проширено.</translation> <translation id="6989848892321993519">Продолжете го текстот на <ph name="MIN_CHARACTERS" /> знаци или повеќе (во моментов користите 1 знак).</translation> <translation id="7034405885550056553">предлог</translation> <translation id="709897737746224366">Усогласете го бараниот формат.</translation> <translation id="7102274145889307184">тековна локација</translation> <translation id="7118469954320184356">Нема достапен опис.</translation> <translation id="7139483182332611405">предговор</translation> +<translation id="7198226213493847604">копче за скокачко мени</translation> <translation id="7214187073215825913">информации за содржините</translation> <translation id="7238347055216017155">нагласување</translation> <translation id="7263440858009898357">Изберете ставка од листата.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">поглавје</translation> <translation id="8845239796550121995">Сега се емитува на вашиот TV</translation> <translation id="8851136666856101339">главно</translation> +<translation id="8861621546968757188">копче за скокачки дијалог</translation> <translation id="8875657656876809964">Грешка при репродукција на видео</translation> <translation id="8889402386540077796">Нијанса</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mn.xtb b/third_party/blink/public/strings/translations/blink_strings_mn.xtb index f3556d1..58e741bf 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mn.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">'<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' нь бүрэн гүйцэд биш бөгөөд бүрэн хаягаа оруулна уу.</translation> <translation id="5334352251556557839">Медиа тоглуулах боломжгүй байна.</translation> <translation id="537648784377940524">Хамгийн бага огноо (<ph name="MIN_DATE_OR_TIME" />) нь хамгийн их огнооны (<ph name="MAX_DATE_OR_TIME" />) өмнө байх ёстой.</translation> +<translation id="5378437566635403538">дэлгэсэн, харилцах цонхыг нээсэн.</translation> <translation id="5406322316791861025">дүрслэл</translation> <translation id="5425179576310518467">одоогийн огноо</translation> <translation id="5453733299334684579">салаалсан зүйл</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">бусад сонголт</translation> <translation id="576709008726043716">оршил</translation> <translation id="57838592816432529">Дууг хаах</translation> +<translation id="5787939484346677755">дэлгэсэн, автоматаар бөглөх сонголт боломжтой.</translation> <translation id="5860033963881614850">Идэвхгүй байна</translation> <translation id="588258955323874662">Дэлгэц дүүрэн</translation> <translation id="5888666972993069672">Одоо <ph name="DEVICE_FRIENDLY_NAME" />-д дамжуулж байна</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">жагсаалтын хайрцаг</translation> <translation id="6150588977291308318">ном зүй</translation> <translation id="6164829606128959761">метр</translation> +<translation id="6165053282446038410">дэлгэсэн, автоматаар бөглөх <ph name="COUNT" /> сонголт боломжтой.</translation> <translation id="6166809985690652833">төгсгөлийн үг</translation> <translation id="6209276755895393898">Дараах шиг харагдаж байна: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">одоогийн хуудас</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">толгой хэсэг</translation> <translation id="6941933287844615239">медиа татах</translation> <translation id="6981594929165378967">оруулалт</translation> +<translation id="698788488269350478">дэлгэсэн.</translation> <translation id="6989848892321993519">Энэ текстийг <ph name="MIN_CHARACTERS" /> болон түүнээс дээш тэмдэгтээр уртасгана уу (та одоогоор 1 тэмдэгт оруулсан байна).</translation> <translation id="7034405885550056553">зөвлөмж</translation> <translation id="709897737746224366">Заагдсан форматанд тааруулна уу.</translation> <translation id="7102274145889307184">одоогийн байршил</translation> <translation id="7118469954320184356">Тайлбар алга.</translation> <translation id="7139483182332611405">удиртгал</translation> +<translation id="7198226213493847604">цэсийн попап товчлуур</translation> <translation id="7214187073215825913">контентын мэдээлэл</translation> <translation id="7238347055216017155">тодруулга</translation> <translation id="7263440858009898357">Жагсаалтаас нэг зүйлийг сонгоно уу.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">бүлэг</translation> <translation id="8845239796550121995">Одоо таны ТВ-д дамжуулж байна</translation> <translation id="8851136666856101339">Гол</translation> +<translation id="8861621546968757188">харилцах цонхны попап товчлуур</translation> <translation id="8875657656876809964">Видеог дахин тоглуулахaд алдаа гарлаа</translation> <translation id="8889402386540077796">Hue</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> килобайт</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ms.xtb b/third_party/blink/public/strings/translations/blink_strings_ms.xtb index 6d3d9138..772f12b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ms.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ms.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Sila masukkan bahagian diikuti oleh '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' tidak lengkap.</translation> <translation id="5334352251556557839">Tidak dapat memainkan media.</translation> <translation id="537648784377940524">Tarikh Minimum (<ph name="MIN_DATE_OR_TIME" />) mesti lebih awal dari tarikh Maksimum (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">dikembangkan, dialog dibuka.</translation> <translation id="5406322316791861025">angka</translation> <translation id="5425179576310518467">tarikh semasa</translation> <translation id="5453733299334684579">item pohon</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">lagi pilihan</translation> <translation id="576709008726043716">pengenalan</translation> <translation id="57838592816432529">Redam</translation> +<translation id="5787939484346677755">dikembangkan, pilihan autolengkap tersedia.</translation> <translation id="5860033963881614850">Dimatikan</translation> <translation id="588258955323874662">Skrin penuh</translation> <translation id="5888666972993069672">Sekarang menghantar ke <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">kotak senarai</translation> <translation id="6150588977291308318">bibliografi</translation> <translation id="6164829606128959761">meter</translation> +<translation id="6165053282446038410">dikembangkan, <ph name="COUNT" /> pilihan autolengkap tersedia.</translation> <translation id="6166809985690652833">kata hujungan</translation> <translation id="6209276755895393898">Nampak seperti: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">halaman semasa</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">pengepala</translation> <translation id="6941933287844615239">muat turun media</translation> <translation id="6981594929165378967">penyisipan</translation> +<translation id="698788488269350478">dikembangkan.</translation> <translation id="6989848892321993519">Sila panjangkan teks ini kepada <ph name="MIN_CHARACTERS" /> aksara atau lebih (anda sedang menggunakan 1 aksara).</translation> <translation id="7034405885550056553">cadangan</translation> <translation id="709897737746224366">Sila padankan dengan format yang diminta.</translation> <translation id="7102274145889307184">lokasi semasa</translation> <translation id="7118469954320184356">Perihalan tidak tersedia.</translation> <translation id="7139483182332611405">kata penghantar</translation> +<translation id="7198226213493847604">butang timbul menu</translation> <translation id="7214187073215825913">maklumat kandungan</translation> <translation id="7238347055216017155">penekanan</translation> <translation id="7263440858009898357">Sila pilih item dalam senarai.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">bab</translation> <translation id="8845239796550121995">Menghantar ke TV anda sekarang</translation> <translation id="8851136666856101339">utama</translation> +<translation id="8861621546968757188">butang timbul dialog</translation> <translation id="8875657656876809964">Ralat main balik video</translation> <translation id="8889402386540077796">Rona</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_my.xtb b/third_party/blink/public/strings/translations/blink_strings_my.xtb index 9b9615ee..9094cc6 100644 --- a/third_party/blink/public/strings/translations/blink_strings_my.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_my.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">'<ph name="ATSIGN" />' ၏နောက်တွင် တစ်ပိုင်း ရိုက်ထည့်ပါ။ '<ph name="INVALIDADDRESS" />' က မပြည့်စုံပါ။</translation> <translation id="5334352251556557839">မီဒီယာ ဖွင့်၍ မရပါ။</translation> <translation id="537648784377940524">အနည်းဆုံးရက်စွဲ (<ph name="MIN_DATE_OR_TIME" />) သည် အများဆုံးရက်စွဲ (<ph name="MAX_DATE_OR_TIME" />) အရင် ဖြစ်ရပါမည်။</translation> +<translation id="5378437566635403538">ချဲ့ထားသည်၊ ဒိုင်ယာလော့ခ် ဖွင့်ထားသည်။</translation> <translation id="5406322316791861025">ပုံပန်း</translation> <translation id="5425179576310518467">ယနေ့ရက်စွဲ</translation> <translation id="5453733299334684579">သစ်ပင်ပုံစံဇယား အကြောင်းအရာ</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">နောက်ထပ် ရွေးချယ်စရာများ</translation> <translation id="576709008726043716">နိဒါန်း</translation> <translation id="57838592816432529">တိတ်ရန်</translation> +<translation id="5787939484346677755">ချဲ့ထားသည်၊ အလိုအလျောက်ဖြည့်စရာများ ရွေးနိုင်သည်။</translation> <translation id="5860033963881614850">ပိတ်ထား</translation> <translation id="588258955323874662">မျက်နှာပြင် အပြည့်</translation> <translation id="5888666972993069672"><ph name="DEVICE_FRIENDLY_NAME" /> သို့ ယခု ကာစ်လုပ်နေသည်</translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">စာရင်းအကွက်</translation> <translation id="6150588977291308318">ကျမ်းကိုးစာရင်း</translation> <translation id="6164829606128959761">မီတာ</translation> +<translation id="6165053282446038410">ချဲ့ထားသည်၊ အလိုအလျောက်ဖြည့်စရာ <ph name="COUNT" /> ခု ရွေးနိုင်သည်။</translation> <translation id="6166809985690652833">စာအုပ်ဖတ်ပြီးနောက် သုံးသပ်ချက်</translation> <translation id="6209276755895393898">အောက်ပါ ဖြစ်ပုံရသည်- <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">လက်ရှိ စာမျက်နှာ</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">ခေါင်းစီး</translation> <translation id="6941933287844615239">မီဒီယာကို ဒေါင်းလုဒ်လုပ်ပါ</translation> <translation id="6981594929165378967">ထည့်သွင်းခြင်း</translation> +<translation id="698788488269350478">ချဲ့ထားသည်။</translation> <translation id="6989848892321993519">ဤစာသားကို စာလုံးရေ <ph name="MIN_CHARACTERS" /> နှင့်အထက်ဖြစ်အောင် လုပ်ပါ (လက်ရှိတွင် စာလုံးရေ ၁ လုံးအသုံးပြုထားသည်)။</translation> <translation id="7034405885550056553">အကြံပြုချက်</translation> <translation id="709897737746224366">ကျေးဇူးပြုပြီး တောင်းဆိုထားသည့် ပုံစံနှင့် ကိုက်ညီပါစေ။</translation> <translation id="7102274145889307184">လက်ရှိတည်နေရာ</translation> <translation id="7118469954320184356">အကြောင်းအရာ မရှိပါ။</translation> <translation id="7139483182332611405">အမှာစကား</translation> +<translation id="7198226213493847604">မီနူး ပေါ့ပ်အပ်ခလုတ်</translation> <translation id="7214187073215825913">အကြောင်းအရာ အချက်အလက်</translation> <translation id="7238347055216017155">အထူးပြုမှု</translation> <translation id="7263440858009898357">စာရင်းမှ အမယ်များကို ကျေးဇူးပြုပြီး ရွေးချယ်ပါ။</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">အခန်း</translation> <translation id="8845239796550121995">ယခု သင့် TV သို့ ကာစ်လုပ်နေပါသည်</translation> <translation id="8851136666856101339">ပင်မ</translation> +<translation id="8861621546968757188">ဒိုင်ယာလော့ခ် ပေါ့ပ်အပ်ခလုတ်</translation> <translation id="8875657656876809964">ဗီဒီယိုဖွင့်ခြင်း အမှား</translation> <translation id="8889402386540077796">အရောင်အဆင်း</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_no.xtb b/third_party/blink/public/strings/translations/blink_strings_no.xtb index caf7994a..c731f111 100644 --- a/third_party/blink/public/strings/translations/blink_strings_no.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_no.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Skriv inn en del etterfulgt av «<ph name="ATSIGN" />». «<ph name="INVALIDADDRESS" />» er ufullstendig.</translation> <translation id="5334352251556557839">Kunne ikke spille innholdet.</translation> <translation id="537648784377940524">Minimumsdatoen (<ph name="MIN_DATE_OR_TIME" />) må komme før maksimumsdatoen (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">vises; en dialogboks er åpnet.</translation> <translation id="5406322316791861025">figur</translation> <translation id="5425179576310518467">datoen i dag</translation> <translation id="5453733299334684579">treelement</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">flere alternativer</translation> <translation id="576709008726043716">innledning</translation> <translation id="57838592816432529">Kutt lyden</translation> +<translation id="5787939484346677755">vises; alternativer for autofullføring er tilgjengelig.</translation> <translation id="5860033963881614850">Av</translation> <translation id="588258955323874662">Fullskjerm</translation> <translation id="5888666972993069672">Caster nå til <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">listefelt</translation> <translation id="6150588977291308318">bibliografi</translation> <translation id="6164829606128959761">måler</translation> +<translation id="6165053282446038410">vises; <ph name="COUNT" /> alternativer for autofullføring er tilgjengelig.</translation> <translation id="6166809985690652833">etterord</translation> <translation id="6209276755895393898">Dette ser ut til å være <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">gjeldende side</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">topptekst</translation> <translation id="6941933287844615239">last ned medier</translation> <translation id="6981594929165378967">innsetting</translation> +<translation id="698788488269350478">vises.</translation> <translation id="6989848892321993519">Øk lengden på denne teksten med minst <ph name="MIN_CHARACTERS" /> tegn (du bruker for øyeblikket 1 tegn).</translation> <translation id="7034405885550056553">forslag</translation> <translation id="709897737746224366">Sørg for samsvar med det forespurte formatet.</translation> <translation id="7102274145889307184">nåværende posisjon</translation> <translation id="7118469954320184356">Ingen beskrivelse er tilgjengelig.</translation> <translation id="7139483182332611405">forord</translation> +<translation id="7198226213493847604">knapp som åpner meny i forgrunnen</translation> <translation id="7214187073215825913">innholdsinformasjon</translation> <translation id="7238347055216017155">utheving</translation> <translation id="7263440858009898357">Velg en artikkel i listen.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">kapittel</translation> <translation id="8845239796550121995">Caster til TV-en nå</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">knapp som åpner dialogboks i forgrunnen</translation> <translation id="8875657656876809964">Feil ved videoavspilling</translation> <translation id="8889402386540077796">Fargetone</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> kB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb index e19fb76..af0a73b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Introduza uma parte seguida de "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" está incompleto.</translation> <translation id="5334352251556557839">Não é possível reproduzir multimédia.</translation> <translation id="537648784377940524">A Data mínima (<ph name="MIN_DATE_OR_TIME" />) tem de ser anterior à Data máxima (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">expandido, caixa de diálogo aberta.</translation> <translation id="5406322316791861025">figura</translation> <translation id="5425179576310518467">data atual</translation> <translation id="5453733299334684579">item de árvore</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">mais opções</translation> <translation id="576709008726043716">introdução</translation> <translation id="57838592816432529">Desativar som</translation> +<translation id="5787939484346677755">expandido, opções de preenchimento automático disponíveis.</translation> <translation id="5860033963881614850">Desativado</translation> <translation id="588258955323874662">Ecrã inteiro</translation> <translation id="5888666972993069672">A transmitir agora para <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">caixa de lista</translation> <translation id="6150588977291308318">bibliografia</translation> <translation id="6164829606128959761">contador</translation> +<translation id="6165053282446038410">expandido, <ph name="COUNT" /> opções de preenchimento automático disponíveis.</translation> <translation id="6166809985690652833">posfácio</translation> <translation id="6209276755895393898">Parece ser: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">página atual</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">cabeçalho</translation> <translation id="6941933287844615239">transferir multimédia</translation> <translation id="6981594929165378967">inserção</translation> +<translation id="698788488269350478">expandido.</translation> <translation id="6989848892321993519">Aumente este texto para <ph name="MIN_CHARACTERS" /> ou mais carateres (atualmente, está a utilizar 1 caráter).</translation> <translation id="7034405885550056553">sugestão</translation> <translation id="709897737746224366">Faça corresponder o formato pedido.</translation> <translation id="7102274145889307184">localização atual</translation> <translation id="7118469954320184356">Nenhuma descrição disponível.</translation> <translation id="7139483182332611405">prefácio</translation> +<translation id="7198226213493847604">botão pop-up do menu</translation> <translation id="7214187073215825913">informações sobre o conteúdo</translation> <translation id="7238347055216017155">ênfase</translation> <translation id="7263440858009898357">Selecione um item na lista.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">capítulo</translation> <translation id="8845239796550121995">A transmitir na sua TV…</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">botão pop-up da caixa de diálogo</translation> <translation id="8875657656876809964">Erro de reprodução de vídeo.</translation> <translation id="8889402386540077796">Tonalidade</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ro.xtb b/third_party/blink/public/strings/translations/blink_strings_ro.xtb index 9c18410f..3942338 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ro.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ro.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Introduceți o valoare urmată de semnul „<ph name="ATSIGN" />”. Adresa „<ph name="INVALIDADDRESS" />” nu este completă.</translation> <translation id="5334352251556557839">Nu se pot reda fișiere media.</translation> <translation id="537648784377940524">Data minimă (<ph name="MIN_DATE_OR_TIME" />) trebuie să fie anterioară datei maxime (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">extins, casetă de dialog deschisă.</translation> <translation id="5406322316791861025">cifră</translation> <translation id="5425179576310518467">data actuală</translation> <translation id="5453733299334684579">element arbore</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">mai multe opțiuni</translation> <translation id="576709008726043716">introducere</translation> <translation id="57838592816432529">Dezactivează sunetul</translation> +<translation id="5787939484346677755">extins, opțiuni de completare automată disponibile.</translation> <translation id="5860033963881614850">Dezactivat</translation> <translation id="588258955323874662">Ecran complet</translation> <translation id="5888666972993069672">Se proiectează acum pe <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">casetă listă</translation> <translation id="6150588977291308318">bibliografie</translation> <translation id="6164829606128959761">instrument de măsurare</translation> +<translation id="6165053282446038410">extins, <ph name="COUNT" /> opțiuni de completare automată disponibile.</translation> <translation id="6166809985690652833">postfață</translation> <translation id="6209276755895393898">Pare a fi: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">pagina actuală</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">antet</translation> <translation id="6941933287844615239">descarcă conținut media</translation> <translation id="6981594929165378967">inserare</translation> +<translation id="698788488269350478">extins.</translation> <translation id="6989848892321993519">Mărește acest text la cel puțin <ph name="MIN_CHARACTERS" /> caractere (în prezent folosești 1 caracter).</translation> <translation id="7034405885550056553">sugestie</translation> <translation id="709897737746224366">Respectă formatul solicitat.</translation> <translation id="7102274145889307184">locația actuală</translation> <translation id="7118469954320184356">Nu există nicio descriere disponibilă.</translation> <translation id="7139483182332611405">prefață</translation> +<translation id="7198226213493847604">buton pop-up de meniu</translation> <translation id="7214187073215825913">informații despre conținut</translation> <translation id="7238347055216017155">subliniere</translation> <translation id="7263440858009898357">Selectează un articol din listă.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">capitol</translation> <translation id="8845239796550121995">Acum se proiectează pe televizor</translation> <translation id="8851136666856101339">principal</translation> +<translation id="8861621546968757188">buton pop-up al ferestrei de dialog</translation> <translation id="8875657656876809964">Eroare de redare video</translation> <translation id="8889402386540077796">Nuanță</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KO</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb index 88149ba..6402625a8 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Unesite neki deo pre „<ph name="ATSIGN" />“. Adresa „<ph name="INVALIDADDRESS" />“ je nepotpuna.</translation> <translation id="5334352251556557839">Puštanje medija nije uspelo.</translation> <translation id="537648784377940524">Minimalni datum (<ph name="MIN_DATE_OR_TIME" />) mora da bude pre maksimalnog datuma (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">prošireno, otvoren je dijalog.</translation> <translation id="5406322316791861025">cifra</translation> <translation id="5425179576310518467">trenutni datum</translation> <translation id="5453733299334684579">stavka stabla</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">još opcija</translation> <translation id="576709008726043716">uvod</translation> <translation id="57838592816432529">Isključi zvuk</translation> +<translation id="5787939484346677755">prošireno, dostupne su opcije za automatsko dovršavanje.</translation> <translation id="5860033963881614850">Isključeno</translation> <translation id="588258955323874662">Ceo ekran</translation> <translation id="5888666972993069672">Trenutno se prebacuje na <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">okvir sa listom</translation> <translation id="6150588977291308318">bibliografija</translation> <translation id="6164829606128959761">merač</translation> +<translation id="6165053282446038410">prošireno, dostupnih opcija za automatsko dovršavanje: <ph name="COUNT" />.</translation> <translation id="6166809985690652833">pogovor</translation> <translation id="6209276755895393898">Izgleda da je ovo: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">aktuelna stranica</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">zaglavlje</translation> <translation id="6941933287844615239">preuzmi medije</translation> <translation id="6981594929165378967">umetanje</translation> +<translation id="698788488269350478">prošireno.</translation> <translation id="6989848892321993519">Produžite ovaj tekst na bar <ph name="MIN_CHARACTERS" /> znak(ov)a (trenutno koristite 1 znak).</translation> <translation id="7034405885550056553">predlog</translation> <translation id="709897737746224366">Izaberite zahtevani format.</translation> <translation id="7102274145889307184">trenutna lokacija</translation> <translation id="7118469954320184356">Opis nije dostupan.</translation> <translation id="7139483182332611405">predgovor</translation> +<translation id="7198226213493847604">iskačuće dugme menija</translation> <translation id="7214187073215825913">informacije o sadržaju</translation> <translation id="7238347055216017155">naglašavanje</translation> <translation id="7263440858009898357">Izaberite stavku sa liste.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">poglavlje</translation> <translation id="8845239796550121995">Trenutno se prebacuje na TV</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">iskačuće dugme za dijalog</translation> <translation id="8875657656876809964">Greška pri puštanju video snimka</translation> <translation id="8889402386540077796">Nijansa</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr.xtb b/third_party/blink/public/strings/translations/blink_strings_sr.xtb index 0496757..78af9e1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Унесите неки део пре „<ph name="ATSIGN" />“. Адреса „<ph name="INVALIDADDRESS" />“ је непотпуна.</translation> <translation id="5334352251556557839">Пуштање медија није успело.</translation> <translation id="537648784377940524">Минимални датум (<ph name="MIN_DATE_OR_TIME" />) мора да буде пре максималног датума (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">проширено, отворен је дијалог.</translation> <translation id="5406322316791861025">цифра</translation> <translation id="5425179576310518467">тренутни датум</translation> <translation id="5453733299334684579">ставка стабла</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">још опција</translation> <translation id="576709008726043716">увод</translation> <translation id="57838592816432529">Искључи звук</translation> +<translation id="5787939484346677755">проширено, доступне су опције за аутоматско довршавање.</translation> <translation id="5860033963881614850">Искључено</translation> <translation id="588258955323874662">Цеo екран</translation> <translation id="5888666972993069672">Тренутно се пребацује на <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">оквир са листом</translation> <translation id="6150588977291308318">библиографија</translation> <translation id="6164829606128959761">мерач</translation> +<translation id="6165053282446038410">проширено, доступних опција за аутоматско довршавање: <ph name="COUNT" />.</translation> <translation id="6166809985690652833">поговор</translation> <translation id="6209276755895393898">Изгледа да је ово: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">актуелна страница</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">заглавље</translation> <translation id="6941933287844615239">преузми медије</translation> <translation id="6981594929165378967">уметање</translation> +<translation id="698788488269350478">проширено.</translation> <translation id="6989848892321993519">Продужите овај текст на бар <ph name="MIN_CHARACTERS" /> знак(ов)а (тренутно користите 1 знак).</translation> <translation id="7034405885550056553">предлог</translation> <translation id="709897737746224366">Изаберите захтевани формат.</translation> <translation id="7102274145889307184">тренутна локација</translation> <translation id="7118469954320184356">Опис није доступан.</translation> <translation id="7139483182332611405">предговор</translation> +<translation id="7198226213493847604">искачуће дугме менија</translation> <translation id="7214187073215825913">информације о садржају</translation> <translation id="7238347055216017155">наглашавање</translation> <translation id="7263440858009898357">Изаберите ставку са листе.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">поглавље</translation> <translation id="8845239796550121995">Тренутно се пребацује на ТВ</translation> <translation id="8851136666856101339">main</translation> +<translation id="8861621546968757188">искачуће дугме за дијалог</translation> <translation id="8875657656876809964">Грешка при пуштању видео снимка</translation> <translation id="8889402386540077796">Нијанса</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sw.xtb b/third_party/blink/public/strings/translations/blink_strings_sw.xtb index 917f224..c63d6f0 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sw.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sw.xtb
@@ -151,6 +151,7 @@ <translation id="5307600278924710095">Tafadhali ingiza sehemu ikifuatiwa na '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' haijakamilika.</translation> <translation id="5334352251556557839">Imeshindwa kucheza maudhui.</translation> <translation id="537648784377940524">Tarehe ya awali zaidi (<ph name="MIN_DATE_OR_TIME" />) lazima ije kabla ya Tarehe ya baadaye zaidi (<ph name="MAX_DATE_OR_TIME" />).</translation> +<translation id="5378437566635403538">imepanuliwa, kidirisha kimefunguliwa.</translation> <translation id="5406322316791861025">umbo</translation> <translation id="5425179576310518467">tarehe ya sasa</translation> <translation id="5453733299334684579">kipengee cha mti</translation> @@ -167,6 +168,7 @@ <translation id="5677946354068040947">chaguo zaidi</translation> <translation id="576709008726043716">utangulizi</translation> <translation id="57838592816432529">Zima sauti</translation> +<translation id="5787939484346677755">imepanuliwa, chaguo za kukamilisha kiotomatiki zinapatikana.</translation> <translation id="5860033963881614850">Kimezimwa</translation> <translation id="588258955323874662">Skrini nzima</translation> <translation id="5888666972993069672">Sasa inatuma kwenye <ph name="DEVICE_FRIENDLY_NAME" /></translation> @@ -180,6 +182,7 @@ <translation id="6023896073578205740">kikasha cha orodha</translation> <translation id="6150588977291308318">bibliografia</translation> <translation id="6164829606128959761">mita</translation> +<translation id="6165053282446038410">imepanuliwa, chaguo <ph name="COUNT" /> za kukamilisha kiotomatiki zinapatikana.</translation> <translation id="6166809985690652833">maelezo kuhusu kitabu</translation> <translation id="6209276755895393898">Inaonekana kuwa: <ph name="DESCRIPTION" /></translation> <translation id="6212595056017402527">ukurasa wa sasa</translation> @@ -214,12 +217,14 @@ <translation id="693476918119313863">kichwa</translation> <translation id="6941933287844615239">pakua maudhui</translation> <translation id="6981594929165378967">uwekaji</translation> +<translation id="698788488269350478">imepanuliwa.</translation> <translation id="6989848892321993519">Tafadhali refusha maandishi haya hadi herufi <ph name="MIN_CHARACTERS" /> au zaidi (kwa sasa unatumia herufi 1).</translation> <translation id="7034405885550056553">pendekezo</translation> <translation id="709897737746224366">Tafadhali linganisha umbizo lililoombwa.</translation> <translation id="7102274145889307184">mahali ulipo sasa</translation> <translation id="7118469954320184356">Hakuna maelezo yanayopatikana.</translation> <translation id="7139483182332611405">dibaji</translation> +<translation id="7198226213493847604">kitufe cha dirisha ibukizi la menyu</translation> <translation id="7214187073215825913">maelezo ya maudhui</translation> <translation id="7238347055216017155">mkazo</translation> <translation id="7263440858009898357">Tafadhali chagua kipengee katika orodha.</translation> @@ -287,6 +292,7 @@ <translation id="8808573423886751634">sura</translation> <translation id="8845239796550121995">Sasa inatuma kwenye TV yako</translation> <translation id="8851136666856101339">kuu</translation> +<translation id="8861621546968757188">kitufe cha dirisha ibukizi</translation> <translation id="8875657656876809964">Hitilafu ya kucheza video</translation> <translation id="8889402386540077796">Rangi</translation> <translation id="8901569739625249689">KB <ph name="QUANTITY" /></translation>
diff --git a/third_party/blink/public/web/web_widget.h b/third_party/blink/public/web/web_widget.h index 5eb72a7a..3b7aa1e 100644 --- a/third_party/blink/public/web/web_widget.h +++ b/third_party/blink/public/web/web_widget.h
@@ -85,7 +85,7 @@ // is called. |settings| is typically null. When |settings| is null // the default settings will be used, tests may provide a |settings| object to // override the defaults. - virtual cc::LayerTreeHost* InitializeCompositing( + virtual void InitializeCompositing( scheduler::WebThreadScheduler* main_thread_scheduler, cc::TaskGraphRunner* task_graph_runner, const ScreenInfo& screen_info,
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.cc b/third_party/blink/renderer/bindings/core/v8/module_record.cc index ef6715f..e701abc 100644 --- a/third_party/blink/renderer/bindings/core/v8/module_record.cc +++ b/third_party/blink/renderer/bindings/core/v8/module_record.cc
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/bindings/core/v8/referrer_script_info.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_script_runner.h" +#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h" #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/module_record_resolver.h" @@ -46,14 +47,12 @@ v8::Local<v8::Module> ModuleRecord::Compile( v8::Isolate* isolate, - const String& source, - const KURL& source_url, + const ModuleScriptCreationParams& params, const KURL& base_url, const ScriptFetchOptions& options, const TextPosition& text_position, ExceptionState& exception_state, mojom::blink::V8CacheOptions v8_cache_options, - SingleCachedMetadataHandler* cache_handler, ScriptSourceLocationType source_location_type, ModuleRecordProduceCacheData** out_produce_cache_data) { v8::TryCatch try_catch(isolate); @@ -71,12 +70,12 @@ V8CodeCache::ProduceCacheOptions produce_cache_options; v8::ScriptCompiler::NoCacheReason no_cache_reason; std::tie(compile_options, produce_cache_options, no_cache_reason) = - V8CodeCache::GetCompileOptions(v8_cache_options, cache_handler, - source.length(), source_location_type); + V8CodeCache::GetCompileOptions(v8_cache_options, params.CacheHandler(), + params.GetSourceText().length(), + source_location_type); if (!V8ScriptRunner::CompileModule( - isolate, source, cache_handler, source_url, text_position, - compile_options, no_cache_reason, + isolate, params, text_position, compile_options, no_cache_reason, ReferrerScriptInfo(base_url, options, ReferrerScriptInfo::BaseUrlSource::kOther)) .ToLocal(&module)) { @@ -89,7 +88,7 @@ if (out_produce_cache_data) { *out_produce_cache_data = MakeGarbageCollected<ModuleRecordProduceCacheData>( - isolate, cache_handler, produce_cache_options, module); + isolate, params.CacheHandler(), produce_cache_options, module); } return module;
diff --git a/third_party/blink/renderer/bindings/core/v8/module_record.h b/third_party/blink/renderer/bindings/core/v8/module_record.h index 289213f..fa5939b0 100644 --- a/third_party/blink/renderer/bindings/core/v8/module_record.h +++ b/third_party/blink/renderer/bindings/core/v8/module_record.h
@@ -22,6 +22,7 @@ class ExceptionState; class KURL; +class ModuleScriptCreationParams; class ScriptFetchOptions; class ScriptState; class ScriptValue; @@ -63,14 +64,12 @@ public: static v8::Local<v8::Module> Compile( v8::Isolate*, - const String& source, - const KURL& source_url, + const ModuleScriptCreationParams& params, const KURL& base_url, const ScriptFetchOptions&, const TextPosition&, ExceptionState&, mojom::blink::V8CacheOptions = mojom::blink::V8CacheOptions::kDefault, - SingleCachedMetadataHandler* = nullptr, ScriptSourceLocationType source_location_type = ScriptSourceLocationType::kInternal, ModuleRecordProduceCacheData** out_produce_cache_data = nullptr);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_regexp.cc b/third_party/blink/renderer/bindings/core/v8/script_regexp.cc index dc0523f..f5ec162 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_regexp.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_regexp.cc
@@ -125,4 +125,8 @@ return match_offset.As<v8::Int32>()->Value() + start_from; } +void ScriptRegexp::Trace(Visitor* visitor) const { + visitor->Trace(regex_); +} + } // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/script_regexp.h b/third_party/blink/renderer/bindings/core/v8/script_regexp.h index 58df59b..214648b0 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_regexp.h +++ b/third_party/blink/renderer/bindings/core/v8/script_regexp.h
@@ -29,7 +29,8 @@ #include "base/macros.h" #include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/platform/bindings/scoped_persistent.h" +#include "third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h" +#include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "v8/include/v8.h" @@ -37,9 +38,7 @@ enum MultilineMode { kMultilineDisabled, kMultilineEnabled }; -class CORE_EXPORT ScriptRegexp { - USING_FAST_MALLOC(ScriptRegexp); - +class CORE_EXPORT ScriptRegexp final : public GarbageCollected<ScriptRegexp> { public: enum CharacterMode { BMP, // NOLINT @@ -61,8 +60,10 @@ // exceptionMessage is available only if !isValid(). String ExceptionMessage() const { return exception_message_; } + void Trace(Visitor* visitor) const; + private: - ScopedPersistent<v8::RegExp> regex_; + TraceWrapperV8Reference<v8::RegExp> regex_; String exception_message_; DISALLOW_COPY_AND_ASSIGN(ScriptRegexp);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc index 77b29e09..63b9ae1 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -485,6 +485,8 @@ source_ = std::make_unique<v8::ScriptCompiler::StreamedSource>( std::move(stream_ptr), encoding_); + // TODO(crbug.com/1061857) Pass ScriptResource::ScriptType to the streaming + // task. std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> script_streaming_task(base::WrapUnique(v8::ScriptCompiler::StartStreaming( V8PerIsolateData::MainThreadIsolate(), source_.get())));
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc index 94df3d4..c4c6232 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -44,6 +44,7 @@ #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" +#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h" #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/module_script.h" @@ -247,13 +248,12 @@ v8::MaybeLocal<v8::Module> V8ScriptRunner::CompileModule( v8::Isolate* isolate, - const String& source_text, - SingleCachedMetadataHandler* cache_handler, - const String& file_name, + const ModuleScriptCreationParams& params, const TextPosition& start_position, v8::ScriptCompiler::CompileOptions compile_options, v8::ScriptCompiler::NoCacheReason no_cache_reason, const ReferrerScriptInfo& referrer_info) { + const String file_name = params.SourceURL(); constexpr const char* kTraceEventCategoryGroup = "v8,devtools.timeline"; TRACE_EVENT_BEGIN1(kTraceEventCategoryGroup, "v8.compileModule", "fileName", file_name.Utf8()); @@ -271,7 +271,8 @@ true, // is_module referrer_info.ToV8HostDefinedOptions(isolate)); - v8::Local<v8::String> code = V8String(isolate, source_text); + // TODO(crbug.com/1061857): Finalize module streaming here. + v8::Local<v8::String> code = V8String(isolate, params.GetSourceText()); v8::MaybeLocal<v8::Module> script; inspector_compile_script_event::V8CacheResult cache_result; @@ -287,6 +288,7 @@ case v8::ScriptCompiler::kConsumeCodeCache: { // Compile a script, and consume a V8 cache that was generated previously. + SingleCachedMetadataHandler* cache_handler = params.CacheHandler(); DCHECK(cache_handler); v8::ScriptCompiler::CachedData* cached_data = V8CodeCache::CreateCachedData(cache_handler);
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.h b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.h index 8713d63..43247ee 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.h
@@ -40,15 +40,15 @@ namespace blink { -class ScriptEvaluationResult; class ExecutionContext; class KURL; class ModuleScript; +class ModuleScriptCreationParams; class ReferrerScriptInfo; +class ScriptEvaluationResult; class ScriptFetchOptions; class ScriptSourceCode; class ScriptState; -class SingleCachedMetadataHandler; class CORE_EXPORT V8ScriptRunner final { STATIC_ONLY(V8ScriptRunner); @@ -114,9 +114,7 @@ const ReferrerScriptInfo&); static v8::MaybeLocal<v8::Module> CompileModule( v8::Isolate*, - const String& source, - SingleCachedMetadataHandler*, - const String& file_name, + const ModuleScriptCreationParams&, const WTF::TextPosition&, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason,
diff --git a/third_party/blink/renderer/core/accessibility/ax_object_cache.h b/third_party/blink/renderer/core/accessibility/ax_object_cache.h index f52c8f98..6209c25 100644 --- a/third_party/blink/renderer/core/accessibility/ax_object_cache.h +++ b/third_party/blink/renderer/core/accessibility/ax_object_cache.h
@@ -98,9 +98,10 @@ // changed. virtual void TextChanged(const LayoutObject*) = 0; virtual void DocumentTitleChanged() = 0; - // Called when a node has just been attached, so we can make sure we have the - // right subclass of AXObject. + // Called when a layout tree for a node has just been attached, so we can make + // sure we have the right subclass of AXObject. virtual void UpdateCacheAfterNodeIsAttached(Node*) = 0; + // A DOM node was inserted , but does not necessarily have a layout tree. virtual void DidInsertChildrenOfNode(Node*) = 0; // Returns true if the AXObjectCache cares about this attribute
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc index 6018326..8067cb9b 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.cc +++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -434,11 +434,11 @@ CSSScrollTimeline* CreateCSSScrollTimeline( Element* element, - const CSSScrollTimeline::Options& options) { + CSSScrollTimeline::Options&& options) { if (!options.IsValid()) return nullptr; - auto* scroll_timeline = - MakeGarbageCollected<CSSScrollTimeline>(&element->GetDocument(), options); + auto* scroll_timeline = MakeGarbageCollected<CSSScrollTimeline>( + &element->GetDocument(), std::move(options)); // It's is not allowed for a style resolve to create timelines that // needs timing updates (i.e. AnimationTimeline::NeedsAnimationTimingUpdate() // must return false). Servicing animations after creation preserves this @@ -486,7 +486,7 @@ if (timeline->Matches(options)) return existing_timeline; } - if (auto* timeline = CreateCSSScrollTimeline(element, options)) + if (auto* timeline = CreateCSSScrollTimeline(element, std::move(options))) return timeline; } return nullptr;
diff --git a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc index bcc37c7..d63409c 100644 --- a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc +++ b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc
@@ -123,23 +123,22 @@ return MakeGarbageCollected<ScrollTimelineOffset>(); } -HeapVector<Member<ScrollTimelineOffset>>* ComputeScrollOffsets( +HeapVector<Member<ScrollTimelineOffset>> ComputeScrollOffsets( Document& document, const CSSValue* start, const CSSValue* end) { - auto* offsets = - MakeGarbageCollected<HeapVector<Member<ScrollTimelineOffset>>>(); + HeapVector<Member<ScrollTimelineOffset>> offsets; - bool start_is_auto = IsAuto(start) || !start; - bool end_is_auto = IsAuto(end) || !end; + const bool start_is_auto = !start || IsAuto(start); + const bool end_is_auto = !end || IsAuto(end); // TODO(crbug.com/1094014): scroll_offsets will replace start and end // offsets once spec decision on multiple scroll offsets is finalized. // https://github.com/w3c/csswg-drafts/issues/4912 if (!start_is_auto) - offsets->push_back(ComputeScrollOffset(document, start)); + offsets.push_back(ComputeScrollOffset(document, start)); if (!end_is_auto || !start_is_auto) - offsets->push_back(ComputeScrollOffset(document, end)); + offsets.push_back(ComputeScrollOffset(document, end)); return offsets; } @@ -214,11 +213,11 @@ time_range_(ComputeTimeRange(rule.GetTimeRange())), rule_(&rule) {} -CSSScrollTimeline::CSSScrollTimeline(Document* document, const Options& options) +CSSScrollTimeline::CSSScrollTimeline(Document* document, Options&& options) : ScrollTimeline(document, options.source_, options.direction_, - options.offsets_, + std::move(options.offsets_), *options.time_range_), rule_(options.rule_) { DCHECK(options.IsValid()); @@ -231,10 +230,9 @@ } bool CSSScrollTimeline::Matches(const Options& options) const { - DCHECK(options.offsets_); return (scrollSource() == options.source_) && (GetOrientation() == options.direction_) && - (ScrollOffsetsEqual(*options.offsets_)) && + (ScrollOffsetsEqual(options.offsets_)) && (GetTimeRange() == options.time_range_) && (rule_ == options.rule_); }
diff --git a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h index c06419f..ef6811a5 100644 --- a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h +++ b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.h
@@ -33,12 +33,12 @@ Element* source_; ScrollTimeline::ScrollDirection direction_; - HeapVector<Member<ScrollTimelineOffset>>* offsets_; + HeapVector<Member<ScrollTimelineOffset>> offsets_; base::Optional<double> time_range_; StyleRuleScrollTimeline* rule_; }; - CSSScrollTimeline(Document*, const Options&); + CSSScrollTimeline(Document*, Options&&); const AtomicString& Name() const;
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.cc b/third_party/blink/renderer/core/animation/scroll_timeline.cc index cb7532fda..be41cab 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline.cc
@@ -138,17 +138,16 @@ return nullptr; } - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets = - MakeGarbageCollected<HeapVector<Member<ScrollTimelineOffset>>>(); + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets; if (options->scrollOffsets().IsEmpty()) { // TODO(crbug.com/1094014): scroll_offsets will replace start and end // offsets once spec decision on multiple scroll offsets is finalized. // https://github.com/w3c/csswg-drafts/issues/4912 if (!start_scroll_offset->IsDefaultValue()) - scroll_offsets->push_back(start_scroll_offset); + scroll_offsets.push_back(start_scroll_offset); if (!end_scroll_offset->IsDefaultValue() || !start_scroll_offset->IsDefaultValue()) - scroll_offsets->push_back(end_scroll_offset); + scroll_offsets.push_back(end_scroll_offset); } else { for (auto& offset : options->scrollOffsets()) { ScrollTimelineOffset* scroll_offset = @@ -159,13 +158,13 @@ } if (scroll_offset->IsDefaultValue() && (options->scrollOffsets().size() == 1 || - (scroll_offsets->size() + 1) < options->scrollOffsets().size())) { + (scroll_offsets.size() + 1) < options->scrollOffsets().size())) { exception_state.ThrowTypeError( "Invalid scrollOffsets: 'auto' can only be set as an end " "offset when start offset presents."); return nullptr; } - scroll_offsets->push_back(scroll_offset); + scroll_offsets.push_back(scroll_offset); } } @@ -182,15 +181,14 @@ Document* document, Element* scroll_source, ScrollDirection orientation, - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets, + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets, base::Optional<double> time_range) : AnimationTimeline(document), scroll_source_(scroll_source), resolved_scroll_source_(ResolveScrollSource(scroll_source_)), orientation_(orientation), - scroll_offsets_(scroll_offsets), + scroll_offsets_(std::move(scroll_offsets)), time_range_(time_range) { - DCHECK(scroll_offsets_); if (resolved_scroll_source_) { ScrollTimelineSet& set = GetScrollTimelineSet(); if (!set.Contains(resolved_scroll_source_)) { @@ -222,14 +220,12 @@ ScrollTimelineOffset* ScrollTimeline::StartScrollOffset() const { // Single entry offset in scrollOffsets is considered as 'end'. Thus, // resolving start offset only if there is at least 2 offsets. - return scroll_offsets_ && scroll_offsets_->size() >= 2 - ? scroll_offsets_->at(0) - : nullptr; + return scroll_offsets_.size() >= 2 ? scroll_offsets_.at(0) : nullptr; } ScrollTimelineOffset* ScrollTimeline::EndScrollOffset() const { // End offset is always the last offset in scrollOffsets if exists. - return scroll_offsets_ && scroll_offsets_->size() >= 1 - ? scroll_offsets_->at(scroll_offsets_->size() - 1) + return scroll_offsets_.size() >= 1 + ? scroll_offsets_.at(scroll_offsets_.size() - 1) : nullptr; } @@ -255,16 +251,16 @@ auto orientation = ToPhysicalScrollOrientation(orientation_, *layout_box); - if (scroll_offsets_->size() == 0) { + if (scroll_offsets_.size() == 0) { // Start and end offsets resolve to 'auto'. resolved_offsets.push_back(0); resolved_offsets.push_back(max_offset); return true; } // Single entry offset in scrollOffsets is considered as 'end'. - if (scroll_offsets_->size() == 1) + if (scroll_offsets_.size() == 1) resolved_offsets.push_back(0); - for (auto& offset : *scroll_offsets_) { + for (auto& offset : scroll_offsets_) { auto resolved_offset = offset->ResolveOffset( resolved_scroll_source_, orientation, max_offset, max_offset); if (!resolved_offset) { @@ -286,12 +282,11 @@ bool ScrollTimeline::ScrollOffsetsEqual( const HeapVector<Member<ScrollTimelineOffset>>& other) const { - DCHECK(scroll_offsets_); - if (scroll_offsets_->size() != other.size()) + if (scroll_offsets_.size() != other.size()) return false; - size_t size = scroll_offsets_->size(); + size_t size = scroll_offsets_.size(); for (size_t i = 0; i < size; ++i) { - if (!DataEquivalent(scroll_offsets_->at(i), other.at(i))) + if (!DataEquivalent(scroll_offsets_.at(i), other.at(i))) return false; } return true; @@ -477,11 +472,7 @@ const HeapVector<ScrollTimelineOffsetValue> ScrollTimeline::scrollOffsets() const { HeapVector<ScrollTimelineOffsetValue> scroll_offsets; - - if (!scroll_offsets_) - return scroll_offsets; - - for (auto& offset : *scroll_offsets_) { + for (auto& offset : scroll_offsets_) { scroll_offsets.push_back(offset->ToScrollTimelineOffsetValue()); // 'auto' can only be the end offset. DCHECK(!offset->IsDefaultValue() || scroll_offsets.size() == 2);
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.h b/third_party/blink/renderer/core/animation/scroll_timeline.h index 1cf1e23..f214ffc 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.h +++ b/third_party/blink/renderer/core/animation/scroll_timeline.h
@@ -44,7 +44,7 @@ ScrollTimeline(Document*, Element*, ScrollDirection, - HeapVector<Member<ScrollTimelineOffset>>*, + HeapVector<Member<ScrollTimelineOffset>>, base::Optional<double>); bool IsScrollTimeline() const override { return true; } @@ -169,7 +169,7 @@ Member<Element> scroll_source_; Member<Node> resolved_scroll_source_; ScrollDirection orientation_; - Member<HeapVector<Member<ScrollTimelineOffset>>> scroll_offsets_; + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets_; base::Optional<double> time_range_;
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_test.cc b/third_party/blink/renderer/core/animation/scroll_timeline_test.cc index 5321591..3d4b21cd 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline_test.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline_test.cc
@@ -30,7 +30,7 @@ #define EXPECT_TIME_NEAR(expected, value) \ EXPECT_NEAR(expected, value, time_error_ms) -HeapVector<Member<ScrollTimelineOffset>>* CreateScrollOffsets( +HeapVector<Member<ScrollTimelineOffset>> CreateScrollOffsets( ScrollTimelineOffset* start_scroll_offset = MakeGarbageCollected<ScrollTimelineOffset>( CSSNumericLiteralValue::Create( @@ -41,10 +41,9 @@ CSSNumericLiteralValue::Create( 90.0, CSSPrimitiveValue::UnitType::kPixels))) { - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets = - MakeGarbageCollected<HeapVector<Member<ScrollTimelineOffset>>>(); - scroll_offsets->push_back(start_scroll_offset); - scroll_offsets->push_back(end_scroll_offset); + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets; + scroll_offsets.push_back(start_scroll_offset); + scroll_offsets.push_back(end_scroll_offset); return scroll_offsets; } @@ -82,12 +81,12 @@ public: TestScrollTimeline(Document* document, Element* scroll_source, - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets = + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets = CreateScrollOffsets()) : ScrollTimeline(document, scroll_source, ScrollTimeline::Vertical, - scroll_offsets, + std::move(scroll_offsets), 100.0), next_service_scheduled_(false) {}
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc b/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc index 9fe7b94..3e3a139d 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc
@@ -16,13 +16,12 @@ namespace { -HeapVector<Member<ScrollTimelineOffset>>* CreateScrollOffsets( +HeapVector<Member<ScrollTimelineOffset>> CreateScrollOffsets( ScrollTimelineOffset* start_scroll_offset, ScrollTimelineOffset* end_scroll_offset) { - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets = - MakeGarbageCollected<HeapVector<Member<ScrollTimelineOffset>>>(); - scroll_offsets->push_back(start_scroll_offset); - scroll_offsets->push_back(end_scroll_offset); + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets; + scroll_offsets.push_back(start_scroll_offset); + scroll_offsets.push_back(end_scroll_offset); return scroll_offsets; }
diff --git a/third_party/blink/renderer/core/dom/character_data.cc b/third_party/blink/renderer/core/dom/character_data.cc index 55a99d7..09aa28c 100644 --- a/third_party/blink/renderer/core/dom/character_data.cc +++ b/third_party/blink/renderer/core/dom/character_data.cc
@@ -234,7 +234,7 @@ this, previousSibling(), nextSibling(), - nullptr}; + {}}; parentNode()->ChildrenChanged(change); }
diff --git a/third_party/blink/renderer/core/dom/container_node.cc b/third_party/blink/renderer/core/dom/container_node.cc index d336d0ce..b6005aa1 100644 --- a/third_party/blink/renderer/core/dom/container_node.cc +++ b/third_party/blink/renderer/core/dom/container_node.cc
@@ -814,11 +814,8 @@ GetDocument().NodeChildrenWillBeRemoved(*this); } - HeapVector<Member<Node>>* removed_nodes = nullptr; - if (ChildrenChangedAllChildrenRemovedNeedsList()) { - removed_nodes = - MakeGarbageCollected<HeapVector<Member<Node>>>(CountChildren()); - } + HeapVector<Member<Node>> removed_nodes; + const bool children_changed = ChildrenChangedAllChildrenRemovedNeedsList(); { HTMLFrameOwnerElement::PluginDisposeSuspendScope suspend_plugin_dispose; TreeOrderedMap::RemoveScope tree_remove_scope; @@ -831,8 +828,8 @@ while (Node* child = first_child_) { RemoveBetween(nullptr, child->nextSibling(), *child); NotifyNodeRemoved(*child); - if (removed_nodes) - removed_nodes->push_back(child); + if (children_changed) + removed_nodes.push_back(child); } } @@ -841,7 +838,7 @@ nullptr, nullptr, nullptr, - removed_nodes}; + std::move(removed_nodes)}; ChildrenChanged(change); }
diff --git a/third_party/blink/renderer/core/dom/container_node.h b/third_party/blink/renderer/core/dom/container_node.h index 6fddfe3a..f2a40757 100644 --- a/third_party/blink/renderer/core/dom/container_node.h +++ b/third_party/blink/renderer/core/dom/container_node.h
@@ -318,7 +318,7 @@ &node, unchanged_previous, unchanged_next, - nullptr}; + {}}; return change; } @@ -333,7 +333,7 @@ &node, previous_sibling, next_sibling, - nullptr}; + {}}; return change; } @@ -367,9 +367,9 @@ // - nextSibling of the last inserted node after multiple node insertion. Node* sibling_after_change = nullptr; // List of removed nodes for ChildrenChangeType::kAllChildrenRemoved. - // This is available only if ChildrenChangedAllChildrenRemovedNeedsList() - // returns true. - HeapVector<Member<Node>>* removed_nodes; + // Only populated if ChildrenChangedAllChildrenRemovedNeedsList() returns + // true. + HeapVector<Member<Node>> removed_nodes; }; // Notifies the node that it's list of children have changed (either by adding
diff --git a/third_party/blink/renderer/core/dom/document_data.h b/third_party/blink/renderer/core/dom/document_data.h index 66aa59eb..40d00499 100644 --- a/third_party/blink/renderer/core/dom/document_data.h +++ b/third_party/blink/renderer/core/dom/document_data.h
@@ -33,6 +33,7 @@ visitor->Trace(floc_service_); visitor->Trace(has_trust_tokens_answerer_); visitor->Trace(pending_has_trust_tokens_resolvers_); + visitor->Trace(email_regexp_); } private: @@ -60,7 +61,7 @@ pending_has_trust_tokens_resolvers_; // To do email regex checks. - std::unique_ptr<ScriptRegexp> email_regexp_; + Member<ScriptRegexp> email_regexp_; friend class Document; };
diff --git a/third_party/blink/renderer/core/editing/finder/find_buffer.cc b/third_party/blink/renderer/core/editing/finder/find_buffer.cc index 279146b..7468ca8 100644 --- a/third_party/blink/renderer/core/editing/finder/find_buffer.cc +++ b/third_party/blink/renderer/core/editing/finder/find_buffer.cc
@@ -85,7 +85,7 @@ while (Node* ancestor = GetNonSearchableAncestor(*node)) { if (!ancestor) return nullptr; - node = Direction::NextSkippingChildren(*ancestor); + node = Direction::NextSkippingSubtree(*ancestor); if (!node) return nullptr; } @@ -95,7 +95,7 @@ if (ShouldIgnoreContents(*node) || (style && style->Display() == EDisplay::kNone)) { // This element and its descendants are not visible, skip it. - node = Direction::NextSkippingChildren(*node); + node = Direction::NextSkippingSubtree(*node); continue; } if (style && style->Visibility() == EVisibility::kVisible && @@ -201,7 +201,7 @@ static Node* Next(const Node& node) { return FlatTreeTraversal::Next(node); } - static Node* NextSkippingChildren(const Node& node) { + static Node* NextSkippingSubtree(const Node& node) { return FlatTreeTraversal::NextSkippingChildren(node); } }; @@ -213,8 +213,10 @@ static Node* Next(const Node& node) { return FlatTreeTraversal::Previous(node); } - static Node* NextSkippingChildren(const Node& node) { - return FlatTreeTraversal::PreviousSkippingChildren(node); + static Node* NextSkippingSubtree(const Node& node) { + // Unlike |NextSkippingChildren|, |Previous| already skips given nodes + // subtree. + return FlatTreeTraversal::Previous(node); } }; return GetVisibleTextNode<BackwardDirection>(start_node);
diff --git a/third_party/blink/renderer/core/execution_context/security_context_init.cc b/third_party/blink/renderer/core/execution_context/security_context_init.cc index ec1ce0c8..ccf0fa4 100644 --- a/third_party/blink/renderer/core/execution_context/security_context_init.cc +++ b/third_party/blink/renderer/core/execution_context/security_context_init.cc
@@ -273,4 +273,12 @@ security_context.SetReportOnlyFeaturePolicy( FeaturePolicy::CopyStateFrom(other.GetReportOnlyFeaturePolicy())); } + +void SecurityContextInit::InitDocumentPolicyFrom(const SecurityContext& other) { + auto& security_context = execution_context_->GetSecurityContext(); + security_context.SetDocumentPolicy( + DocumentPolicy::CopyStateFrom(other.GetDocumentPolicy())); + security_context.SetReportOnlyDocumentPolicy( + DocumentPolicy::CopyStateFrom(other.GetReportOnlyDocumentPolicy())); +} } // namespace blink
diff --git a/third_party/blink/renderer/core/execution_context/security_context_init.h b/third_party/blink/renderer/core/execution_context/security_context_init.h index cc7aae0..7add6e9 100644 --- a/third_party/blink/renderer/core/execution_context/security_context_init.h +++ b/third_party/blink/renderer/core/execution_context/security_context_init.h
@@ -36,6 +36,13 @@ // does not have header information available. void InitFeaturePolicyFrom(const SecurityContext& other); + // Init |document_policy_| and |report_only_document_policy_| by copying + // state from another security context instance. + // Used to carry document policy information from previous document + // to current document during XSLT navigation, because XSLT navigation + // does not have header information available. + void InitDocumentPolicyFrom(const SecurityContext& other); + void ApplyFeaturePolicy(LocalFrame* frame, const ResourceResponse& response, const base::Optional<WebOriginPolicy>& origin_policy,
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc index bb16507..ede2eb1 100644 --- a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc +++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -431,7 +431,7 @@ widget_base_->AckPendingWindowRect(); } -cc::LayerTreeHost* WebPagePopupImpl::InitializeCompositing( +void WebPagePopupImpl::InitializeCompositing( scheduler::WebThreadScheduler* main_thread_scheduler, cc::TaskGraphRunner* task_graph_runner, const ScreenInfo& screen_info, @@ -444,7 +444,6 @@ screen_info, std::move(ukm_recorder_factory), settings, /*frame_widget_input_handler=*/nullptr); - return widget_base_->LayerTreeHost(); } scheduler::WebRenderWidgetSchedulingState*
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.h b/third_party/blink/renderer/core/exported/web_page_popup_impl.h index 2f70bf20..ca5ed3d 100644 --- a/third_party/blink/renderer/core/exported/web_page_popup_impl.h +++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.h
@@ -156,7 +156,7 @@ void SetFocus(bool) override; bool HasFocus() override; WebHitTestResult HitTestResultAt(const gfx::PointF&) override { return {}; } - cc::LayerTreeHost* InitializeCompositing( + void InitializeCompositing( scheduler::WebThreadScheduler* main_thread_scheduler, cc::TaskGraphRunner* task_graph_runner, const ScreenInfo& screen_info,
diff --git a/third_party/blink/renderer/core/exported/web_view_test.cc b/third_party/blink/renderer/core/exported/web_view_test.cc index 22fb03d..3a7650d 100644 --- a/third_party/blink/renderer/core/exported/web_view_test.cc +++ b/third_party/blink/renderer/core/exported/web_view_test.cc
@@ -102,6 +102,7 @@ #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/visual_viewport.h" +#include "third_party/blink/renderer/core/frame/web_frame_widget_impl.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" #include "third_party/blink/renderer/core/fullscreen/fullscreen.h" #include "third_party/blink/renderer/core/html/forms/external_date_time_chooser.h" @@ -534,10 +535,12 @@ CreateWidgetForMainFrame(&web_widget_client, frame); cc::LayerTreeSettings layer_tree_settings = frame_test_helpers::GetSynchronousSingleThreadLayerTreeSettings(); - web_widget_client.set_layer_tree_host(widget->InitializeCompositing( + widget->InitializeCompositing( web_widget_client.main_thread_scheduler(), web_widget_client.task_graph_runner(), ScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + web_widget_client.set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(widget)->LayerTreeHostForTesting()); widget->SetCompositorVisible(true); web_view->DidAttachLocalMainFrame(); } @@ -2767,10 +2770,12 @@ CreateWidgetForMainFrame(&web_widget_client, local_frame); cc::LayerTreeSettings layer_tree_settings = frame_test_helpers::GetSynchronousSingleThreadLayerTreeSettings(); - web_widget_client.set_layer_tree_host(widget->InitializeCompositing( + widget->InitializeCompositing( web_widget_client.main_thread_scheduler(), web_widget_client.task_graph_runner(), ScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + web_widget_client.set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(widget)->LayerTreeHostForTesting()); widget->SetCompositorVisible(true); web_view->DidAttachLocalMainFrame(); @@ -4268,10 +4273,12 @@ std::move(widget_receiver), viz::FrameSinkId()); cc::LayerTreeSettings layer_tree_settings = frame_test_helpers::GetSynchronousSingleThreadLayerTreeSettings(); - web_widget_client.set_layer_tree_host(widget->InitializeCompositing( + widget->InitializeCompositing( web_widget_client.main_thread_scheduler(), web_widget_client.task_graph_runner(), ScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + web_widget_client.set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(widget)->LayerTreeHostForTesting()); widget->SetCompositorVisible(true); web_view_impl->DidAttachLocalMainFrame(); }
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.cc b/third_party/blink/renderer/core/frame/frame_test_helpers.cc index 2de9f63..2b743893 100644 --- a/third_party/blink/renderer/core/frame/frame_test_helpers.cc +++ b/third_party/blink/renderer/core/frame/frame_test_helpers.cc
@@ -59,6 +59,7 @@ #include "third_party/blink/public/web/web_navigation_params.h" #include "third_party/blink/public/web/web_settings.h" #include "third_party/blink/public/web/web_view_client.h" +#include "third_party/blink/renderer/core/frame/web_frame_widget_impl.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" #include "third_party/blink/renderer/core/frame/web_remote_frame_impl.h" #include "third_party/blink/renderer/core/loader/document_loader.h" @@ -289,11 +290,14 @@ // The WebWidget requires the compositor to be set before it is used. cc::LayerTreeSettings layer_tree_settings = GetSynchronousSingleThreadLayerTreeSettings(); - widget_client->set_layer_tree_host(frame_widget->InitializeCompositing( + frame_widget->InitializeCompositing( widget_client->main_thread_scheduler(), widget_client->task_graph_runner(), widget_client->GetInitialScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + widget_client->set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(frame_widget) + ->LayerTreeHostForTesting()); frame_widget->SetCompositorVisible(true); } else if (frame->Parent()->IsWebRemoteFrame()) { widget_client = std::make_unique<TestWebWidgetClient>(); @@ -306,11 +310,14 @@ // The WebWidget requires the compositor to be set before it is used. cc::LayerTreeSettings layer_tree_settings = GetSynchronousSingleThreadLayerTreeSettings(); - widget_client->set_layer_tree_host(frame_widget->InitializeCompositing( + frame_widget->InitializeCompositing( widget_client->main_thread_scheduler(), widget_client->task_graph_runner(), widget_client->GetInitialScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + widget_client->set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(frame_widget) + ->LayerTreeHostForTesting()); frame_widget->SetCompositorVisible(true); frame_widget->Resize(gfx::Size()); } @@ -374,10 +381,13 @@ widget_client->SetFrameWidget(frame_widget, std::move(widget_remote)); cc::LayerTreeSettings layer_tree_settings = GetSynchronousSingleThreadLayerTreeSettings(); - widget_client->set_layer_tree_host(frame_widget->InitializeCompositing( + frame_widget->InitializeCompositing( widget_client->main_thread_scheduler(), widget_client->task_graph_runner(), widget_client->GetInitialScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + widget_client->set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(frame_widget) + ->LayerTreeHostForTesting()); frame_widget->SetCompositorVisible(true); // Set an initial size for subframes. if (frame->Parent()) @@ -468,11 +478,13 @@ test_web_widget_client_->SetFrameWidget(widget, std::move(widget_remote)); cc::LayerTreeSettings layer_tree_settings = GetSynchronousSingleThreadLayerTreeSettings(); - test_web_widget_client_->set_layer_tree_host(widget->InitializeCompositing( + widget->InitializeCompositing( test_web_widget_client_->main_thread_scheduler(), test_web_widget_client_->task_graph_runner(), test_web_widget_client_->GetInitialScreenInfo(), - std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings)); + std::make_unique<cc::TestUkmRecorderFactory>(), &layer_tree_settings); + test_web_widget_client_->set_layer_tree_host( + static_cast<WebFrameWidgetImpl*>(widget)->LayerTreeHostForTesting()); widget->SetCompositorVisible(true); // We inform the WebView when it has a local main frame attached once the
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 2af284f..d4c116a 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -2735,6 +2735,21 @@ .ReceiveMessage(std::move(message), source_origin); } +void LocalFrame::UpdateBrowserControlsState( + cc::BrowserControlsState constraints, + cc::BrowserControlsState current, + bool animate) { + DCHECK(IsMainFrame()); + TRACE_EVENT2("renderer", "LocalFrame::UpdateBrowserControlsState", + "Constraint", static_cast<int>(constraints), "Current", + static_cast<int>(current)); + TRACE_EVENT_INSTANT1("renderer", "is_animated", TRACE_EVENT_SCOPE_THREAD, + "animated", animate); + + GetWidgetForLocalRoot()->UpdateBrowserControlsState(constraints, current, + animate); +} + HitTestResult LocalFrame::HitTestResultForVisualViewportPos( const IntPoint& pos_in_viewport) { IntPoint root_frame_point(
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h index 3d4c963..53d017c 100644 --- a/third_party/blink/renderer/core/frame/local_frame.h +++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -663,7 +663,6 @@ void SetScaleFactor(float scale) override; void ClosePage( mojom::blink::LocalMainFrame::ClosePageCallback callback) override; - // Performs the specified plugin action on the node at the given location. void PluginActionAt(const gfx::Point& location, mojom::blink::PluginActionType action) override; void SetInitialFocus(bool reverse) override; @@ -692,6 +691,9 @@ void ForwardMessageFromHost( BlinkTransferableMessage message, const scoped_refptr<const SecurityOrigin>& source_origin) final; + void UpdateBrowserControlsState(cc::BrowserControlsState constraints, + cc::BrowserControlsState current, + bool animate) override; SystemClipboard* GetSystemClipboard(); RawSystemClipboard* GetRawSystemClipboard();
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index f3e83466..7756c0e0 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -1595,6 +1595,15 @@ return widget_base_->LayerTreeHost()->GetSettings(); } +void WebFrameWidgetImpl::UpdateBrowserControlsState( + cc::BrowserControlsState constraints, + cc::BrowserControlsState current, + bool animate) { + DCHECK(View()->does_composite()); + widget_base_->LayerTreeHost()->UpdateBrowserControlsState(constraints, + current, animate); +} + void WebFrameWidgetImpl::SetHaveScrollEventHandlers(bool has_handlers) { widget_base_->LayerTreeHost()->SetHaveScrollEventHandlers(has_handlers); } @@ -1938,7 +1947,7 @@ data.should_dispatch_first_layout_after_finished_loading = true; } -cc::LayerTreeHost* WebFrameWidgetImpl::InitializeCompositing( +void WebFrameWidgetImpl::InitializeCompositing( scheduler::WebThreadScheduler* main_thread_scheduler, cc::TaskGraphRunner* task_graph_runner, const ScreenInfo& screen_info, @@ -1961,7 +1970,6 @@ } GetPage()->AnimationHostInitialized(*AnimationHost(), frame_view); - return widget_base_->LayerTreeHost(); } void WebFrameWidgetImpl::SetCompositorVisible(bool visible) { @@ -3650,6 +3658,10 @@ return widget_base_->LayerTreeHost(); } +cc::LayerTreeHost* WebFrameWidgetImpl::LayerTreeHostForTesting() { + return LayerTreeHost(); +} + ScreenMetricsEmulator* WebFrameWidgetImpl::DeviceEmulator() { return device_emulator_; }
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h index b61ee1f..2206f2b 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -192,6 +192,9 @@ void RequestBeginMainFrameNotExpected(bool request) final; int GetLayerTreeId() final; const cc::LayerTreeSettings& GetLayerTreeSettings() final; + void UpdateBrowserControlsState(cc::BrowserControlsState constraints, + cc::BrowserControlsState current, + bool animate) final; void SetEventListenerProperties(cc::EventListenerClass, cc::EventListenerProperties) final; cc::EventListenerProperties EventListenerProperties( @@ -328,7 +331,7 @@ void ResetMeaningfulLayoutStateForMainFrame(); // WebWidget overrides. - cc::LayerTreeHost* InitializeCompositing( + void InitializeCompositing( scheduler::WebThreadScheduler* main_thread_scheduler, cc::TaskGraphRunner* task_graph_runner, const ScreenInfo& screen_info, @@ -465,6 +468,8 @@ cc::LayerTreeDebugState GetLayerTreeDebugState(); void SetLayerTreeDebugState(const cc::LayerTreeDebugState& state); + // Return the compositor LayerTreeHost. + cc::LayerTreeHost* LayerTreeHostForTesting(); // Ask compositor to composite a frame for testing. This will generate a // BeginMainFrame, and update the document lifecycle. void SynchronouslyCompositeForTesting(base::TimeTicks frame_time);
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_test.cc b/third_party/blink/renderer/core/frame/web_frame_widget_test.cc index 315b26f..124a9a7 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_test.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_test.cc
@@ -74,7 +74,7 @@ WebView().MainFrameViewWidget()->LocalSurfaceIdFromParent()); EXPECT_FALSE(WebView() .MainFrameViewWidget() - ->LayerTreeHost() + ->LayerTreeHostForTesting() ->new_local_surface_id_request_for_testing()); constexpr gfx::Size size(200, 200); @@ -83,7 +83,7 @@ WebView().MainFrameViewWidget()->LocalSurfaceIdFromParent()); EXPECT_TRUE(WebView() .MainFrameViewWidget() - ->LayerTreeHost() + ->LayerTreeHostForTesting() ->new_local_surface_id_request_for_testing()); } @@ -158,7 +158,8 @@ // roots. TEST_F(WebFrameWidgetImplRemoteFrameSimTest, ActivePinchGestureUpdatesLayerTreeHostSubFrame) { - cc::LayerTreeHost* layer_tree_host = LocalFrameRootWidget()->LayerTreeHost(); + cc::LayerTreeHost* layer_tree_host = + LocalFrameRootWidget()->LayerTreeHostForTesting(); EXPECT_FALSE(layer_tree_host->is_external_pinch_gesture_active_for_testing()); blink::VisualProperties visual_properties; @@ -468,7 +469,7 @@ auto root_layer = cc::SolidColorLayer::Create(); root_layer->SetBounds(gfx::Size(200, 100)); root_layer->SetBackgroundColor(SK_ColorGREEN); - FrameWidgetBase()->LayerTreeHost()->SetRootLayer(root_layer); + FrameWidgetBase()->LayerTreeHostForTesting()->SetRootLayer(root_layer); auto color_layer = cc::SolidColorLayer::Create(); color_layer->SetBounds(gfx::Size(100, 100)); @@ -570,7 +571,8 @@ // not propagated to the LayerTreeHost when properties are synced for main // frame. TEST_F(WebFrameWidgetSimTest, ActivePinchGestureUpdatesLayerTreeHost) { - auto* layer_tree_host = WebView().MainFrameViewWidget()->LayerTreeHost(); + auto* layer_tree_host = + WebView().MainFrameViewWidget()->LayerTreeHostForTesting(); EXPECT_FALSE(layer_tree_host->is_external_pinch_gesture_active_for_testing()); blink::VisualProperties visual_properties;
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_definition_test.cc b/third_party/blink/renderer/core/html/custom/custom_element_definition_test.cc index 404a9472..87469ef7 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_definition_test.cc +++ b/third_party/blink/renderer/core/html/custom/custom_element_definition_test.cc
@@ -34,12 +34,11 @@ << "sanity check: this element should be ready to upgrade"; { CEReactionsScope reactions; - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Unreached>( + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Unreached>( "upgrade failure should clear the reaction queue")); reactions.EnqueueToCurrentQueue( - element, *MakeGarbageCollected<TestReaction>(commands)); + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); ConstructorFails definition(CustomElementDescriptor("a-a", "a-a")); definition.Upgrade(element); } @@ -53,12 +52,11 @@ EXPECT_EQ(CustomElementState::kUndefined, element.GetCustomElementState()) << "sanity check: this element should be ready to upgrade"; ResetCustomElementReactionStackForTest reset_reaction_stack; - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Unreached>( + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Unreached>( "upgrade failure should clear the reaction queue")); reset_reaction_stack.Stack().EnqueueToBackupQueue( - element, *MakeGarbageCollected<TestReaction>(commands)); + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); ConstructorFails definition(CustomElementDescriptor("a-a", "a-a")); definition.Upgrade(element); EXPECT_EQ(CustomElementState::kFailed, element.GetCustomElementState())
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue_test.cc b/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue_test.cc index 4f3c750..7703104 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue_test.cc +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction_queue_test.cc
@@ -18,10 +18,9 @@ Vector<char> log; CustomElementReactionQueue* queue = MakeGarbageCollected<CustomElementReactionQueue>(); - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); Element* test_element = CreateElement(AtomicString("my-element")); queue->InvokeReactions(*test_element); EXPECT_EQ(log, Vector<char>({'a'})) @@ -33,22 +32,19 @@ CustomElementReactionQueue* queue = MakeGarbageCollected<CustomElementReactionQueue>(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('c', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('c', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } Element* test_element = CreateElement(AtomicString("my-element")); queue->InvokeReactions(*test_element); @@ -61,27 +57,24 @@ CustomElementReactionQueue* queue = MakeGarbageCollected<CustomElementReactionQueue>(); - HeapVector<Member<Command>>* third_commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - third_commands->push_back(MakeGarbageCollected<Log>('c', log)); - third_commands->push_back(MakeGarbageCollected<Recurse>(queue)); - CustomElementReaction* third = - MakeGarbageCollected<TestReaction>(third_commands); // "Empty" recursion + HeapVector<Member<Command>> third_commands; + third_commands.push_back(MakeGarbageCollected<Log>('c', log)); + third_commands.push_back(MakeGarbageCollected<Recurse>(queue)); + CustomElementReaction* third = MakeGarbageCollected<TestReaction>( + std::move(third_commands)); // "Empty" recursion - HeapVector<Member<Command>>* second_commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - second_commands->push_back(MakeGarbageCollected<Log>('b', log)); - second_commands->push_back(MakeGarbageCollected<Enqueue>(queue, third)); + HeapVector<Member<Command>> second_commands; + second_commands.push_back(MakeGarbageCollected<Log>('b', log)); + second_commands.push_back(MakeGarbageCollected<Enqueue>(queue, third)); CustomElementReaction* second = MakeGarbageCollected<TestReaction>( - second_commands); // Unwinds one level of recursion + std::move(second_commands)); // Unwinds one level of recursion - HeapVector<Member<Command>>* first_commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - first_commands->push_back(MakeGarbageCollected<Log>('a', log)); - first_commands->push_back(MakeGarbageCollected<Enqueue>(queue, second)); - first_commands->push_back(MakeGarbageCollected<Recurse>(queue)); + HeapVector<Member<Command>> first_commands; + first_commands.push_back(MakeGarbageCollected<Log>('a', log)); + first_commands.push_back(MakeGarbageCollected<Enqueue>(queue, second)); + first_commands.push_back(MakeGarbageCollected<Recurse>(queue)); CustomElementReaction* first = MakeGarbageCollected<TestReaction>( - first_commands); // Non-empty recursion + std::move(first_commands)); // Non-empty recursion queue->Add(*first); Element* test_element = CreateElement(AtomicString("my-element")); @@ -96,24 +89,21 @@ MakeGarbageCollected<CustomElementReactionQueue>(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Call>(WTF::Bind( + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Call>(WTF::Bind( [](CustomElementReactionQueue* queue, Element&) { queue->Clear(); }, WrapPersistent(queue)))); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - queue->Add(*MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + queue->Add(*MakeGarbageCollected<TestReaction>(std::move(commands))); } Element* test_element = CreateElement(AtomicString("my-element"));
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction_stack_test.cc b/third_party/blink/renderer/core/html/custom/custom_element_reaction_stack_test.cc index b3a8d86d..a515720 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction_stack_test.cc +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction_stack_test.cc
@@ -21,11 +21,11 @@ CustomElementReactionStack* stack = MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); stack->PopInvokingReactions(); EXPECT_EQ(log, Vector<char>({'a'})) @@ -39,18 +39,18 @@ MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->PopInvokingReactions(); @@ -64,11 +64,11 @@ CustomElementReactionStack* stack = MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); stack->Push(); stack->PopInvokingReactions(); @@ -83,19 +83,19 @@ MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->PopInvokingReactions(); @@ -112,25 +112,23 @@ MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(element, - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('z', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('z', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - stack->EnqueueToCurrentQueue(element, - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + stack->EnqueueToCurrentQueue( + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->PopInvokingReactions(); @@ -147,33 +145,31 @@ MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('a', log)); - stack->EnqueueToCurrentQueue(element, - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('a', log)); + stack->EnqueueToCurrentQueue( + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('z', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('z', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->Push(); { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('y', log)); - stack->EnqueueToCurrentQueue(*CreateElement("a"), - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('y', log)); + stack->EnqueueToCurrentQueue( + *CreateElement("a"), + *MakeGarbageCollected<TestReaction>(std::move(commands))); } { - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<Log>('b', log)); - stack->EnqueueToCurrentQueue(element, - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<Log>('b', log)); + stack->EnqueueToCurrentQueue( + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->PopInvokingReactions(); @@ -219,15 +215,14 @@ MakeGarbageCollected<CustomElementReactionStack>(); stack->Push(); { - HeapVector<Member<Command>>* subcommands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - subcommands->push_back(MakeGarbageCollected<Log>('a', log)); - HeapVector<Member<Command>>* commands = - MakeGarbageCollected<HeapVector<Member<Command>>>(); - commands->push_back(MakeGarbageCollected<EnqueueToStack>( - stack, element, MakeGarbageCollected<TestReaction>(subcommands))); - stack->EnqueueToCurrentQueue(element, - *MakeGarbageCollected<TestReaction>(commands)); + HeapVector<Member<Command>> subcommands; + subcommands.push_back(MakeGarbageCollected<Log>('a', log)); + HeapVector<Member<Command>> commands; + commands.push_back(MakeGarbageCollected<EnqueueToStack>( + stack, element, + MakeGarbageCollected<TestReaction>(std::move(subcommands)))); + stack->EnqueueToCurrentQueue( + element, *MakeGarbageCollected<TestReaction>(std::move(commands))); } stack->PopInvokingReactions();
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h b/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h index ee3a129..a9417d1 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h +++ b/third_party/blink/renderer/core/html/custom/custom_element_reaction_test_helpers.h
@@ -107,23 +107,23 @@ class TestReaction : public CustomElementReaction { public: - TestReaction(HeapVector<Member<Command>>* commands) + explicit TestReaction(HeapVector<Member<Command>>&& commands) : CustomElementReaction( *MakeGarbageCollected<TestCustomElementDefinition>( CustomElementDescriptor("mock-element", "mock-element"))), - commands_(commands) {} + commands_(std::move(commands)) {} ~TestReaction() override = default; void Trace(Visitor* visitor) const override { CustomElementReaction::Trace(visitor); visitor->Trace(commands_); } void Invoke(Element& element) override { - for (auto& command : *commands_) + for (auto& command : commands_) command->Run(element); } private: - Member<HeapVector<Member<Command>>> commands_; + HeapVector<Member<Command>> commands_; DISALLOW_COPY_AND_ASSIGN(TestReaction); };
diff --git a/third_party/blink/renderer/core/html/forms/base_text_input_type.cc b/third_party/blink/renderer/core/html/forms/base_text_input_type.cc index 0f838dc..200b2bd 100644 --- a/third_party/blink/renderer/core/html/forms/base_text_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/base_text_input_type.cc
@@ -32,6 +32,11 @@ namespace blink { +void BaseTextInputType::Trace(Visitor* visitor) const { + visitor->Trace(regexp_); + TextFieldInputType::Trace(visitor); +} + BaseTextInputType::BaseTextInputType(HTMLInputElement& element) : TextFieldInputType(element) {} @@ -84,9 +89,9 @@ if (raw_pattern.IsNull() || value.IsEmpty()) return false; if (!regexp_ || pattern_for_regexp_ != raw_pattern) { - std::unique_ptr<ScriptRegexp> raw_regexp( - new ScriptRegexp(raw_pattern, kTextCaseSensitive, kMultilineDisabled, - ScriptRegexp::UTF16)); + ScriptRegexp* raw_regexp = MakeGarbageCollected<ScriptRegexp>( + raw_pattern, kTextCaseSensitive, kMultilineDisabled, + ScriptRegexp::UTF16); if (!raw_regexp->IsValid()) { GetElement().GetDocument().AddConsoleMessage( MakeGarbageCollected<ConsoleMessage>( @@ -95,13 +100,13 @@ "Pattern attribute value " + raw_pattern + " is not a valid regular expression: " + raw_regexp->ExceptionMessage())); - regexp_.reset(raw_regexp.release()); + regexp_ = raw_regexp; pattern_for_regexp_ = raw_pattern; return false; } String pattern = "^(?:" + raw_pattern + ")$"; - regexp_.reset(new ScriptRegexp(pattern, kTextCaseSensitive, - kMultilineDisabled, ScriptRegexp::UTF16)); + regexp_ = MakeGarbageCollected<ScriptRegexp>( + pattern, kTextCaseSensitive, kMultilineDisabled, ScriptRegexp::UTF16); pattern_for_regexp_ = raw_pattern; } else if (!regexp_->IsValid()) { return false;
diff --git a/third_party/blink/renderer/core/html/forms/base_text_input_type.h b/third_party/blink/renderer/core/html/forms/base_text_input_type.h index 9e82080..f75ae74 100644 --- a/third_party/blink/renderer/core/html/forms/base_text_input_type.h +++ b/third_party/blink/renderer/core/html/forms/base_text_input_type.h
@@ -40,6 +40,9 @@ // Base of email, password, search, tel, text, and URL types. // They support maxlength, selection functions, and so on. class BaseTextInputType : public TextFieldInputType { + public: + void Trace(Visitor* visitor) const override; + protected: BaseTextInputType(HTMLInputElement&); ~BaseTextInputType() override; @@ -57,7 +60,7 @@ // regexp_ and pattern_for_regexp_ are mutable because they are kinds of // cache. - mutable std::unique_ptr<ScriptRegexp> regexp_; + mutable Member<ScriptRegexp> regexp_; mutable AtomicString pattern_for_regexp_; };
diff --git a/third_party/blink/renderer/core/html/forms/email_input_type.cc b/third_party/blink/renderer/core/html/forms/email_input_type.cc index 06aa0bf6..4e574da 100644 --- a/third_party/blink/renderer/core/html/forms/email_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/email_input_type.cc
@@ -57,9 +57,9 @@ // Use the same option as in url/url_canon_icu.cc static const int32_t kIdnaConversionOption = UIDNA_CHECK_BIDI; -std::unique_ptr<ScriptRegexp> EmailInputType::CreateEmailRegexp() { - return std::make_unique<ScriptRegexp>(kEmailPattern, - kTextCaseUnicodeInsensitive); +ScriptRegexp* EmailInputType::CreateEmailRegexp() { + return MakeGarbageCollected<ScriptRegexp>(kEmailPattern, + kTextCaseUnicodeInsensitive); } String EmailInputType::ConvertEmailAddressToASCII(const ScriptRegexp& regexp,
diff --git a/third_party/blink/renderer/core/html/forms/email_input_type.h b/third_party/blink/renderer/core/html/forms/email_input_type.h index 41970a0..77eeeab 100644 --- a/third_party/blink/renderer/core/html/forms/email_input_type.h +++ b/third_party/blink/renderer/core/html/forms/email_input_type.h
@@ -44,7 +44,7 @@ const String&); CORE_EXPORT static bool IsValidEmailAddress(const ScriptRegexp&, const String&); - CORE_EXPORT static std::unique_ptr<ScriptRegexp> CreateEmailRegexp(); + CORE_EXPORT static ScriptRegexp* CreateEmailRegexp(); private: void CountUsage() override;
diff --git a/third_party/blink/renderer/core/html/forms/email_input_type_test.cc b/third_party/blink/renderer/core/html/forms/email_input_type_test.cc index b702e425..6151a7379 100644 --- a/third_party/blink/renderer/core/html/forms/email_input_type_test.cc +++ b/third_party/blink/renderer/core/html/forms/email_input_type_test.cc
@@ -12,8 +12,7 @@ namespace { void ExpectToSucceed(const String& source) { - std::unique_ptr<ScriptRegexp> email_regexp = - EmailInputType::CreateEmailRegexp(); + ScriptRegexp* email_regexp = EmailInputType::CreateEmailRegexp(); String result = EmailInputType::ConvertEmailAddressToASCII(*email_regexp, source); EXPECT_NE(source, result); @@ -21,8 +20,7 @@ } void ExpectToFail(const String& source) { - std::unique_ptr<ScriptRegexp> email_regexp = - EmailInputType::CreateEmailRegexp(); + ScriptRegexp* email_regexp = EmailInputType::CreateEmailRegexp(); // Conversion failed. The resultant value might contains non-ASCII // characters, and not a valid email address. EXPECT_FALSE(EmailInputType::IsValidEmailAddress(
diff --git a/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc b/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc index ea0b9c9..b770d766 100644 --- a/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc
@@ -96,8 +96,7 @@ if (auto* option = DynamicTo<HTMLOptionElement>(change.sibling_changed)) select->OptionRemoved(*option); } else if (change.type == ChildrenChangeType::kAllChildrenRemoved) { - DCHECK(change.removed_nodes); - for (Node* node : *change.removed_nodes) { + for (Node* node : change.removed_nodes) { if (auto* option = DynamicTo<HTMLOptionElement>(node)) select->OptionRemoved(*option); }
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc index 87e0b39..54f78bd 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -709,8 +709,7 @@ OptionRemoved(child_option); } } else if (change.type == ChildrenChangeType::kAllChildrenRemoved) { - DCHECK(change.removed_nodes); - for (Node* node : *change.removed_nodes) { + for (Node* node : change.removed_nodes) { if (auto* option = DynamicTo<HTMLOptionElement>(node)) { OptionRemoved(*option); } else if (auto* optgroup = DynamicTo<HTMLOptGroupElement>(node)) {
diff --git a/third_party/blink/renderer/core/html/parser/preload_request.cc b/third_party/blink/renderer/core/html/parser/preload_request.cc index 8318f626..908a851 100644 --- a/third_party/blink/renderer/core/html/parser/preload_request.cc +++ b/third_party/blink/renderer/core/html/parser/preload_request.cc
@@ -100,6 +100,7 @@ DCHECK_EQ(resource_type_, ResourceType::kScript); params.SetCrossOriginAccessControl( origin, ScriptLoader::ModuleScriptCredentialsMode(cross_origin_)); + params.SetModuleScript(); } else if (cross_origin_ != kCrossOriginAttributeNotSet) { params.SetCrossOriginAccessControl(origin, cross_origin_); }
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc index 2999c84..464f53c0 100644 --- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc +++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
@@ -1565,7 +1565,8 @@ std::unique_ptr<protocol::Array<protocol::CSS::Value>> InspectorStyleSheet::SelectorsFromSource(CSSRuleSourceData* source_data, const String& sheet_text) { - ScriptRegexp comment("/\\*[^]*?\\*/", kTextCaseSensitive, kMultilineEnabled); + auto* comment = MakeGarbageCollected<ScriptRegexp>( + "/\\*[^]*?\\*/", kTextCaseSensitive, kMultilineEnabled); auto result = std::make_unique<protocol::Array<protocol::CSS::Value>>(); const Vector<SourceRange>& ranges = source_data->selector_ranges; for (wtf_size_t i = 0, size = ranges.size(); i < size; ++i) { @@ -1576,7 +1577,7 @@ // meaningful parts. int match_length; int offset = 0; - while ((offset = comment.Match(selector, offset, &match_length)) >= 0) + while ((offset = comment->Match(selector, offset, &match_length)) >= 0) selector.replace(offset, match_length, ""); std::unique_ptr<protocol::CSS::Value> simple_selector =
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index c147d18f..bf9f2d8 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -434,7 +434,9 @@ // no paint effects (only white-space, for instance). if ((IsText() && IsLayoutNGObject()) || // and culled inline boxes too. - (IsInLayoutNGInlineFormattingContext() && IsLayoutInline())) + (IsInLayoutNGInlineFormattingContext() && IsLayoutInline()) || + // TablesNG columns are also not visited. + (IsLayoutTableCol() && IsLayoutNGObject())) return; ShowLayoutTreeForThis(); NOTREACHED();
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index 32205ae..3af3b624 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -1688,34 +1688,35 @@ SecurityContextInit security_init(frame_->DomWindow()); - // The document constructed by XSLTProcessor should inherit Feature Policy - // from the previous Document. Note: In XSLT commit, |response_| no longer - // holds header fields. Going through regular initialization will cause empty - // policy even if there is header on xml document. - // TODO(crbug.com/1151954): Fix the problem for Document Policy as well. + // The document constructed by XSLTProcessor should inherit Feature Policy and + // Document Policy from the previous Document. Note: In XSLT commit, + // |response_| no longer holds header fields. Going through regular + // initialization will cause empty policy even if there is header on xml + // document. if (commit_reason_ == CommitReason::kXSLT) { DCHECK(response_.HttpHeaderField(http_names::kFeaturePolicy).IsEmpty()); DCHECK(response_.HttpHeaderField(http_names::kPermissionsPolicy).IsEmpty()); + DCHECK(response_.HttpHeaderField(http_names::kDocumentPolicy).IsEmpty()); security_init.InitFeaturePolicyFrom(previous_window->GetSecurityContext()); + security_init.InitDocumentPolicyFrom(previous_window->GetSecurityContext()); } else { // FeaturePolicy and DocumentPolicy require SecurityOrigin and origin trials // to be initialized. // TODO(iclelland): Add Feature-Policy-Report-Only to Origin Policy. security_init.ApplyFeaturePolicy(frame_.Get(), response_, origin_policy_, frame_policy_); + // |document_policy_| is parsed in document loader because it is + // compared with |frame_policy.required_document_policy| to decide + // whether to block the document load or not. + // |report_only_document_policy| does not block the page load. Its + // initialization is delayed to + // SecurityContextInit::InitializeDocumentPolicy(), similar to + // |report_only_feature_policy|. + security_init.ApplyDocumentPolicy( + document_policy_, + response_.HttpHeaderField(http_names::kDocumentPolicyReportOnly)); } - // |document_policy_| is parsed in document loader because it is - // compared with |frame_policy.required_document_policy| to decide - // whether to block the document load or not. - // |report_only_document_policy| does not block the page load. Its - // initialization is delayed to - // SecurityContextInit::InitializeDocumentPolicy(), similar to - // |report_only_feature_policy|. - security_init.ApplyDocumentPolicy( - document_policy_, - response_.HttpHeaderField(http_names::kDocumentPolicyReportOnly)); - navigation_scroll_allowed_ = !frame_->DomWindow()->IsFeatureEnabled( mojom::blink::DocumentPolicyFeature::kForceLoadAtTop);
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc index bd91e546..4bfab0fd 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -441,12 +441,7 @@ if (!Client()) return false; Settings* settings = frame_->GetSettings(); - bool allowed = settings && settings->GetPluginsEnabled(); - if (!allowed && reason == kAboutToInstantiatePlugin) { - if (auto* settings_client = frame_->GetContentSettingsClient()) - settings_client->DidNotAllowPlugins(); - } - return allowed; + return settings && settings->GetPluginsEnabled(); } void FrameLoader::DetachDocumentLoader(Member<DocumentLoader>& loader,
diff --git a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.cc index 9b4eb2c..f28f2f5a 100644 --- a/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.cc
@@ -4,7 +4,10 @@ #include "third_party/blink/renderer/core/loader/modulescript/document_module_script_fetcher.h" +#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h" +#include "third_party/blink/renderer/bindings/core/v8/script_streamer.h" #include "third_party/blink/renderer/core/inspector/console_message.h" +#include "third_party/blink/renderer/core/loader/resource/script_resource.h" #include "third_party/blink/renderer/platform/bindings/parkable_string.h" #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/wtf/vector.h" @@ -20,10 +23,11 @@ ResourceFetcher* fetch_client_settings_object_fetcher, ModuleGraphLevel level, ModuleScriptFetcher::Client* client) { + DCHECK_EQ(fetch_params.GetScriptType(), mojom::blink::ScriptType::kModule); DCHECK(fetch_client_settings_object_fetcher); DCHECK(!client_); client_ = client; - + // TODO(crbug.com/1061857): Enable streaming. ScriptResource::Fetch(fetch_params, fetch_client_settings_object_fetcher, this, ScriptResource::kNoStreaming); } @@ -40,11 +44,12 @@ client_->NotifyFetchFinished(base::nullopt, error_messages); return; } - + // TODO(crbug.com/1061857): Pass ScriptStreamer to the client here. ModuleScriptCreationParams params( script_resource->GetResponse().CurrentRequestUrl(), module_type, script_resource->SourceText(), script_resource->CacheHandler(), - script_resource->GetResourceRequest().GetCredentialsMode()); + script_resource->GetResourceRequest().GetCredentialsMode(), nullptr, + ScriptStreamer::NotStreamingReason::kStreamingDisabled); client_->NotifyFetchFinished(params, error_messages); }
diff --git a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc index 6513ce34..0b711b4c 100644 --- a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc
@@ -30,6 +30,7 @@ ResourceFetcher*, ModuleGraphLevel level, ModuleScriptFetcher::Client* client) { + DCHECK_EQ(fetch_params.GetScriptType(), mojom::blink::ScriptType::kModule); DCHECK(global_scope_->IsContextThread()); auto* installed_scripts_manager = global_scope_->GetInstalledScriptsManager(); DCHECK(installed_scripts_manager);
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h b/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h index 5f16296c9..258f3646 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h
@@ -7,6 +7,8 @@ #include "base/optional.h" #include "third_party/blink/public/platform/web_url_request.h" +#include "third_party/blink/renderer/bindings/core/v8/script_streamer.h" +#include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/platform/bindings/parkable_string.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h" @@ -24,18 +26,27 @@ public: ModuleScriptCreationParams( - const KURL& response_url, + const KURL& source_url, const ModuleScriptCreationParams::ModuleType module_type, const ParkableString& source_text, SingleCachedMetadataHandler* cache_handler, - network::mojom::CredentialsMode credentials_mode) - : response_url_(response_url), + network::mojom::CredentialsMode credentials_mode, + ScriptStreamer* script_streamer = nullptr, + ScriptStreamer::NotStreamingReason not_streaming_reason = + ScriptStreamer::NotStreamingReason::kStreamingDisabled) + : source_url_(source_url), module_type_(module_type), is_isolated_(false), source_text_(source_text), isolated_source_text_(), cache_handler_(cache_handler), - credentials_mode_(credentials_mode) {} + credentials_mode_(credentials_mode), + script_streamer_(script_streamer), + not_streaming_reason_(not_streaming_reason) { + DCHECK_EQ( + !script_streamer, + not_streaming_reason != ScriptStreamer::NotStreamingReason::kInvalid); + } ~ModuleScriptCreationParams() = default; @@ -43,8 +54,7 @@ String isolated_source_text = isolated_source_text_ ? isolated_source_text_.IsolatedCopy() : GetSourceText().ToString().IsolatedCopy(); - - return ModuleScriptCreationParams(GetResponseUrl().Copy(), module_type_, + return ModuleScriptCreationParams(SourceURL().Copy(), module_type_, isolated_source_text, GetFetchCredentialsMode()); } @@ -53,7 +63,8 @@ return module_type_; } - const KURL& GetResponseUrl() const { return response_url_; } + const KURL& SourceURL() const { return source_url_; } + const ParkableString& GetSourceText() const { if (is_isolated_) { source_text_ = ParkableString(isolated_source_text_.ReleaseImpl()); @@ -62,30 +73,46 @@ } return source_text_; } + + // TODO(crbug.com/1154943): Make this non-const. + void ClearSourceText() const { + source_text_ = ParkableString(); + isolated_source_text_ = String(); + is_isolated_ = false; + } + SingleCachedMetadataHandler* CacheHandler() const { return cache_handler_; } + network::mojom::CredentialsMode GetFetchCredentialsMode() const { return credentials_mode_; } bool IsSafeToSendToAnotherThread() const { - return response_url_.IsSafeToSendToAnotherThread() && is_isolated_; + return source_url_.IsSafeToSendToAnotherThread() && is_isolated_; } private: // Creates an isolated copy. ModuleScriptCreationParams( - const KURL& response_url, + const KURL& source_url, const ModuleScriptCreationParams::ModuleType& module_type, const String& isolated_source_text, network::mojom::CredentialsMode credentials_mode) - : response_url_(response_url), + : source_url_(source_url), module_type_(module_type), is_isolated_(true), source_text_(), isolated_source_text_(isolated_source_text), - credentials_mode_(credentials_mode) {} + credentials_mode_(credentials_mode), + // The ScriptStreamer is intentionally cleared since it cannot be passed + // across threads. This only disables script streaming on worklet + // top-level scripts where the ModuleScriptCreationParams is + // passed across threads. + script_streamer_(nullptr), + not_streaming_reason_( + ScriptStreamer::NotStreamingReason::kStreamingDisabled) {} - const KURL response_url_; + const KURL source_url_; const ModuleType module_type_; // Mutable because an isolated copy can become bound to a thread when @@ -98,14 +125,18 @@ Persistent<SingleCachedMetadataHandler> cache_handler_; const network::mojom::CredentialsMode credentials_mode_; + + // |script_streamer_| is cleared when crossing thread boundaries. + Persistent<ScriptStreamer> script_streamer_; + const ScriptStreamer::NotStreamingReason not_streaming_reason_; }; } // namespace blink namespace WTF { -// Creates a deep copy because |response_url_| and |source_text_| are not -// cross-thread-transfer-safe. +// Creates a deep copy because |source_url_|, |source_text_| and +// |script_streamer_| are not cross-thread-transfer-safe. template <> struct CrossThreadCopier<blink::ModuleScriptCreationParams> { static blink::ModuleScriptCreationParams Copy(
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc index 82c44494..9b3f8cc 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc
@@ -7,6 +7,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/renderer/core/dom/dom_implementation.h" #include "third_party/blink/renderer/core/inspector/console_message.h" +#include "third_party/blink/renderer/core/loader/resource/script_resource.h" #include "third_party/blink/renderer/core/loader/subresource_integrity_helper.h" #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/loader/cors/cors.h" @@ -34,10 +35,11 @@ // <specdef href="https://html.spec.whatwg.org/C/#fetch-a-single-module-script"> bool ModuleScriptFetcher::WasModuleLoadSuccessful( - Resource* resource, + ScriptResource* resource, HeapVector<Member<ConsoleMessage>>* error_messages, ModuleScriptCreationParams::ModuleType* module_type) { DCHECK(error_messages); + DCHECK_EQ(resource->GetScriptType(), mojom::blink::ScriptType::kModule); if (resource) { SubresourceIntegrityHelper::GetConsoleMessages(
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h index b411be38..a47aefdc 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.h
@@ -53,7 +53,7 @@ protected: static bool WasModuleLoadSuccessful( - Resource* resource, + ScriptResource* resource, HeapVector<Member<ConsoleMessage>>* error_messages, ModuleScriptCreationParams::ModuleType* module_type); };
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc index 7bff037b..d529d21 100644 --- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc +++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
@@ -154,6 +154,7 @@ // Note: |options| should not be modified after here. FetchParameters fetch_params(std::move(resource_request), options); + fetch_params.SetModuleScript(); // <spec label="SMSR">... its integrity metadata to options's integrity // metadata, ...</spec> @@ -270,9 +271,8 @@ // a module script given source text, module map settings object, // response's url, and options." [spec text] module_script_ = JSModuleScript::Create( - params->GetSourceText(), params->CacheHandler(), - ScriptSourceLocationType::kExternalFile, modulator_, - params->GetResponseUrl(), params->GetResponseUrl(), options_); + params.value(), params->SourceURL() /* base URL */, + ScriptSourceLocationType::kExternalFile, modulator_, options_); break; }
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc index 50df267..03418efe 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
@@ -37,6 +37,7 @@ ResourceFetcher* fetch_client_settings_object_fetcher, ModuleGraphLevel level, ModuleScriptFetcher::Client* client) { + DCHECK_EQ(fetch_params.GetScriptType(), mojom::blink::ScriptType::kModule); DCHECK(global_scope_->IsContextThread()); DCHECK(!fetch_client_settings_object_fetcher_); fetch_client_settings_object_fetcher_ = fetch_client_settings_object_fetcher;
diff --git a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.cc index 338062c..f329dcc 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/worklet_module_script_fetcher.cc
@@ -19,6 +19,7 @@ ResourceFetcher* fetch_client_settings_object_fetcher, ModuleGraphLevel level, ModuleScriptFetcher::Client* client) { + DCHECK_EQ(fetch_params.GetScriptType(), mojom::blink::ScriptType::kModule); if (module_responses_map_->GetEntry( fetch_params.Url(), client, fetch_client_settings_object_fetcher->GetTaskRunner())) {
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.cc b/third_party/blink/renderer/core/loader/resource/script_resource.cc index 44c4a18d..e38c594 100644 --- a/third_party/blink/renderer/core/loader/resource/script_resource.cc +++ b/third_party/blink/renderer/core/loader/resource/script_resource.cc
@@ -84,31 +84,35 @@ DCHECK(IsRequestContextSupported( params.GetResourceRequest().GetRequestContext())); auto* resource = To<ScriptResource>(fetcher->RequestResource( - params, ScriptResourceFactory(streaming_allowed), client)); + params, ScriptResourceFactory(streaming_allowed, params.GetScriptType()), + client)); return resource; } ScriptResource* ScriptResource::CreateForTest( const KURL& url, - const WTF::TextEncoding& encoding) { + const WTF::TextEncoding& encoding, + mojom::blink::ScriptType script_type) { ResourceRequest request(url); request.SetCredentialsMode(network::mojom::CredentialsMode::kOmit); ResourceLoaderOptions options(nullptr /* world */); TextResourceDecoderOptions decoder_options( TextResourceDecoderOptions::kPlainTextContent, encoding); return MakeGarbageCollected<ScriptResource>(request, options, decoder_options, - kNoStreaming); + kNoStreaming, script_type); } ScriptResource::ScriptResource( const ResourceRequest& resource_request, const ResourceLoaderOptions& options, const TextResourceDecoderOptions& decoder_options, - StreamingAllowed streaming_allowed) + StreamingAllowed streaming_allowed, + mojom::blink::ScriptType script_type) : TextResource(resource_request, ResourceType::kScript, options, - decoder_options) { + decoder_options), + script_type_(script_type) { static bool script_streaming_enabled = base::FeatureList::IsEnabled(features::kScriptStreaming); @@ -130,6 +134,13 @@ TextResource::Trace(visitor); } +Resource::MatchStatus ScriptResource::CanReuse( + const FetchParameters& params) const { + if (script_type_ != params.GetScriptType()) + return Resource::MatchStatus::kScriptTypeDoesNotMatch; + return Resource::CanReuse(params); +} + void ScriptResource::OnMemoryDump(WebMemoryDumpLevelOfDetail level_of_detail, WebProcessMemoryDump* memory_dump) const { Resource::OnMemoryDump(level_of_detail, memory_dump);
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.h b/third_party/blink/renderer/core/loader/resource/script_resource.h index 3d256a0..c906cd13 100644 --- a/third_party/blink/renderer/core/loader/resource/script_resource.h +++ b/third_party/blink/renderer/core/loader/resource/script_resource.h
@@ -28,6 +28,8 @@ #include <memory> +#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h" +#include "third_party/blink/public/mojom/script/script_type.mojom-shared.h" #include "third_party/blink/renderer/bindings/core/v8/script_streamer.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/resource/text_resource.h" @@ -46,7 +48,8 @@ class SingleCachedMetadataHandler; // ScriptResource is a resource representing a JavaScript, either a classic or -// module script. +// module script. ScriptResources are not shared between classic and module +// scripts. // // In addition to loading the script, a ScriptResource can optionally stream the // script to the JavaScript parser/compiler, using a ScriptStreamer. In this @@ -68,15 +71,20 @@ StreamingAllowed); // Public for testing - static ScriptResource* CreateForTest(const KURL& url, - const WTF::TextEncoding& encoding); + static ScriptResource* CreateForTest( + const KURL& url, + const WTF::TextEncoding& encoding, + mojom::blink::ScriptType = mojom::blink::ScriptType::kClassic); ScriptResource(const ResourceRequest&, const ResourceLoaderOptions&, const TextResourceDecoderOptions&, - StreamingAllowed); + StreamingAllowed, + mojom::blink::ScriptType); ~ScriptResource() override; + Resource::MatchStatus CanReuse(const FetchParameters& params) const override; + size_t CodeCacheSize() const override; void ResponseReceived(const ResourceResponse&) override; void ResponseBodyReceived( @@ -98,6 +106,8 @@ SingleCachedMetadataHandler* CacheHandler(); + mojom::blink::ScriptType GetScriptType() const { return script_type_; } + // Gets the script streamer from the ScriptResource, clearing the resource's // streamer so that it cannot be used twice. ScriptStreamer* TakeStreamer(); @@ -146,21 +156,24 @@ class ScriptResourceFactory : public ResourceFactory { public: - explicit ScriptResourceFactory(StreamingAllowed streaming_allowed) + explicit ScriptResourceFactory(StreamingAllowed streaming_allowed, + mojom::blink::ScriptType script_type) : ResourceFactory(ResourceType::kScript, TextResourceDecoderOptions::kPlainTextContent), - streaming_allowed_(streaming_allowed) {} + streaming_allowed_(streaming_allowed), + script_type_(script_type) {} Resource* Create( const ResourceRequest& request, const ResourceLoaderOptions& options, const TextResourceDecoderOptions& decoder_options) const override { return MakeGarbageCollected<ScriptResource>( - request, options, decoder_options, streaming_allowed_); + request, options, decoder_options, streaming_allowed_, script_type_); } private: StreamingAllowed streaming_allowed_; + mojom::blink::ScriptType script_type_; }; bool CanUseCacheValidator() const override; @@ -182,6 +195,7 @@ ScriptStreamer::NotStreamingReason::kInvalid; StreamingState streaming_state_ = StreamingState::kWaitingForDataPipe; Member<ScriptCachedMetadataHandler> cached_metadata_handler_; + const mojom::blink::ScriptType script_type_; }; template <>
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc index bc342d2..6cd063a0 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc
@@ -224,8 +224,10 @@ int corrected_end_offset = ephemeral_range.EndPosition().ComputeOffsetInContainerNode(); if (IsFirstVisiblePosition(corrected_end, corrected_end_offset)) { + // Here, |Previous()| already skips the children of the given node, + // because we're doing pre-order traversal. corrected_end = BackwardNonEmptyVisibleTextNode( - FlatTreeTraversal::PreviousSkippingChildren(*corrected_end)); + FlatTreeTraversal::Previous(*corrected_end)); if (corrected_end) corrected_end_offset = corrected_end->textContent().length(); } else { @@ -563,7 +565,7 @@ // use the preceding visible node for the suffix. if (IsFirstVisiblePosition(prefix_end, prefix_end_offset)) { prefix_end = BackwardNonEmptyVisibleTextNode( - FlatTreeTraversal::PreviousSkippingChildren(*prefix_end)); + FlatTreeTraversal::Previous(*prefix_end)); if (!prefix_end) return "";
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc index 65cdfb4ef..7ab9e0c6 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc
@@ -872,6 +872,76 @@ VerifySelector(start, end, "First%20paragraph,-Second"); } +// Check the case when parent of selection start is a sibling of a node where +// selection ends. +// :root +// / \ +// div p +// | | +// p "]Second" +// | +// "[First..." +// Where [] indicate selection. In this case, when the selection is adjusted, we +// want to ensure it correctly traverses the tree back to the previous text node +// and not to the <div>(sibling of second <p>). +// +// crbug.com/1154308 - checks the use of Previous instead of +// PreviousSkippingChildren in TextFragmentSelectorGenerator::AdjustSelection +TEST_F(TextFragmentSelectorGeneratorTest, PrevNodeIsSiblingsChild) { + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + + // HTML is intentionally not formatted. Adding new lines and itendation + // creates empty text nodes which changes the dom tree. + request.Complete(R"HTML( + <!DOCTYPE html> + <div><p id='start'>First paragraph</p></div><p id='end'>Second paragraph</p> + )HTML"); + GetDocument().UpdateStyleAndLayoutTree(); + Node* first_paragraph = GetDocument().getElementById("start")->firstChild(); + Node* second_paragraph = GetDocument().getElementById("end"); + const auto& start = Position(first_paragraph, 0); + const auto& end = Position(second_paragraph, 0); + ASSERT_EQ("First paragraph\n\n", PlainText(EphemeralRange(start, end))); + + VerifySelector(start, end, "First%20paragraph,-Second"); +} + +// Check the case when parent of selection start is a sibling of a node where +// selection ends. +// :root +// / | \ +// div div p +// | | \ +// p "test" "]Second" +// | +//"[First..." +// +// Where [] indicate selection. In this case, when the selection is adjusted, we +// want to ensure it correctly traverses the tree back to the previous text by +// correctly skipping the invisible div but not skipping the second <p>. +// +// crbug.com/1154308 - checks the use of Previous instead of +// PreviousSkippingChildren in FindBuffer::BackwardVisibleTextNode +TEST_F(TextFragmentSelectorGeneratorTest, PrevPrevNodeIsSiblingsChild) { + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + // HTML is intentionally not formatted. Adding new lines and itendation + // creates empty text nodes which changes the dom tree. + request.Complete(R"HTML( + <!DOCTYPE html> + <div><p id='start'>First paragraph</p></div><div style='display:none'>test</div><p id='end'>Second paragraph</p> + )HTML"); + GetDocument().UpdateStyleAndLayoutTree(); + Node* first_paragraph = GetDocument().getElementById("start")->firstChild(); + Node* second_paragraph = GetDocument().getElementById("end"); + const auto& start = Position(first_paragraph, 0); + const auto& end = Position(second_paragraph, 0); + ASSERT_EQ("First paragraph\n\n", PlainText(EphemeralRange(start, end))); + + VerifySelector(start, end, "First%20paragraph,-Second"); +} + // Checks that for short selection that have nested block element range selector // is used. TEST_F(TextFragmentSelectorGeneratorTest, RangeSelector_SameNode_Interrupted) {
diff --git a/third_party/blink/renderer/core/paint/nine_piece_image_grid.cc b/third_party/blink/renderer/core/paint/nine_piece_image_grid.cc index 1efb5d8..fed8a8e3 100644 --- a/third_party/blink/renderer/core/paint/nine_piece_image_grid.cc +++ b/third_party/blink/renderer/core/paint/nine_piece_image_grid.cc
@@ -22,9 +22,21 @@ return ValueForLength(border_slice.length(), LayoutUnit(box_extent)).Floor(); } -static int ComputeEdgeSlice(const Length& slice, int maximum) { - return std::min<int>(maximum, - ValueForLength(slice, LayoutUnit(maximum)).Floor()); +static int ComputeEdgeSlice(const Length& slice, + float slice_scale, + int maximum) { + int resolved; + // If the slice is a <number> (stored as a fixed Length), scale it by the + // slice scale to get to the same space as the image. + if (slice.IsFixed()) { + LayoutUnit slice_value(slice.Value()); + slice_value *= slice_scale; + resolved = slice_value.Round(); + } else { + DCHECK(slice.IsPercent()); + resolved = ValueForLength(slice, LayoutUnit(maximum)).Floor(); + } + return std::min<int>(maximum, resolved); } // Scale the width of the |start| and |end| edges using |scale_factor|. @@ -48,6 +60,8 @@ NinePieceImageGrid::NinePieceImageGrid(const NinePieceImage& nine_piece_image, IntSize image_size, + const FloatSize& slice_scale, + float zoom, IntRect border_image_area, const IntRectOutsets& border_widths, PhysicalBoxSides sides_to_include) @@ -56,38 +70,49 @@ horizontal_tile_rule_(nine_piece_image.HorizontalRule()), vertical_tile_rule_(nine_piece_image.VerticalRule()), fill_(nine_piece_image.Fill()) { - top_.slice = ComputeEdgeSlice(nine_piece_image.ImageSlices().Top(), + const LengthBox& image_slices = nine_piece_image.ImageSlices(); + top_.slice = ComputeEdgeSlice(image_slices.Top(), slice_scale.Height(), image_size.Height()); - right_.slice = ComputeEdgeSlice(nine_piece_image.ImageSlices().Right(), + right_.slice = ComputeEdgeSlice(image_slices.Right(), slice_scale.Width(), image_size.Width()); - bottom_.slice = ComputeEdgeSlice(nine_piece_image.ImageSlices().Bottom(), + bottom_.slice = ComputeEdgeSlice(image_slices.Bottom(), slice_scale.Height(), image_size.Height()); - left_.slice = ComputeEdgeSlice(nine_piece_image.ImageSlices().Left(), + left_.slice = ComputeEdgeSlice(image_slices.Left(), slice_scale.Width(), image_size.Width()); // TODO(fs): Compute edge widths to LayoutUnit, and then only round to // integer at the end - after (potential) compensation for overlapping edges. - top_.width = sides_to_include.top - ? ComputeEdgeWidth(nine_piece_image.BorderSlices().Top(), - border_widths.Top(), top_.slice, - border_image_area.Height()) - : 0; - right_.width = sides_to_include.right - ? ComputeEdgeWidth(nine_piece_image.BorderSlices().Right(), - border_widths.Right(), right_.slice, - border_image_area.Width()) - : 0; - bottom_.width = - sides_to_include.bottom - ? ComputeEdgeWidth(nine_piece_image.BorderSlices().Bottom(), - border_widths.Bottom(), bottom_.slice, + + // |Edge::slice| is in image-local units (physical pixels for raster images), + // but when using it to resolve 'auto' for border-image-widths we want it to + // be in zoomed CSS pixels, so divide by |slice_scale| and multiply by zoom. + const FloatSize auto_slice_adjustment(zoom / slice_scale.Width(), + zoom / slice_scale.Height()); + const BorderImageLengthBox& border_slices = nine_piece_image.BorderSlices(); + top_.width = + sides_to_include.top + ? ComputeEdgeWidth(border_slices.Top(), border_widths.Top(), + top_.slice * auto_slice_adjustment.Height(), border_image_area.Height()) : 0; - left_.width = sides_to_include.left - ? ComputeEdgeWidth(nine_piece_image.BorderSlices().Left(), - border_widths.Left(), left_.slice, - border_image_area.Width()) - : 0; + right_.width = + sides_to_include.right + ? ComputeEdgeWidth(border_slices.Right(), border_widths.Right(), + right_.slice * auto_slice_adjustment.Width(), + border_image_area.Width()) + : 0; + bottom_.width = + sides_to_include.bottom + ? ComputeEdgeWidth(border_slices.Bottom(), border_widths.Bottom(), + bottom_.slice * auto_slice_adjustment.Height(), + border_image_area.Height()) + : 0; + left_.width = + sides_to_include.left + ? ComputeEdgeWidth(border_slices.Left(), border_widths.Left(), + left_.slice * auto_slice_adjustment.Width(), + border_image_area.Width()) + : 0; // The spec says: Given Lwidth as the width of the border image area, Lheight // as its height, and Wside as the border image width offset for the side, let @@ -307,10 +332,7 @@ } NinePieceImageGrid::NinePieceDrawInfo NinePieceImageGrid::GetNinePieceDrawInfo( - NinePiece piece, - float image_scale_factor) const { - DCHECK_NE(image_scale_factor, 0); - + NinePiece piece) const { NinePieceDrawInfo draw_info; draw_info.is_corner_piece = piece == kTopLeftPiece || piece == kTopRightPiece || @@ -323,15 +345,6 @@ else SetDrawInfoMiddle(draw_info); - if (image_scale_factor != 1) { - // The nine piece grid is computed in unscaled image coordinates but must be - // drawn using scaled image coordinates. - draw_info.source.Scale(image_scale_factor); - - // Compensate for source scaling by scaling down the individual tiles. - draw_info.tile_scale.Scale(1 / image_scale_factor); - } - return draw_info; }
diff --git a/third_party/blink/renderer/core/paint/nine_piece_image_grid.h b/third_party/blink/renderer/core/paint/nine_piece_image_grid.h index 3688b175d..7c919fd 100644 --- a/third_party/blink/renderer/core/paint/nine_piece_image_grid.h +++ b/third_party/blink/renderer/core/paint/nine_piece_image_grid.h
@@ -64,6 +64,8 @@ public: NinePieceImageGrid(const NinePieceImage&, IntSize image_size, + const FloatSize& slice_scale, + float zoom, IntRect border_image_area, const IntRectOutsets& border_widths, PhysicalBoxSides sides_to_include = PhysicalBoxSides()); @@ -85,7 +87,7 @@ ENinePieceImageRule vertical; } tile_rule; }; - NinePieceDrawInfo GetNinePieceDrawInfo(NinePiece, float) const; + NinePieceDrawInfo GetNinePieceDrawInfo(NinePiece) const; struct Edge { DISALLOW_NEW();
diff --git a/third_party/blink/renderer/core/paint/nine_piece_image_grid_test.cc b/third_party/blink/renderer/core/paint/nine_piece_image_grid_test.cc index b1af14b..1415cf6 100644 --- a/third_party/blink/renderer/core/paint/nine_piece_image_grid_test.cc +++ b/third_party/blink/renderer/core/paint/nine_piece_image_grid_test.cc
@@ -34,11 +34,12 @@ IntRect border_image_area(0, 0, 100, 100); IntRectOutsets border_widths(0, 0, 0, 0); - NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, image_size, border_image_area, border_widths); + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); EXPECT_FALSE(draw_info.is_drawable); } } @@ -53,11 +54,12 @@ IntRect border_image_area(0, 0, 100, 100); IntRectOutsets border_widths(10, 10, 10, 10); - NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, image_size, border_image_area, border_widths); + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); EXPECT_TRUE(draw_info.is_drawable); } } @@ -72,11 +74,12 @@ IntRect border_image_area(0, 0, 100, 100); IntRectOutsets border_widths(10, 10, 10, 10); - NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, image_size, border_image_area, border_widths); + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); if (piece != kMiddlePiece) EXPECT_TRUE(draw_info.is_drawable); else @@ -103,11 +106,12 @@ }; for (const auto& test_case : test_cases) { - NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, image_size, border_image_area, test_case.border_widths); + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, test_case.border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); if (piece == kTopLeftPiece) EXPECT_EQ(draw_info.is_drawable, test_case.expected_is_drawable); } @@ -127,11 +131,12 @@ // down and corner pieces cover the entire border image area. nine_piece.SetBorderSlices(BorderImageLengthBox(6)); - NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, image_size, border_image_area, border_widths); + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); if (draw_info.is_corner_piece) EXPECT_EQ(draw_info.destination.Size(), FloatSize(50, 50)); else @@ -144,16 +149,16 @@ BorderImageLength bottom_right(20); nine_piece.SetBorderSlices( BorderImageLengthBox(top_left, bottom_right, bottom_right, top_left)); - grid = NinePieceImageGrid(nine_piece, image_size, border_image_area, - border_widths); + grid = NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(kTopLeftPiece, 1); + grid.GetNinePieceDrawInfo(kTopLeftPiece); EXPECT_EQ(draw_info.destination.Size(), FloatSize(33, 33)); - draw_info = grid.GetNinePieceDrawInfo(kTopRightPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kTopRightPiece); EXPECT_EQ(draw_info.destination.Size(), FloatSize(67, 33)); - draw_info = grid.GetNinePieceDrawInfo(kBottomLeftPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kBottomLeftPiece); EXPECT_EQ(draw_info.destination.Size(), FloatSize(33, 67)); - draw_info = grid.GetNinePieceDrawInfo(kBottomRightPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kBottomRightPiece); EXPECT_EQ(draw_info.destination.Size(), FloatSize(67, 67)); // Set border slices that overlap in one dimension but not in the other, and @@ -163,18 +168,18 @@ BorderImageLength left_right(Length::Fixed(11)); nine_piece.SetBorderSlices( BorderImageLengthBox(top_bottom, left_right, top_bottom, left_right)); - grid = NinePieceImageGrid(nine_piece, image_size, border_image_area, - border_widths); + grid = NinePieceImageGrid(nine_piece, image_size, FloatSize(1, 1), 1, + border_image_area, border_widths); NinePieceImageGrid::NinePieceDrawInfo tl_info = - grid.GetNinePieceDrawInfo(kTopLeftPiece, 1); + grid.GetNinePieceDrawInfo(kTopLeftPiece); EXPECT_EQ(tl_info.destination.Size(), FloatSize(6, 50)); // The top-right, bottom-left and bottom-right pieces are the same size as // the top-left piece. - draw_info = grid.GetNinePieceDrawInfo(kTopRightPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kTopRightPiece); EXPECT_EQ(tl_info.destination.Size(), draw_info.destination.Size()); - draw_info = grid.GetNinePieceDrawInfo(kBottomLeftPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kBottomLeftPiece); EXPECT_EQ(tl_info.destination.Size(), draw_info.destination.Size()); - draw_info = grid.GetNinePieceDrawInfo(kBottomRightPiece, 1); + draw_info = grid.GetNinePieceDrawInfo(kBottomRightPiece); EXPECT_EQ(tl_info.destination.Size(), draw_info.destination.Size()); } @@ -356,11 +361,11 @@ nine_piece.SetVerticalRule((ENinePieceImageRule)test_case.vertical_rule); NinePieceImageGrid grid = NinePieceImageGrid( - nine_piece, test_case.image_size, test_case.border_image_area, - test_case.border_widths); + nine_piece, test_case.image_size, FloatSize(1, 1), 1, + test_case.border_image_area, test_case.border_widths); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { NinePieceImageGrid::NinePieceDrawInfo draw_info = - grid.GetNinePieceDrawInfo(piece, 1); + grid.GetNinePieceDrawInfo(piece); EXPECT_EQ(test_case.pieces[piece].is_drawable, draw_info.is_drawable); if (!test_case.pieces[piece].is_drawable) continue; @@ -395,5 +400,70 @@ } } +TEST_F(NinePieceImageGridTest, NinePieceImagePainting_Zoomed) { + NinePieceImage nine_piece; + nine_piece.SetImage(GeneratedImage()); + // Image slices are specified in CSS pixels. + nine_piece.SetImageSlices(LengthBox(10, 10, 10, 10)); + nine_piece.SetFill(true); + + IntSize image_size(50, 50); + IntRect border_image_area(0, 0, 200, 200); + IntRectOutsets border_widths(20, 20, 20, 20); + + NinePieceImageGrid grid = + NinePieceImageGrid(nine_piece, image_size, FloatSize(2, 2), 2, + border_image_area, border_widths); + struct { + bool is_drawable; + bool is_corner_piece; + FloatRect destination; + FloatRect source; + float tile_scale_horizontal; + float tile_scale_vertical; + ENinePieceImageRule horizontal_rule; + ENinePieceImageRule vertical_rule; + } expected_pieces[kMaxPiece] = { + {true, true, FloatRect(0, 0, 20, 20), FloatRect(0, 0, 20, 20), 0, 0, + kStretchImageRule, kStretchImageRule}, + {true, true, FloatRect(0, 180, 20, 20), FloatRect(0, 30, 20, 20), 0, 0, + kStretchImageRule, kStretchImageRule}, + {true, false, FloatRect(0, 20, 20, 160), FloatRect(0, 20, 20, 10), 1, 1, + kStretchImageRule, kStretchImageRule}, + {true, true, FloatRect(180, 0, 20, 20), FloatRect(30, 0, 20, 20), 0, 0, + kStretchImageRule, kStretchImageRule}, + {true, true, FloatRect(180, 180, 20, 20), FloatRect(30, 30, 20, 20), 0, 0, + kStretchImageRule, kStretchImageRule}, + {true, false, FloatRect(180, 20, 20, 160), FloatRect(30, 20, 20, 10), 1, + 1, kStretchImageRule, kStretchImageRule}, + {true, false, FloatRect(20, 0, 160, 20), FloatRect(20, 0, 10, 20), 1, 1, + kStretchImageRule, kStretchImageRule}, + {true, false, FloatRect(20, 180, 160, 20), FloatRect(20, 30, 10, 20), 1, + 1, kStretchImageRule, kStretchImageRule}, + {true, false, FloatRect(20, 20, 160, 160), FloatRect(20, 20, 10, 10), 16, + 16, kStretchImageRule, kStretchImageRule}, + }; + + for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { + NinePieceImageGrid::NinePieceDrawInfo draw_info = + grid.GetNinePieceDrawInfo(piece); + EXPECT_TRUE(draw_info.is_drawable); + + const auto& expected = expected_pieces[piece]; + EXPECT_EQ(draw_info.destination, expected.destination); + EXPECT_EQ(draw_info.source, expected.source); + + if (expected.is_corner_piece) + continue; + + EXPECT_FLOAT_EQ(draw_info.tile_scale.Width(), + expected.tile_scale_horizontal); + EXPECT_FLOAT_EQ(draw_info.tile_scale.Height(), + expected.tile_scale_vertical); + EXPECT_EQ(draw_info.tile_rule.vertical, expected.vertical_rule); + EXPECT_EQ(draw_info.tile_rule.horizontal, expected.horizontal_rule); + } +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/nine_piece_image_painter.cc b/third_party/blink/renderer/core/paint/nine_piece_image_painter.cc index 8be7a975..e2754908 100644 --- a/third_party/blink/renderer/core/paint/nine_piece_image_painter.cc +++ b/third_party/blink/renderer/core/paint/nine_piece_image_painter.cc
@@ -80,18 +80,35 @@ const ComputedStyle& style, const NinePieceImage& nine_piece_image, Image* image, - IntSize image_size, + const FloatSize& unzoomed_image_size, PhysicalBoxSides sides_to_include) { + // |image_size| is in the image's native resolution and |slice_scale| defines + // the effective size of a CSS pixel in the image. + FloatSize image_size = image->SizeAsFloat(kRespectImageOrientation); + // Compute the scale factor to apply to the slice values by relating the + // zoomed size to the "unzoomed" (CSS pixel) size. For raster images this + // should match any DPR scale while for generated images it should match the + // effective zoom. (Modulo imprecisions introduced by the computation.) This + // scale should in theory be uniform. + FloatSize slice_scale(image_size.Width() / unzoomed_image_size.Width(), + image_size.Height() / unzoomed_image_size.Height()); + + // TODO(fs): Use FloatSize here to avoid additional rounding (leave that to + // NinePieceImageGrid if needed). For narrow slices the rounding can introduce + // large errors (fairly visible in the TC in crbug.com/596075 when zooming). + IntSize rounded_image_size = RoundedIntSize(image_size); IntRectOutsets border_widths(style.BorderTopWidth(), style.BorderRightWidth(), style.BorderBottomWidth(), style.BorderLeftWidth()); - NinePieceImageGrid grid(nine_piece_image, image_size, - PixelSnappedIntRect(border_image_rect), border_widths, - sides_to_include); + NinePieceImageGrid grid( + nine_piece_image, rounded_image_size, slice_scale, style.EffectiveZoom(), + PixelSnappedIntRect(border_image_rect), border_widths, sides_to_include); + ScopedInterpolationQuality interpolation_quality_scope( + context, style.GetInterpolationQuality()); for (NinePiece piece = kMinPiece; piece < kMaxPiece; ++piece) { - NinePieceImageGrid::NinePieceDrawInfo draw_info = grid.GetNinePieceDrawInfo( - piece, nine_piece_image.GetImage()->ImageScaleFactor()); + NinePieceImageGrid::NinePieceDrawInfo draw_info = + grid.GetNinePieceDrawInfo(piece); if (draw_info.is_drawable) { if (draw_info.is_corner_piece) { @@ -125,10 +142,11 @@ FloatSize tile_spacing(h_tile->spacing, v_tile->spacing); // TODO(cavalcantii): see crbug.com/662507. - base::Optional<ScopedInterpolationQuality> interpolation_quality_scope; + base::Optional<ScopedInterpolationQuality> + interpolation_quality_override; if (draw_info.tile_rule.horizontal == kRoundImageRule || draw_info.tile_rule.vertical == kRoundImageRule) - interpolation_quality_scope.emplace(context, kInterpolationMedium); + interpolation_quality_override.emplace(context, kInterpolationMedium); context.DrawImageTiled(image, draw_info.destination, draw_info.source, tile_scale_factor, tile_phase, tile_spacing); @@ -165,35 +183,33 @@ rect_with_outsets.Expand(style.ImageOutsets(nine_piece_image)); PhysicalRect border_image_rect = rect_with_outsets; - // NinePieceImage returns the image slices without effective zoom applied and - // thus we compute the nine piece grid on top of the image in unzoomed - // coordinates. - // - // FIXME: The default object size passed to imageSize() should be scaled by - // the zoom factor passed in. In this case it means that borderImageRect - // should be passed in compensated by effective zoom, since the scale factor - // is one. For generated images, the actual image data (gradient stops, etc.) - // are scaled to effective zoom instead so we must take care not to cause - // scale of them again. - IntSize image_size = RoundedIntSize( - style_image->ImageSize(document, 1, FloatSize(border_image_rect.size), - kRespectImageOrientation)); + // Resolve the image size for any image that may need it (for example + // generated or SVG), then get an image using that size. This will yield an + // image with either "native" size (raster images) or size scaled by effective + // zoom. + const FloatSize default_object_size(border_image_rect.size); + FloatSize image_size = + style_image->ImageSize(document, style.EffectiveZoom(), + default_object_size, kRespectImageOrientation); scoped_refptr<Image> image = - style_image->GetImage(observer, document, style, FloatSize(image_size)); + style_image->GetImage(observer, document, style, image_size); if (!image) return true; + // Resolve the image size again, this time with a size-multiplier of one, to + // yield the size in CSS pixels. This is the unit/scale we expect the + // 'border-image-slice' values to be in. + FloatSize unzoomed_image_size = style_image->ImageSize( + document, 1, default_object_size.ScaledBy(1 / style.EffectiveZoom()), + kRespectImageOrientation); + TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", "data", inspector_paint_image_event::Data(node, *style_image, FloatRect(image->Rect()), FloatRect(border_image_rect))); - - ScopedInterpolationQuality interpolation_quality_scope( - graphics_context, style.GetInterpolationQuality()); PaintPieces(graphics_context, border_image_rect, style, nine_piece_image, - image.get(), image_size, sides_to_include); - + image.get(), unzoomed_image_size, sides_to_include); return true; }
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area_test.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area_test.cc index 765d35db..7bae9b8e 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area_test.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area_test.cc
@@ -34,7 +34,7 @@ } }; -HeapVector<Member<ScrollTimelineOffset>>* CreateScrollOffsets( +HeapVector<Member<ScrollTimelineOffset>> CreateScrollOffsets( ScrollTimelineOffset* start_scroll_offset = MakeGarbageCollected<ScrollTimelineOffset>( CSSNumericLiteralValue::Create( @@ -45,10 +45,9 @@ CSSNumericLiteralValue::Create( 90.0, CSSPrimitiveValue::UnitType::kPixels))) { - HeapVector<Member<ScrollTimelineOffset>>* scroll_offsets = - MakeGarbageCollected<HeapVector<Member<ScrollTimelineOffset>>>(); - scroll_offsets->push_back(start_scroll_offset); - scroll_offsets->push_back(end_scroll_offset); + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets; + scroll_offsets.push_back(start_scroll_offset); + scroll_offsets.push_back(end_scroll_offset); return scroll_offsets; } @@ -1590,12 +1589,12 @@ public: ScrollTimelineForTest(Document* document, Element* scroll_source, - HeapVector<Member<ScrollTimelineOffset>>* + HeapVector<Member<ScrollTimelineOffset>> scroll_offsets = CreateScrollOffsets()) : ScrollTimeline(document, scroll_source, ScrollTimeline::Vertical, - scroll_offsets, + std::move(scroll_offsets), 100.0), invalidated_(false) {} void Invalidate() override {
diff --git a/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc index ada3cae..de31c75 100644 --- a/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc +++ b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
@@ -139,63 +139,11 @@ ElementsAre(console_message, console_message, console_message)); } -// Verify that a timer with timeout=0 is not throttled until its timeout is -// rounded up to 4ms. -TEST_F(BackgroundPageThrottlingTest, - ZeroTimeoutTimersThrottledInBackgroundPage) { - SimRequest main_resource("https://example.com/", "text/html"); - - LoadURL("https://example.com/"); - - const String console_message = BuildTimerConsoleMessage(); - main_resource.Complete( - String::Format("(<script>" - " function f(repetitions) {" - " if (repetitions == 0) return;" - " console.log('%s');" - " setTimeout(f, 0, repetitions - 1);" - " }" - " setTimeout(f, 0, 50);" - "</script>)", - console_message.Utf8().c_str())); - - GetDocument().GetPage()->GetPageScheduler()->SetPageVisible(false); - - // Initially, timeout is rounded up to 1ms and no throttling is applied - // (https://crbug.com/402694). After 4 executions, timeout is rounded up to - // 4ms and throttling is applied. - constexpr base::TimeDelta k10Ms = base::TimeDelta::FromMilliseconds(10); - platform_->RunForPeriod(k10Ms); - EXPECT_THAT(FilteredConsoleMessages(), - ElementsAre(console_message, console_message, console_message, - console_message)); - platform_->RunForPeriod(base::TimeDelta::FromSeconds(1) - k10Ms); - EXPECT_THAT(FilteredConsoleMessages(), - ElementsAre(console_message, console_message, console_message, - console_message, console_message)); -} - -namespace { - -class OptOutZeroTimeoutFromThrottlingTest : public ThrottlingTestBase { - public: - OptOutZeroTimeoutFromThrottlingTest() { - scoped_feature_list_.InitAndEnableFeature( - features::kOptOutZeroTimeoutTimersFromThrottling); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -} // namespace - -// Verify that in a hidden page, when the kOptOutZeroTimeoutTimersFromThrottling -// feature is enabled: +// Verify the execution time of non-nested timers on a hidden page. // - setTimeout(..., 0) and setTimeout(..., -1) schedule their callback after // 1ms. The 1 ms delay exists for historical reasons crbug.com/402694. // - setTimeout(..., 5) schedules its callback at the next aligned time -TEST_F(OptOutZeroTimeoutFromThrottlingTest, WithoutNesting) { +TEST_F(BackgroundPageThrottlingTest, WithoutNesting) { SimRequest main_resource("https://example.com/", "text/html"); LoadURL("https://example.com/"); @@ -228,10 +176,9 @@ timeout_5_message)); } -// Verify that in a hidden page, when the kOptOutZeroTimeoutTimersFromThrottling -// feature is enabled, a timer created with setTimeout(..., 0) is throttled -// after 5 nesting levels. -TEST_F(OptOutZeroTimeoutFromThrottlingTest, SetTimeoutNesting) { +// Verify that on a hidden page, a timer created with setTimeout(..., 0) is +// throttled after 5 nesting levels. +TEST_F(BackgroundPageThrottlingTest, NestedSetTimeoutZero) { SimRequest main_resource("https://example.com/", "text/html"); LoadURL("https://example.com/"); @@ -262,10 +209,9 @@ EXPECT_THAT(FilteredConsoleMessages(), Vector<String>(5, console_message)); } -// Verify that in a hidden page, when the kOptOutZeroTimeoutTimersFromThrottling -// feature is enabled, a timer created with setInterval(..., 0) is throttled -// after 5 nesting levels. -TEST_F(OptOutZeroTimeoutFromThrottlingTest, SetIntervalNesting) { +// Verify that in a hidden page, a timer created with setInterval(..., 0) is +// throttled after 5 nesting levels. +TEST_F(BackgroundPageThrottlingTest, NestedSetIntervalZero) { SimRequest main_resource("https://example.com/", "text/html"); LoadURL("https://example.com/");
diff --git a/third_party/blink/renderer/core/script/import_map.cc b/third_party/blink/renderer/core/script/import_map.cc index 7149f83..45f8939 100644 --- a/third_party/blink/renderer/core/script/import_map.cc +++ b/third_party/blink/renderer/core/script/import_map.cc
@@ -431,6 +431,15 @@ return ResolveImportsMatchInternal(key, exact, debug_message); } + // <spec step="1.2">... either asURL is null, or asURL is special</spec> + if (parsed_specifier.GetType() == ParsedSpecifier::Type::kURL && + !SchemeRegistry::IsSpecialScheme(parsed_specifier.GetUrl().Protocol())) { + *debug_message = "Import Map: \"" + key + + "\" skips prefix match because of non-special URL scheme"; + + return base::nullopt; + } + // Step 1.2. if (auto prefix_match = MatchPrefix(parsed_specifier, specifier_map)) { return ResolveImportsMatchInternal(key, *prefix_match, debug_message);
diff --git a/third_party/blink/renderer/core/script/js_module_script.cc b/third_party/blink/renderer/core/script/js_module_script.cc index 0e40595..d4d38ad 100644 --- a/third_party/blink/renderer/core/script/js_module_script.cc +++ b/third_party/blink/renderer/core/script/js_module_script.cc
@@ -5,8 +5,12 @@ #include "third_party/blink/renderer/core/script/js_module_script.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" +#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h" +#include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/module_record_resolver.h" +#include "third_party/blink/renderer/platform/bindings/parkable_string.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" +#include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "v8/include/v8.h" namespace blink { @@ -14,19 +18,16 @@ // <specdef // href="https://html.spec.whatwg.org/C/#creating-a-javascript-module-script"> JSModuleScript* JSModuleScript::Create( - const ParkableString& original_source_text, - SingleCachedMetadataHandler* cache_handler, + const ModuleScriptCreationParams& params, + const KURL& base_url, ScriptSourceLocationType source_location_type, Modulator* modulator, - const KURL& source_url, - const KURL& base_url, const ScriptFetchOptions& options, const TextPosition& start_position) { // <spec step="1">If scripting is disabled for settings's responsible browsing // context, then set source to the empty string.</spec> - ParkableString source_text; - if (!modulator->IsScriptingDisabled()) - source_text = original_source_text; + if (modulator->IsScriptingDisabled()) + params.ClearSourceText(); // <spec step="2">Let script be a new module script that this algorithm will // subsequently initialize.</spec> @@ -45,10 +46,10 @@ ModuleRecordProduceCacheData* produce_cache_data = nullptr; - v8::Local<v8::Module> result = ModuleRecord::Compile( - isolate, source_text.ToString(), source_url, base_url, options, - start_position, exception_state, modulator->GetV8CacheOptions(), - cache_handler, source_location_type, &produce_cache_data); + v8::Local<v8::Module> result = + ModuleRecord::Compile(isolate, params, base_url, options, start_position, + exception_state, modulator->GetV8CacheOptions(), + source_location_type, &produce_cache_data); // CreateInternal processes Steps 4 and 8-10. // @@ -56,9 +57,9 @@ // Steps 8-13 before Step 6. In a case that compile failed, we will // immediately turn the script into errored state. Thus the members will not // be used for the speced algorithms, but may be used from inspector. - JSModuleScript* script = - CreateInternal(source_text.length(), modulator, result, source_url, - base_url, options, start_position, produce_cache_data); + JSModuleScript* script = CreateInternal( + params.GetSourceText().length(), modulator, result, params.SourceURL(), + base_url, options, start_position, produce_cache_data); // <spec step="8">If result is a list of errors, then:</spec> if (exception_state.HadException()) {
diff --git a/third_party/blink/renderer/core/script/js_module_script.h b/third_party/blink/renderer/core/script/js_module_script.h index 3309db5..93996d34 100644 --- a/third_party/blink/renderer/core/script/js_module_script.h +++ b/third_party/blink/renderer/core/script/js_module_script.h
@@ -5,20 +5,19 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_JS_MODULE_SCRIPT_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_JS_MODULE_SCRIPT_H_ -#include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/module_script.h" #include "third_party/blink/renderer/platform/bindings/name_client.h" #include "third_party/blink/renderer/platform/bindings/parkable_string.h" #include "third_party/blink/renderer/platform/heap/handle.h" -#include "third_party/blink/renderer/platform/weborigin/kurl.h" -#include "third_party/blink/renderer/platform/weborigin/kurl_hash.h" -#include "third_party/blink/renderer/platform/wtf/hash_map.h" #include "third_party/blink/renderer/platform/wtf/text/text_position.h" namespace blink { +class KURL; +class Modulator; +class ModuleScriptCreationParams; + // JSModuleScript is a model object for the "JavaScript module script" spec // concept. https://html.spec.whatwg.org/C/#javascript-module-script class CORE_EXPORT JSModuleScript final : public ModuleScript, @@ -26,12 +25,10 @@ public: // https://html.spec.whatwg.org/C/#creating-a-javascript-module-script static JSModuleScript* Create( - const ParkableString& source_text, - SingleCachedMetadataHandler*, + const ModuleScriptCreationParams& params, + const KURL& base_url, ScriptSourceLocationType, Modulator*, - const KURL& source_url, - const KURL& base_url, const ScriptFetchOptions&, const TextPosition& start_position = TextPosition::MinimumPosition());
diff --git a/third_party/blink/renderer/core/script/module_map_test.cc b/third_party/blink/renderer/core/script/module_map_test.cc index 0910447..146bf8bd 100644 --- a/third_party/blink/renderer/core/script/module_map_test.cc +++ b/third_party/blink/renderer/core/script/module_map_test.cc
@@ -114,6 +114,7 @@ ResourceFetcher*, ModuleGraphLevel, ModuleScriptFetcher::Client* client) override { + CHECK_EQ(request.GetScriptType(), mojom::blink::ScriptType::kModule); TestRequest* test_request = MakeGarbageCollected<TestRequest>( ModuleScriptCreationParams( request.Url(),
diff --git a/third_party/blink/renderer/core/script/module_script.cc b/third_party/blink/renderer/core/script/module_script.cc index a1a2771..53848c4 100644 --- a/third_party/blink/renderer/core/script/module_script.cc +++ b/third_party/blink/renderer/core/script/module_script.cc
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/renderer/bindings/core/v8/module_record.h" +#include "third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/script/module_script_test.cc b/third_party/blink/renderer/core/script/module_script_test.cc index 09f6f34..8f5db341 100644 --- a/third_party/blink/renderer/core/script/module_script_test.cc +++ b/third_party/blink/renderer/core/script/module_script_test.cc
@@ -11,6 +11,7 @@ #include "third_party/blink/renderer/bindings/core/v8/script_source_code.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" +#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h" #include "third_party/blink/renderer/core/script/classic_script.h" #include "third_party/blink/renderer/core/script/js_module_script.h" #include "third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.h" @@ -80,11 +81,14 @@ Modulator* modulator, const String& source_text, SingleCachedMetadataHandler* cache_handler) { - return JSModuleScript::Create( + ModuleScriptCreationParams params( + KURL("https://fox.url/script.js"), + ModuleScriptCreationParams::ModuleType::kJavaScriptModule, ParkableString(source_text.IsolatedCopy().ReleaseImpl()), cache_handler, - ScriptSourceLocationType::kExternalFile, modulator, - KURL("https://fox.url/script.js"), KURL("https://fox.url/"), - ScriptFetchOptions()); + network::mojom::CredentialsMode::kOmit); + return JSModuleScript::Create(params, KURL("https://fox.url/"), + ScriptSourceLocationType::kExternalFile, + modulator, ScriptFetchOptions()); } static ValueWrapperSyntheticModuleScript*
diff --git a/third_party/blink/renderer/core/script/script_loader.cc b/third_party/blink/renderer/core/script/script_loader.cc index 63ca095..ac1dbd6f 100644 --- a/third_party/blink/renderer/core/script/script_loader.cc +++ b/third_party/blink/renderer/core/script/script_loader.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/script/script_loader.h" #include "base/feature_list.h" +#include "services/network/public/mojom/fetch_api.mojom-shared.h" #include "third_party/blink/public/common/feature_policy/feature_policy.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom-blink.h" @@ -44,6 +45,7 @@ #include "third_party/blink/renderer/core/html_names.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/loader/importance_attribute.h" +#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h" #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetch_request.h" #include "third_party/blink/renderer/core/loader/subresource_integrity_helper.h" #include "third_party/blink/renderer/core/script/classic_pending_script.h" @@ -706,10 +708,15 @@ // <spec label="fetch-an-inline-module-script-graph" step="1">Let script // be the result of creating a JavaScript module script using source // text, settings object, base URL, and options.</spec> - ModuleScript* module_script = - JSModuleScript::Create(ParkableString(source_text.Impl()), nullptr, - ScriptSourceLocationType::kInline, modulator, - source_url, base_url, options, position); + + ModuleScriptCreationParams params( + source_url, + ModuleScriptCreationParams::ModuleType::kJavaScriptModule, + ParkableString(source_text.Impl()), nullptr, + options.CredentialsMode()); + ModuleScript* module_script = JSModuleScript::Create( + params, base_url, ScriptSourceLocationType::kInline, modulator, + options, position); // <spec label="fetch-an-inline-module-script-graph" step="2">If script // is null, asynchronously complete this algorithm with null, and abort
diff --git a/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc b/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc index 23d74aa..874b6cf6 100644 --- a/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc +++ b/third_party/blink/renderer/core/script/value_wrapper_synthetic_module_script.cc
@@ -39,8 +39,8 @@ v8::Local<v8::Value> error = V8ThrowException::CreateTypeError( isolate, "Cannot create CSS Module in non-document context"); return ValueWrapperSyntheticModuleScript::CreateWithError( - v8::Local<v8::Value>(), settings_object, params->GetResponseUrl(), - KURL(), ScriptFetchOptions(), error); + v8::Local<v8::Value>(), settings_object, params->SourceURL(), KURL(), + ScriptFetchOptions(), error); } CSSStyleSheetInit* init = CSSStyleSheetInit::Create(); CSSStyleSheet* style_sheet = @@ -49,20 +49,20 @@ v8::Local<v8::Value> error = exception_state.GetException(); exception_state.ClearException(); return ValueWrapperSyntheticModuleScript::CreateWithError( - v8::Local<v8::Value>(), settings_object, params->GetResponseUrl(), - KURL(), ScriptFetchOptions(), error); + v8::Local<v8::Value>(), settings_object, params->SourceURL(), KURL(), + ScriptFetchOptions(), error); } style_sheet->replaceSync(params->GetSourceText().ToString(), exception_state); if (exception_state.HadException()) { v8::Local<v8::Value> error = exception_state.GetException(); exception_state.ClearException(); return ValueWrapperSyntheticModuleScript::CreateWithError( - v8::Local<v8::Value>(), settings_object, params->GetResponseUrl(), - KURL(), ScriptFetchOptions(), error); + v8::Local<v8::Value>(), settings_object, params->SourceURL(), KURL(), + ScriptFetchOptions(), error); } v8::Local<v8::Value> v8_value_stylesheet = ToV8(style_sheet, script_state); return ValueWrapperSyntheticModuleScript::CreateWithDefaultExport( - v8_value_stylesheet, settings_object, params->GetResponseUrl(), KURL(), + v8_value_stylesheet, settings_object, params->SourceURL(), KURL(), ScriptFetchOptions()); } @@ -77,7 +77,7 @@ v8::Isolate* isolate = context->GetIsolate(); v8::TryCatch try_catch(isolate); v8::Local<v8::String> original_json = - V8String(isolate, params->GetSourceText().ToString()); + V8String(isolate, params->GetSourceText()); v8::Local<v8::Value> parsed_json; ExceptionState exception_state(isolate, ExceptionState::kExecutionContext, "ModuleScriptLoader", @@ -101,11 +101,11 @@ v8::Local<v8::Value> error = exception_state.GetException(); exception_state.ClearException(); return ValueWrapperSyntheticModuleScript::CreateWithError( - parsed_json, settings_object, params->GetResponseUrl(), KURL(), + parsed_json, settings_object, params->SourceURL(), KURL(), ScriptFetchOptions(), error); } else { return ValueWrapperSyntheticModuleScript::CreateWithDefaultExport( - parsed_json, settings_object, params->GetResponseUrl(), KURL(), + parsed_json, settings_object, params->SourceURL(), KURL(), ScriptFetchOptions()); } }
diff --git a/third_party/blink/renderer/core/streams/readable_stream.h b/third_party/blink/renderer/core/streams/readable_stream.h index 0450d10..f64038c 100644 --- a/third_party/blink/renderer/core/streams/readable_stream.h +++ b/third_party/blink/renderer/core/streams/readable_stream.h
@@ -67,25 +67,23 @@ Member<AbortSignal> signal_; }; - // Create* functions create an appropriate subclass depending on which - // implementation is selected by blink features. + enum State : uint8_t { kReadable, kClosed, kErrored }; + + // Zero-argument form of the constructor called from JavaScript. static ReadableStream* Create(ScriptState*, ExceptionState&); + + // One-argument constructor called from JavaScript. static ReadableStream* Create(ScriptState*, ScriptValue underlying_source, ExceptionState&); - enum State : uint8_t { kReadable, kClosed, kErrored }; - // Implements ReadableStream::Create() when this implementation is enabled. + // Two-argument constructor called from JavaScript. static ReadableStream* Create(ScriptState* script_state, ScriptValue underlying_source, ScriptValue strategy, ExceptionState& exception_state); - // Implements ReadableStream::CreateWithCountQueueingStrategy() when this - // implementation is enabled. - // - // TODO(ricea): Replace this API with something more efficient when the old - // implementation is gone. + // Entry point to create a ReadableStream from other C++ APIs. static ReadableStream* CreateWithCountQueueingStrategy( ScriptState* script_state, UnderlyingSourceBase* underlying_source,
diff --git a/third_party/blink/renderer/core/testing/module_test_base.cc b/third_party/blink/renderer/core/testing/module_test_base.cc index eba166d..0d94895 100644 --- a/third_party/blink/renderer/core/testing/module_test_base.cc +++ b/third_party/blink/renderer/core/testing/module_test_base.cc
@@ -26,7 +26,11 @@ String source, const KURL& url, ExceptionState& exception_state) { - return ModuleRecord::Compile(isolate, source, url, url, ScriptFetchOptions(), + ModuleScriptCreationParams params( + url, ModuleScriptCreationParams::ModuleType::kJavaScriptModule, + ParkableString(source.Impl()), nullptr, + network::mojom::CredentialsMode::kOmit); + return ModuleRecord::Compile(isolate, params, url, ScriptFetchOptions(), TextPosition::MinimumPosition(), exception_state); }
diff --git a/third_party/blink/renderer/core/workers/worklet_module_responses_map_test.cc b/third_party/blink/renderer/core/workers/worklet_module_responses_map_test.cc index c2eefc1..731ba99 100644 --- a/third_party/blink/renderer/core/workers/worklet_module_responses_map_test.cc +++ b/third_party/blink/renderer/core/workers/worklet_module_responses_map_test.cc
@@ -77,6 +77,7 @@ mojom::blink::RequestContextType::SCRIPT); FetchParameters fetch_params = FetchParameters::CreateForTest(std::move(resource_request)); + fetch_params.SetModuleScript(); WorkletModuleScriptFetcher* module_fetcher = MakeGarbageCollected<WorkletModuleScriptFetcher>( map_.Get(), ModuleScriptLoader::CreatePassKeyForTests());
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index e54dd8ec..b80d736 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -1171,6 +1171,9 @@ if (!node || !node->isConnected()) return; + // Ignore attached nodes that are not elements, including text nodes and + // #shadow-root nodes. This matches previous implementations that worked, + // but it is not clear if that could potentially lead to missing content. Element* element = DynamicTo<Element>(node); if (!element) return; @@ -1195,6 +1198,12 @@ } MaybeNewRelationTarget(node, Get(node)); + + // Even if the node or parent are ignored, an ancestor may need to include + // descendants of the attached node, thus ChildrenChangedWithCleanLayout() + // must be called. It handles ignored logic, ensuring that the first ancestor + // that should have this as a child will be updated. + ChildrenChangedWithCleanLayout(LayoutTreeBuilderTraversal::Parent(*node)); } void AXObjectCacheImpl::DidInsertChildrenOfNode(Node* node) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index 118aceb..8b1fe88 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -119,9 +119,10 @@ void TextChangedWithCleanLayout(Node* optional_node, AXObject*); void FocusableChangedWithCleanLayout(Element* element); void DocumentTitleChanged() override; - // Called when a node has just been attached, so we can make sure we have the - // right subclass of AXObject. + // Called when a layout tree for a node has just been attached, so we can make + // sure we have the right subclass of AXObject. void UpdateCacheAfterNodeIsAttached(Node*) override; + // A DOM node was inserted , but does not necessarily have a layout tree. void DidInsertChildrenOfNode(Node*) override; void HandleAttributeChanged(const QualifiedName& attr_name,
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc index f84c352..dfaa6e08 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
@@ -272,8 +272,10 @@ clipboard_item_data_.ReserveInitialCapacity(format_names.size()); for (const String& format_name : format_names) { - clipboard_item_data_.emplace_back(format_name, - /* Placeholder value. */ nullptr); + if (ClipboardWriter::IsValidType(format_name, is_raw_)) { + clipboard_item_data_.emplace_back(format_name, + /* Placeholder value. */ nullptr); + } } ReadNextRepresentation(); }
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc b/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc index f0a1f98..e3b19b7 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" #include "third_party/blink/renderer/modules/clipboard/clipboard_promise.h" +#include "third_party/blink/renderer/modules/clipboard/clipboard_writer.h" #include "third_party/blink/renderer/platform/image-encoders/image_encoder.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" @@ -303,6 +304,7 @@ ClipboardReader* ClipboardReader::Create(SystemClipboard* system_clipboard, const String& mime_type, ClipboardPromise* promise) { + DCHECK(ClipboardWriter::IsValidType(mime_type, /*is_raw=*/false)); if (mime_type == kMimeTypeImagePng) return MakeGarbageCollected<ClipboardImageReader>(system_clipboard, promise); @@ -315,7 +317,9 @@ if (mime_type == kMimeTypeImageSvg && RuntimeEnabledFeatures::ClipboardSvgEnabled()) return MakeGarbageCollected<ClipboardSvgReader>(system_clipboard, promise); - // The MIME type is not supported. + + NOTREACHED() + << "IsValidType() and Create() have inconsistent implementations."; return nullptr; }
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_reader.h b/third_party/blink/renderer/modules/clipboard/clipboard_reader.h index 8ac8767..f66dcb1 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_reader.h +++ b/third_party/blink/renderer/modules/clipboard/clipboard_reader.h
@@ -40,7 +40,7 @@ // ClipboardReader::NextRead(). class ClipboardReader : public GarbageCollected<ClipboardReader> { public: - // Returns nullptr if there is no implementation for the given mime_type. + // ClipboardWriter::IsValidType() must return true for `mime_type`. static ClipboardReader* Create(SystemClipboard* system_clipboard, const String& mime_type, ClipboardPromise* promise);
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc index 23056c6..4791b155 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
@@ -251,6 +251,7 @@ ClipboardWriter* ClipboardWriter::Create(SystemClipboard* system_clipboard, const String& mime_type, ClipboardPromise* promise) { + DCHECK(ClipboardWriter::IsValidType(mime_type, /*is_raw=*/false)); if (mime_type == kMimeTypeImagePng) { return MakeGarbageCollected<ClipboardImageWriter>(system_clipboard, promise); @@ -265,7 +266,8 @@ RuntimeEnabledFeatures::ClipboardSvgEnabled()) return MakeGarbageCollected<ClipboardSvgWriter>(system_clipboard, promise); - NOTREACHED() << "Type " << mime_type << " was not implemented"; + NOTREACHED() + << "IsValidType() and Create() have inconsistent implementations."; return nullptr; } @@ -275,7 +277,7 @@ const String& mime_type, ClipboardPromise* promise) { DCHECK(base::FeatureList::IsEnabled(features::kRawClipboard)); - + DCHECK(ClipboardWriter::IsValidType(mime_type, /*is_raw=*/true)); return MakeGarbageCollected<ClipboardRawDataWriter>(raw_system_clipboard, promise, mime_type); } @@ -309,9 +311,12 @@ if (is_raw) return type.length() < mojom::blink::RawClipboardHost::kMaxFormatSize; + if (type == kMimeTypeImageSvg) + return RuntimeEnabledFeatures::ClipboardSvgEnabled(); + // TODO(https://crbug.com/1029857): Add support for other types. return type == kMimeTypeImagePng || type == kMimeTypeTextPlain || - type == kMimeTypeTextHTML || type == kMimeTypeImageSvg; + type == kMimeTypeTextHTML; } void ClipboardWriter::WriteToSystem(Blob* blob) {
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h index 3a03782..fc055df 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h +++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
@@ -55,10 +55,12 @@ public FileReaderLoaderClient { public: // For writing sanitized MIME types. + // IsValidType() must return true on types passed into `mime_type`. static ClipboardWriter* Create(SystemClipboard* system_clipboard, const String& mime_type, ClipboardPromise* promise); // For writing unsanitized types. + // IsValidType() must return true on types passed into `mime_type`. static ClipboardWriter* Create(RawSystemClipboard* raw_system_clipboard, const String& mime_type, ClipboardPromise* promise); @@ -66,8 +68,12 @@ // Returns whether ClipboardWriter has implemented support for this type. // - // If this API returns false for a `mime_type`, Create() must not be called - // with that `mime_type`. + // IsValidType() is expected to be called before Create(). If it returns false + // for a `mime_type`, Create() must not be called with that `mime_type`. + // + // IsValidType() is used for both ClipboardWriter and ClipboardReader, as read + // and write currently support the same types. If this changes in the future, + // please create separate IsValidType functions. static bool IsValidType(const String& mime_type, bool is_raw); // Begins the sequence of writing the Blob to the system clipbaord. void WriteToSystem(Blob* blob);
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc index ec8483ed..2727ac6 100644 --- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -684,10 +684,15 @@ // Similar to kTimeout, the promise is not rejected here. return; } else if (status == mojom::blink::SmsStatus::kBackendNotAvailable) { + // Records when the backend is not available AND the request gets cancelled. + // i.e. client specifies GmsBackend.VERIFICATION but it's unavailable. If + // client specifies GmsBackend.AUTO and the verification backend is not + // available, we fall back to the user consent backend and the request will + // be handled accordingly. e.g. if the user declined the prompt, we record + // it as |kUserCancelled|. + RecordSmsOutcome(WebOTPServiceOutcome::kBackendNotAvailable, source_id, + recorder); // Similar to kTimeout, the promise is not rejected here. - - // TODO(yigu): Add UMA to better understand this. - // http://crbug.com/1141024 return; } RecordSmsSuccessTime(base::TimeTicks::Now() - start_time, source_id,
diff --git a/third_party/blink/renderer/modules/payments/payments_validators.cc b/third_party/blink/renderer/modules/payments/payments_validators.cc index 9890e20..73227e5 100644 --- a/third_party/blink/renderer/modules/payments/payments_validators.cc +++ b/third_party/blink/renderer/modules/payments/payments_validators.cc
@@ -26,7 +26,9 @@ bool PaymentsValidators::IsValidCurrencyCodeFormat( const String& code, String* optional_error_message) { - if (ScriptRegexp("^[A-Z]{3}$", kTextCaseUnicodeInsensitive).Match(code) == 0) + auto* regexp = MakeGarbageCollected<ScriptRegexp>( + "^[A-Z]{3}$", kTextCaseUnicodeInsensitive); + if (regexp->Match(code) == 0) return true; if (optional_error_message) { @@ -41,8 +43,9 @@ bool PaymentsValidators::IsValidAmountFormat(const String& amount, const String& item_name, String* optional_error_message) { - if (ScriptRegexp("^-?[0-9]+(\\.[0-9]+)?$", kTextCaseSensitive) - .Match(amount) == 0) + auto* regexp = MakeGarbageCollected<ScriptRegexp>("^-?[0-9]+(\\.[0-9]+)?$", + kTextCaseSensitive); + if (regexp->Match(amount) == 0) return true; if (optional_error_message) { @@ -56,7 +59,9 @@ bool PaymentsValidators::IsValidCountryCodeFormat( const String& code, String* optional_error_message) { - if (ScriptRegexp("^[A-Z]{2}$", kTextCaseSensitive).Match(code) == 0) + auto* regexp = + MakeGarbageCollected<ScriptRegexp>("^[A-Z]{2}$", kTextCaseSensitive); + if (regexp->Match(code) == 0) return true; if (optional_error_message) @@ -147,9 +152,9 @@ if (!url.IsValid()) { // Syntax for a valid standardized PMI: // https://www.w3.org/TR/payment-method-id/#dfn-syntax-of-a-standardized-payment-method-identifier - return ScriptRegexp("^[a-z]+[0-9a-z]*(-[a-z]+[0-9a-z]*)*$", - kTextCaseSensitive) - .Match(identifier) == 0; + auto* regexp = MakeGarbageCollected<ScriptRegexp>( + "^[a-z]+[0-9a-z]*(-[a-z]+[0-9a-z]*)*$", kTextCaseSensitive); + return regexp->Match(identifier) == 0; } // URL PMI validation rules:
diff --git a/third_party/blink/renderer/modules/url_pattern/url_pattern.cc b/third_party/blink/renderer/modules/url_pattern/url_pattern.cc index 8e1804a5..1f12c27 100644 --- a/third_party/blink/renderer/modules/url_pattern/url_pattern.cc +++ b/third_party/blink/renderer/modules/url_pattern/url_pattern.cc
@@ -18,16 +18,20 @@ // A struct representing all the information needed to match a particular // component of a URL. -struct URLPattern::Component { +class URLPattern::Component final + : public GarbageCollected<URLPattern::Component> { + public: + void Trace(Visitor* visitor) const { visitor->Trace(regexp); } + // The pattern compiled down to a js regular expression. - std::unique_ptr<ScriptRegexp> regexp; + Member<ScriptRegexp> regexp; // The names to be applied to the regular expression capture groups. Note, // liburlpattern regular expressions do not use named capture groups directly. WTF::Vector<String> name_list; - Component(std::unique_ptr<ScriptRegexp> r, WTF::Vector<String> n) - : regexp(std::move(r)), name_list(std::move(n)) {} + Component(ScriptRegexp* r, WTF::Vector<String> n) + : regexp(r), name_list(std::move(n)) {} }; namespace { @@ -176,73 +180,71 @@ // be used for matching. Components that match any input may have a // nullptr Component struct pointer. - auto protocol_component = CompilePattern( + auto* protocol_component = CompilePattern( protocol, kDefaultPattern, "protocol", DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto username_component = CompilePattern( + auto* username_component = CompilePattern( username, kDefaultPattern, "username", DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto password_component = CompilePattern( + auto* password_component = CompilePattern( password, kDefaultPattern, "password", DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto hostname_component = + auto* hostname_component = CompilePattern(hostname, kDefaultPattern, "hostname", HostnameOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto port_component = CompilePattern(port, kDefaultPattern, "port", - DefaultOptions(), exception_state); + auto* port_component = CompilePattern(port, kDefaultPattern, "port", + DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto pathname_component = + auto* pathname_component = CompilePattern(pathname, kDefaultPathnamePattern, "pathname", PathnameOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto search_component = CompilePattern(search, kDefaultPattern, "search", - DefaultOptions(), exception_state); + auto* search_component = CompilePattern(search, kDefaultPattern, "search", + DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; - auto hash_component = CompilePattern(hash, kDefaultPattern, "hash", - DefaultOptions(), exception_state); + auto* hash_component = CompilePattern(hash, kDefaultPattern, "hash", + DefaultOptions(), exception_state); if (exception_state.HadException()) return nullptr; return MakeGarbageCollected<URLPattern>( - std::move(protocol_component), std::move(username_component), - std::move(password_component), std::move(hostname_component), - std::move(port_component), std::move(pathname_component), - std::move(search_component), std::move(hash_component), - base::PassKey<URLPattern>()); + protocol_component, username_component, password_component, + hostname_component, port_component, pathname_component, search_component, + hash_component, base::PassKey<URLPattern>()); } -URLPattern::URLPattern(std::unique_ptr<Component> protocol, - std::unique_ptr<Component> username, - std::unique_ptr<Component> password, - std::unique_ptr<Component> hostname, - std::unique_ptr<Component> port, - std::unique_ptr<Component> pathname, - std::unique_ptr<Component> search, - std::unique_ptr<Component> hash, +URLPattern::URLPattern(Component* protocol, + Component* username, + Component* password, + Component* hostname, + Component* port, + Component* pathname, + Component* search, + Component* hash, base::PassKey<URLPattern> key) - : protocol_(std::move(protocol)), - username_(std::move(username)), - password_(std::move(password)), - hostname_(std::move(hostname)), - port_(std::move(port)), - pathname_(std::move(pathname)), - search_(std::move(search)), - hash_(std::move(hash)) {} + : protocol_(protocol), + username_(username), + password_(password), + hostname_(hostname), + port_(port), + pathname_(pathname), + search_(search), + hash_(hash) {} bool URLPattern::test(const USVStringOrURLPatternInit& input, ExceptionState& exception_state) { @@ -336,8 +338,20 @@ return String(); } +void URLPattern::Trace(Visitor* visitor) const { + visitor->Trace(protocol_); + visitor->Trace(username_); + visitor->Trace(password_); + visitor->Trace(hostname_); + visitor->Trace(port_); + visitor->Trace(pathname_); + visitor->Trace(search_); + visitor->Trace(hash_); + ScriptWrappable::Trace(visitor); +} + // static -std::unique_ptr<URLPattern::Component> URLPattern::CompilePattern( +URLPattern::Component* URLPattern::CompilePattern( const String& pattern, const String& default_pattern, StringView component, @@ -368,7 +382,7 @@ auto case_sensitive = options.sensitive ? WTF::kTextCaseSensitive : WTF::kTextCaseASCIIInsensitive; DCHECK(base::IsStringASCII(regexp_string)); - auto regexp = std::make_unique<ScriptRegexp>( + ScriptRegexp* regexp = MakeGarbageCollected<ScriptRegexp>( String(regexp_string.data(), regexp_string.size()), case_sensitive); if (!regexp->IsValid()) { // TODO: Figure out which embedded regex expression caused the failure @@ -386,8 +400,8 @@ wtf_name_list.push_back(String(name.data(), name.size())); } - return std::make_unique<URLPattern::Component>(std::move(regexp), - std::move(wtf_name_list)); + return MakeGarbageCollected<URLPattern::Component>(std::move(regexp), + std::move(wtf_name_list)); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/url_pattern/url_pattern.h b/third_party/blink/renderer/modules/url_pattern/url_pattern.h index 1eb77e00..ad99862a 100644 --- a/third_party/blink/renderer/modules/url_pattern/url_pattern.h +++ b/third_party/blink/renderer/modules/url_pattern/url_pattern.h
@@ -21,20 +21,20 @@ class URLPattern : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); - struct Component; + class Component; public: static URLPattern* Create(const URLPatternInit* init, ExceptionState& exception_state); - URLPattern(std::unique_ptr<Component> protocol, - std::unique_ptr<Component> username, - std::unique_ptr<Component> password, - std::unique_ptr<Component> hostname, - std::unique_ptr<Component> port, - std::unique_ptr<Component> pathname, - std::unique_ptr<Component> search, - std::unique_ptr<Component> hash, + URLPattern(Component* protocol, + Component* username, + Component* password, + Component* hostname, + Component* port, + Component* pathname, + Component* search, + Component* hash, base::PassKey<URLPattern> key); bool test(const USVStringOrURLPatternInit& input, @@ -45,6 +45,8 @@ // TODO: define a stringifier + void Trace(Visitor* visitor) const override; + private: // A utility function that takes a given |pattern| and compiles it into a // Component structure. If the |pattern| matches the given |default_pattern| @@ -52,23 +54,22 @@ // the Component is not constructed and the nullptr value should be treated as // matching any input value for the component. The |component| string is used // for exception messages. The |options| control how the pattern is compiled. - static std::unique_ptr<Component> CompilePattern( - const String& pattern, - const String& default_pattern, - StringView component, - const liburlpattern::Options& options, - ExceptionState& exception_state); + static Component* CompilePattern(const String& pattern, + const String& default_pattern, + StringView component, + const liburlpattern::Options& options, + ExceptionState& exception_state); // The compiled patterns for each URL component. If a Component member is // nullptr then it should be treated as a wildcard matching any input. - std::unique_ptr<Component> protocol_; - std::unique_ptr<Component> username_; - std::unique_ptr<Component> password_; - std::unique_ptr<Component> hostname_; - std::unique_ptr<Component> port_; - std::unique_ptr<Component> pathname_; - std::unique_ptr<Component> search_; - std::unique_ptr<Component> hash_; + Member<Component> protocol_; + Member<Component> username_; + Member<Component> password_; + Member<Component> hostname_; + Member<Component> port_; + Member<Component> pathname_; + Member<Component> search_; + Member<Component> hash_; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc index fafc5eb..d3518d0 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -346,14 +346,8 @@ return true; size_available_ = decoder_ && decoder_->IsSizeAvailable(); - if (size_available_ && HasVisibleImageSize(Size())) { + if (size_available_ && HasVisibleImageSize(Size())) BitmapImageMetrics::CountDecodedImageType(decoder_->FilenameExtension()); - if (decoder_->FilenameExtension() == "jpg") { - IntSize correctedSize = decoder_->DensityCorrectedSizeAtIndex(0); - BitmapImageMetrics::CountImageDensityCorrection( - !correctedSize.IsEmpty() && correctedSize != decoder_->Size()); - } - } return size_available_; }
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.cc b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.cc index 06b3801f..8015a64 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.cc
@@ -39,11 +39,6 @@ UMA_HISTOGRAM_ENUMERATION("Blink.DecodedImageType", decoded_image_type); } -void BitmapImageMetrics::CountImageDensityCorrection(bool density_correction_present) { - UMA_HISTOGRAM_BOOLEAN("Blink.DecodedImage.DensitySizeCorrectionDetected", - density_correction_present); -} - void BitmapImageMetrics::CountImageJpegDensity(int image_min_side, uint64_t density_centi_bpp, size_t image_size_bytes) {
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h index efe5218..82b8b647 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h
@@ -55,7 +55,6 @@ // |type| is the return value of ImageDecoder::FilenameExtension(). static void CountDecodedImageType(const String& type); - static void CountImageDensityCorrection(bool densityCorrectionPresent); // Report the JPEG compression density in 0.01 bits per pixel for an image // with a smallest side (width or length) of |image_min_side| and total size // in bytes |image_size_bytes|.
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc index 2111737..50e870a0 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
@@ -828,33 +828,6 @@ #endif // BUILDFLAG(ENABLE_AV1_DECODER) } -TEST_F(BitmapHistogramTest, DecodedImageDensitySizeCorrectionDetected) { - ExpectImageRecordsSample("exif-resolution-none.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - false); - ExpectImageRecordsSample("exif-resolution-invalid-cm.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - false); - ExpectImageRecordsSample("exif-resolution-invalid-no-match.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - false); - ExpectImageRecordsSample("exif-resolution-invalid-partial.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - false); - ExpectImageRecordsSample("exif-resolution-no-change.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - false); - ExpectImageRecordsSample("exif-resolution-valid-hires.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - true); - ExpectImageRecordsSample("exif-resolution-valid-lores.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - true); - ExpectImageRecordsSample("exif-resolution-valid-non-uniform.jpg", - "Blink.DecodedImage.DensitySizeCorrectionDetected", - true); -} - TEST_F(BitmapHistogramTest, DecodedImageDensityKiBWeighted_JpegDensity) { // Test a 64x64 image, which should be too small to report any metrics. {
diff --git a/third_party/blink/renderer/platform/graphics/rw_buffer.cc b/third_party/blink/renderer/platform/graphics/rw_buffer.cc index c65b9fa..fffecf0 100644 --- a/third_party/blink/renderer/platform/graphics/rw_buffer.cc +++ b/third_party/blink/renderer/platform/graphics/rw_buffer.cc
@@ -253,6 +253,19 @@ return sk_sp<ROBuffer>(new ROBuffer(head_, total_used_, tail_)); } +bool RWBuffer::HasNoSnapshots() const { + // Trivially, there are no other references to the underlying buffer, because + // there is no underlying buffer. + if (!head_) { + return true; + } + + // For this to be useful, it should only return true when the other threads + // can no longer touch the buffer; this means that the "acquire" ordering is + // required, since the count is decreased with "release" ordering. + return head_->ref_count_.load(std::memory_order_acquire) == 1; +} + void RWBuffer::Validate() const { #if DCHECK_IS_ON() if (head_) {
diff --git a/third_party/blink/renderer/platform/graphics/rw_buffer.h b/third_party/blink/renderer/platform/graphics/rw_buffer.h index 93720e2..e42a8ce5 100644 --- a/third_party/blink/renderer/platform/graphics/rw_buffer.h +++ b/third_party/blink/renderer/platform/graphics/rw_buffer.h
@@ -46,6 +46,12 @@ sk_sp<ROBuffer> MakeROBufferSnapshot() const; + // This should only be called from the same thread that we are creating the + // RWBuffer and the snapshots on. + // If true is returned, it is guaranteed that |this| has unique ownership of + // its underlying buffer. + bool HasNoSnapshots() const; + std::unique_ptr<SkStreamAsset> MakeStreamSnapshot() const; void Validate() const;
diff --git a/third_party/blink/renderer/platform/graphics/rw_buffer_test.cc b/third_party/blink/renderer/platform/graphics/rw_buffer_test.cc index b92dcecd..b7c9fbe0 100644 --- a/third_party/blink/renderer/platform/graphics/rw_buffer_test.cc +++ b/third_party/blink/renderer/platform/graphics/rw_buffer_test.cc
@@ -177,4 +177,46 @@ } } +// Tests that |HasNoSnapshots| returns the correct value when the buffer is +// empty. +// In this case, we can't tell if a snapshot has been created (in general), so +// we expect to always get back false. +TEST(RWBufferTest, HasNoSnapshotsEmpty) { + RWBuffer buffer; + ASSERT_EQ(0u, buffer.size()); + + EXPECT_TRUE(buffer.HasNoSnapshots()); + + { + sk_sp<ROBuffer> first = buffer.MakeROBufferSnapshot(); + EXPECT_TRUE(buffer.HasNoSnapshots()); + + sk_sp<ROBuffer> second = buffer.MakeROBufferSnapshot(); + EXPECT_TRUE(buffer.HasNoSnapshots()); + } + + EXPECT_TRUE(buffer.HasNoSnapshots()); +} + +// Tests that |HasNoSnapshots| returns the correct value when the buffer is +// empty. +TEST(RWBufferTest, HasNoSnapshots) { + RWBuffer buffer; + ASSERT_EQ(0u, buffer.size()); + + buffer.Append(gABC, 26); + + EXPECT_TRUE(buffer.HasNoSnapshots()); + + { + sk_sp<ROBuffer> first = buffer.MakeROBufferSnapshot(); + EXPECT_FALSE(buffer.HasNoSnapshots()); + + sk_sp<ROBuffer> second = buffer.MakeROBufferSnapshot(); + EXPECT_FALSE(buffer.HasNoSnapshots()); + } + + EXPECT_TRUE(buffer.HasNoSnapshots()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/impl/heap_allocator.h b/third_party/blink/renderer/platform/heap/impl/heap_allocator.h index 26ad085..36013d9 100644 --- a/third_party/blink/renderer/platform/heap/impl/heap_allocator.h +++ b/third_party/blink/renderer/platform/heap/impl/heap_allocator.h
@@ -517,6 +517,26 @@ CheckType(); } + HeapVector(const HeapVector& other) + : Vector<T, inlineCapacity, HeapAllocator>(other) { + CheckType(); + } + + HeapVector& operator=(const HeapVector& other) { + Vector<T, inlineCapacity, HeapAllocator>::operator=(other); + return *this; + } + + HeapVector(HeapVector&& other) + : Vector<T, inlineCapacity, HeapAllocator>(std::move(other)) { + CheckType(); + } + + HeapVector& operator=(HeapVector&& other) { + Vector<T, inlineCapacity, HeapAllocator>::operator=(std::move(other)); + return *this; + } + HeapVector(std::initializer_list<T> elements) : Vector<T, inlineCapacity, HeapAllocator>(elements) { CheckType();
diff --git a/third_party/blink/renderer/platform/heap/test/incremental_marking_test.cc b/third_party/blink/renderer/platform/heap/test/incremental_marking_test.cc index df88d7b0..15a6b39 100644 --- a/third_party/blink/renderer/platform/heap/test/incremental_marking_test.cc +++ b/third_party/blink/renderer/platform/heap/test/incremental_marking_test.cc
@@ -504,79 +504,77 @@ TEST_F(IncrementalMarkingTest, HeapVectorPushBackMember) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected<HeapVector<Member<Object>>>(); + HeapVector<Member<Object>> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - vec->push_back(obj); + vec.push_back(obj); } } TEST_F(IncrementalMarkingTest, HeapVectorPushBackNonGCedContainer) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(); + HeapVector<NonGarbageCollectedContainer> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - vec->push_back(NonGarbageCollectedContainer(obj, 1)); + vec.push_back(NonGarbageCollectedContainer(obj, 1)); } } TEST_F(IncrementalMarkingTest, HeapVectorPushBackStdPair) { auto* obj1 = MakeGarbageCollected<Object>(); auto* obj2 = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected< - HeapVector<std::pair<Member<Object>, Member<Object>>>>(); + HeapVector<std::pair<Member<Object>, Member<Object>>> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2}); - vec->push_back(std::make_pair(Member<Object>(obj1), Member<Object>(obj2))); + vec.push_back(std::make_pair(Member<Object>(obj1), Member<Object>(obj2))); } } TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackMember) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected<HeapVector<Member<Object>>>(); + HeapVector<Member<Object>> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - vec->emplace_back(obj); + vec.emplace_back(obj); } } TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackNonGCedContainer) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(); + HeapVector<NonGarbageCollectedContainer> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - vec->emplace_back(obj, 1); + vec.emplace_back(obj, 1); } } TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackStdPair) { auto* obj1 = MakeGarbageCollected<Object>(); auto* obj2 = MakeGarbageCollected<Object>(); - auto* vec = MakeGarbageCollected< - HeapVector<std::pair<Member<Object>, Member<Object>>>>(); + HeapVector<std::pair<Member<Object>, Member<Object>>> vec; { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2}); - vec->emplace_back(obj1, obj2); + vec.emplace_back(obj1, obj2); } } TEST_F(IncrementalMarkingTest, HeapVectorCopyMember) { auto* object = MakeGarbageCollected<Object>(); - auto* vec1 = MakeGarbageCollected<HeapVector<Member<Object>>>(); - vec1->push_back(object); + HeapVector<Member<Object>> vec1; + vec1.push_back(object); { ExpectWriteBarrierFires scope(ThreadState::Current(), {object}); - MakeGarbageCollected<HeapVector<Member<Object>>>(*vec1); + HeapVector<Member<Object>> vec2(vec1); } } TEST_F(IncrementalMarkingTest, HeapVectorCopyNonGCedContainer) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec1 = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(); - vec1->emplace_back(obj, 1); + HeapVector<NonGarbageCollectedContainer> vec1; + vec1.emplace_back(obj, 1); { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(*vec1); + HeapVector<NonGarbageCollectedContainer> vec2(vec1); } } @@ -584,32 +582,31 @@ using ValueType = std::pair<Member<Object>, Member<Object>>; auto* obj1 = MakeGarbageCollected<Object>(); auto* obj2 = MakeGarbageCollected<Object>(); - auto* vec1 = MakeGarbageCollected<HeapVector<ValueType>>(); - vec1->emplace_back(obj1, obj2); + HeapVector<ValueType> vec1; + vec1.emplace_back(obj1, obj2); { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2}); - MakeGarbageCollected<HeapVector<ValueType>>(*vec1); + HeapVector<ValueType> vec2(vec1); } } TEST_F(IncrementalMarkingTest, HeapVectorMoveMember) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec1 = MakeGarbageCollected<HeapVector<Member<Object>>>(); - vec1->push_back(obj); + HeapVector<Member<Object>> vec1; + vec1.push_back(obj); { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - MakeGarbageCollected<HeapVector<Member<Object>>>(std::move(*vec1)); + HeapVector<Member<Object>> vec2(std::move(vec1)); } } TEST_F(IncrementalMarkingTest, HeapVectorMoveNonGCedContainer) { auto* obj = MakeGarbageCollected<Object>(); - auto* vec1 = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(); - vec1->emplace_back(obj, 1); + HeapVector<NonGarbageCollectedContainer> vec1; + vec1.emplace_back(obj, 1); { ExpectWriteBarrierFires scope(ThreadState::Current(), {obj}); - MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>( - std::move(*vec1)); + HeapVector<NonGarbageCollectedContainer> vec2(std::move(vec1)); } } @@ -1750,8 +1747,7 @@ using Nested = HeapVector<HeapVector<Member<Object>>>; // Allocate dummy storage so that other vector backings are actually moved. - MakeGarbageCollected<HeapVector<Member<Object>>>()->push_back( - MakeGarbageCollected<Object>()); + HeapVector<Member<Object>> unused{MakeGarbageCollected<Object>()}; IncrementalMarkingTestDriver driver(ThreadState::Current()); ThreadState::Current()->EnableCompactionForNextGCForTesting();
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc index 0a351b5..c8995c1 100644 --- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc +++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
@@ -130,4 +130,9 @@ image_request_behavior_ = kNonBlockingImage; } +void FetchParameters::SetModuleScript() { + DCHECK_EQ(mojom::blink::ScriptType::kClassic, script_type_); + script_type_ = mojom::blink::ScriptType::kModule; +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h index c38f457..38ca7a6a 100644 --- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h +++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
@@ -27,6 +27,8 @@ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_PARAMETERS_H_ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h" +#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h" +#include "third_party/blink/public/mojom/script/script_type.mojom-shared.h" #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/renderer/platform/loader/fetch/client_hints_preferences.h" #include "third_party/blink/renderer/platform/loader/fetch/cross_origin_attribute_value.h" @@ -192,6 +194,10 @@ void SetLazyImageDeferred(); void SetLazyImageNonBlocking(); + mojom::blink::ScriptType GetScriptType() const { return script_type_; } + + void SetModuleScript(); + // See documentation in blink::ResourceRequest. bool IsFromOriginDirtyStyleSheet() const { return is_from_origin_dirty_style_sheet_; @@ -216,6 +222,7 @@ ResourceWidth resource_width_; ClientHintsPreferences client_hint_preferences_; ImageRequestBehavior image_request_behavior_; + mojom::blink::ScriptType script_type_ = mojom::blink::ScriptType::kClassic; bool is_stale_revalidation_ = false; bool is_from_origin_dirty_style_sheet_ = false; };
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.h b/third_party/blink/renderer/platform/loader/fetch/resource.h index 6b27f6f..9a6ad30 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource.h
@@ -140,6 +140,9 @@ // Match fails due to different request headers. kRequestHeadersDoNotMatch, + + // Match fails due to different script types. + kScriptTypeDoesNotMatch, }; ~Resource() override;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_error.cc b/third_party/blink/renderer/platform/loader/fetch/resource_error.cc index ef66240..b8f0fb6 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_error.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_error.cc
@@ -180,7 +180,8 @@ } bool ResourceError::IsTrustTokenCacheHit() const { - return error_code_ == net::ERR_TRUST_TOKEN_OPERATION_CACHE_HIT; + return error_code_ == + net::ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST; } bool ResourceError::IsUnactionableTrustTokensStatus() const {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc index 98f8999..f4c8ab4 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -1449,6 +1449,9 @@ case Resource::MatchStatus::kRequestHeadersDoNotMatch: builder.Append("because the request headers do not match."); break; + case Resource::MatchStatus::kScriptTypeDoesNotMatch: + builder.Append("because the script type does not match."); + break; } console_logger_->AddConsoleMessage(mojom::ConsoleMessageSource::kOther, mojom::ConsoleMessageLevel::kWarning,
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc index ff5aeb8..dfce9ed5 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -384,11 +384,9 @@ QueueTraits::PrioritisationType::kJavaScriptTimer) .SetCanBeIntensivelyThrottled(IsIntensiveWakeUpThrottlingEnabled()); case TaskType::kJavascriptTimerImmediate: { - return DeferrableTaskQueueTraits() - .SetPrioritisationType( - QueueTraits::PrioritisationType::kJavaScriptTimer) - .SetCanBeThrottled(!base::FeatureList::IsEnabled( - features::kOptOutZeroTimeoutTimersFromThrottling)); + // Immediate timers are not throttled. + return DeferrableTaskQueueTraits().SetPrioritisationType( + QueueTraits::PrioritisationType::kJavaScriptTimer); } case TaskType::kInternalLoading: case TaskType::kNetworking:
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc index 66634ce..a2cdb07 100644 --- a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc +++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc
@@ -320,6 +320,13 @@ scheme == "http" || scheme == "https"; } +// https://url.spec.whatwg.org/#special-scheme +bool SchemeRegistry::IsSpecialScheme(const String& scheme) { + DCHECK_EQ(scheme, scheme.LowerASCII()); + return scheme == "ftp" || scheme == "file" || scheme == "http" || + scheme == "https" || scheme == "ws" || scheme == "wss"; +} + void SchemeRegistry::RegisterURLSchemeAsFirstPartyWhenTopLevel( const String& scheme) { DCHECK_EQ(scheme, scheme.LowerASCII());
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.h b/third_party/blink/renderer/platform/weborigin/scheme_registry.h index be4da093..47dd1cc 100644 --- a/third_party/blink/renderer/platform/weborigin/scheme_registry.h +++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.h
@@ -110,6 +110,9 @@ // https://fetch.spec.whatwg.org/#fetch-scheme static bool IsFetchScheme(const String& scheme); + // https://url.spec.whatwg.org/#special-scheme + static bool IsSpecialScheme(const String& scheme); + // Schemes which override the first-/third-party checks on a Document. static void RegisterURLSchemeAsFirstPartyWhenTopLevel(const String& scheme); static void RemoveURLSchemeAsFirstPartyWhenTopLevel(const String& scheme);
diff --git a/third_party/blink/renderer/platform/widget/frame_widget.h b/third_party/blink/renderer/platform/widget/frame_widget.h index b485c7da..7d092a79 100644 --- a/third_party/blink/renderer/platform/widget/frame_widget.h +++ b/third_party/blink/renderer/platform/widget/frame_widget.h
@@ -82,6 +82,11 @@ // the time the compositor is created. virtual const cc::LayerTreeSettings& GetLayerTreeSettings() = 0; + // Sets the state of the browser controls. (Used for URL bar animations.) + virtual void UpdateBrowserControlsState(cc::BrowserControlsState constraints, + cc::BrowserControlsState current, + bool animate) = 0; + // Set or get what event handlers exist in the document contained in the // WebWidget in order to inform the compositor thread if it is able to handle // an input event, or it needs to pass it to the main thread to be handled.
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests index 0bda6f4..8d9bad2 100644 --- a/third_party/blink/web_tests/NeverFixTests +++ b/third_party/blink/web_tests/NeverFixTests
@@ -2185,6 +2185,7 @@ external/wpt/native-file-system/showSaveFilePicker-manual.https.html [ Skip ] # These tests require a physical device connected. +external/wpt/webusb/usbDevice_claimInterface-manual.https.html [ Skip ] wpt_internal/hid/hidDevice_collections-manual.https.html [ Skip ] wpt_internal/serial/serialPort_loopback-manual.https.html [ Skip ] wpt_internal/serial/serialPort_disconnect-manual.https.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index bfda15e..d45d69b 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -5989,4 +5989,4 @@ # Sheriff 2020-12-03 crbug.com/1154940 [ Win7 ] inspector-protocol/overlay/overlay-persistent-overlays-with-emulation.js [ Pass Failure ] - +crbug.com/1155125 [ Linux ] http/tests/history/replacestate-post-to-get-2.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 8efb55cd..23909cc 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -316,8 +316,11 @@ }, { "prefix": "cors-rfc1918", - "bases": ["http/tests/security/cors-rfc1918"], - "args": ["--enable-blink-features=CorsRFC1918"] + "bases": ["http/tests/security/cors-rfc1918", + "external/wpt/cors-rfc1918", + "external/wpt/fetch/cors-rfc1918"], + "args": ["--enable-blink-features=CorsRFC1918", + "--enable-features=BlockInsecurePrivateNetworkRequests"] }, { "prefix": "single-renderer-process",
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations index 8e238e2..7294a6f 100644 --- a/third_party/blink/web_tests/WebGPUExpectations +++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -117,8 +117,6 @@ # https://github.com/gpuweb/cts/issues/230 these tests need to be updated and Dawn will fail once we implement proper limits wpt_internal/webgpu/cts.html?q=webgpu:api,validation,createBindGroupLayout:max_resources_per_stage,in_bind_group_layout,* [ Failure ] -wpt_internal/webgpu/cts.html?q=webgpu:shader,execution,robust_access:* [ Skip ] - # Failure in both D3D12 and Vulkan validation layers wpt_internal/webgpu/cts.html?q=webgpu:api,validation,encoding,cmds,index_access:* [ Skip ]
diff --git a/third_party/blink/web_tests/clipboard/async-clipboard/clipboard-read-unsupported-types-removal.html b/third_party/blink/web_tests/clipboard/async-clipboard/clipboard-read-unsupported-types-removal.html new file mode 100644 index 0000000..eb2f995 --- /dev/null +++ b/third_party/blink/web_tests/clipboard/async-clipboard/clipboard-read-unsupported-types-removal.html
@@ -0,0 +1,33 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Async Clipboard read unsupported types removal test.</title> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/testdriver.js"></script> +<script src="../../resources/testdriver-vendor.js"></script> +<body> +<script> +'use strict'; + +promise_test(async t => { + // Write supported and unsupported types to clipboard. + document.addEventListener('copy', event => { + event.clipboardData.setData('text/plain', 'Supported text.'); + event.clipboardData.setData('unsupported-type', 'Unsupported custom text.'); + event.preventDefault(); + }); + document.execCommand('copy'); + + // Read clipboard contents. + await test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + const clipboardItems = await navigator.clipboard.read(); + + // The unsupported unsupported-type type should be removed, leaving only + // the supported text/plain type. + const clipboardItem = clipboardItems[0]; + assert_equals(clipboardItem.types.length, 1); + assert_true(clipboardItem.types.includes('text/plain')); + assert_false(clipboardItem.types.includes('unsupported-type')); +}, 'Verify that clipboard read removes unsupported types.'); +</script> +</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003-manual.html b/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003-manual.html deleted file mode 100644 index ccc916a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003-manual.html +++ /dev/null
@@ -1,88 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8" /> - <title>CSS Test (Selectors): :focus-visible does not match on non-texty inputs</title> - <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org" /> - <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo" /> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <style> - :focus-visible { - outline: red dotted 1px; /* fallback for Edge */ - outline: red auto 5px; - } - - :focus:not(:focus-visible) { - outline: 0; - background-color: darkseagreen; - } - </style> -</head> -<body> - This test checks that <code>:focus-visible</code> is <em>not</em> triggered by mouse focus on <code><input></code> elements which do not take text input. - <ol id="instructions"> - <li>If the user-agent does not claim to support the <code>:focus-visible</code> pseudo-class then SKIP this test.</li> - <li>Click each element element below to focus it.</li> - <li>If the element has a red outline, then the test result is FAILURE. If the element has a green background, then the test result is SUCCESS.</li> - </ol> - <br /> - <div> - <span data-tested="false" id="el-1" tabindex="1">Focus me</span> - </div> - <div> - <span data-tested="false" id="el-2" tabindex="-1">Focus me</span> - </div> - <div> - <span data-tested="false" id="el-3" tabindex="0">Focus me</span> - </div> - <div> - <button data-tested="false" id="el-4">Focus me</span> - </div> - <div> - <input data-tested="false" id="el-5" type="button" value="Focus me"</input> - </div> - <div> - <input data-tested="false" id="el-6" type="image" alt="Focus me."></input> - </div> - <div> - <input data-tested="false" id="el-7" type="reset" value="Focus me."></input> - </div> - <div> - <input data-tested="false" id="el-8" type="submit" value="Focus me."></input> - </div> - <div> - <label><input data-tested="false" id="el-9" type="checkbox"></input> Focus me.</label> - </div> - <div> - <label><input data-tested="false" id="el-10" type="radio"></input> Focus me.</label> - </div> - <div> - <!-- Focusing file input triggers a modal, so only test manually --> - <input id="el-12" type="file" value="Focus me."></input> - </div> - <div> - <label><input data-tested="false" id="el-13" type="range"></input> Focus me.</label> - </div> - <div> - <!-- Ensure the color input is last, as it has a pop-up which obscures other elements --> - <label><input data-tested="false" id="el-11" type="color"></input> Focus me.</label> - </div> - <script> - async_test(function(t) { - document.querySelectorAll("[data-tested]").forEach((el) => { - el.addEventListener("click", t.step_func((e) => { - let el = e.target; - assert_equals(getComputedStyle(el).outlineStyle, "none"); - el.dataset.tested = true; - if (document.querySelector("[data-tested=false]")) { - mouseClickInTarget("[data-tested=false]"); - } else { - t.done(); - } - })); - }); - }, "Mouse focus on input elements which do not show a virtual keyboard should NOT match :focus-visible"); - </script> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003.html b/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003.html new file mode 100644 index 0000000..4620c1e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/focus-visible-003.html
@@ -0,0 +1,98 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8" /> + <title>CSS Test (Selectors): :focus-visible does not match on non-texty inputs</title> + <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org" /> + <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo" /> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-actions.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <style> + :focus-visible { + outline: red dotted 1px; /* fallback for Edge */ + outline: red auto 5px; + } + + :focus:not(:focus-visible) { + outline: 0; + background-color: darkseagreen; + } + </style> +</head> +<body> + This test checks that <code>:focus-visible</code> is <em>not</em> triggered by mouse focus on <code><input></code> elements which do not take text input. + <ol id="instructions"> + <li>If the user-agent does not claim to support the <code>:focus-visible</code> pseudo-class then SKIP this test.</li> + <li>Click each element element below to focus it.</li> + <li>If the element has a red outline, then the test result is FAILURE. If the element has a green background, then the test result is SUCCESS.</li> + </ol> + <br /> + <div> + <span data-tested="false" id="el-1" tabindex="1">Focus me</span> + </div> + <div> + <span data-tested="false" id="el-2" tabindex="-1">Focus me</span> + </div> + <div> + <span data-tested="false" id="el-3" tabindex="0">Focus me</span> + </div> + <div> + <button data-tested="false" id="el-4">Focus me</span> + </div> + <div> + <input data-tested="false" id="el-5" type="button" value="Focus me"></input> + </div> + <div> + <input data-tested="false" id="el-6" type="image" alt="Focus me."></input> + </div> + <div> + <input data-tested="false" id="el-7" type="reset" value="Focus me."></input> + </div> + <div> + <input data-tested="false" id="el-8" type="submit" value="Focus me."></input> + </div> + <div> + <label><input data-tested="false" id="el-9" type="checkbox"></input> Focus me.</label> + </div> + <div> + <label><input data-tested="false" id="el-10" type="radio"></input> Focus me.</label> + </div> + <div> + <!-- Focusing file input triggers a modal, so only test manually --> + <input id="el-12" type="file" value="Focus me."></input> + </div> + <div> + <label><input data-tested="false" id="el-13" type="range"></input> Focus me.</label> + </div> + <div> + <!-- Ensure the color input is last, as it has a pop-up which obscures other elements --> + <label><input data-tested="false" id="el-11" type="color"></input> Focus me.</label> + </div> + <script> + function mouseClickInTarget(selector) { + let target = document.querySelector(selector); + return test_driver.click(target); + } + + async_test(function(t) { + document.querySelectorAll("[data-tested]").forEach((el) => { + el.addEventListener("click", t.step_func((e) => { + let el = e.target; + assert_equals(getComputedStyle(el).outlineStyle, "none"); + el.dataset.tested = true; + if (document.querySelector("[data-tested=false]")) { + mouseClickInTarget("[data-tested=false]"); + } else { + t.done(); + } + })); + }); + + mouseClickInTarget("[data-tested=false]"); + }, "Mouse focus on input elements which do not show a virtual keyboard should NOT match :focus-visible"); + </script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt new file mode 100644 index 0000000..f59d69d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +PASS Local non secure page fetches local page. +FAIL Public non secure page fetches local page. assert_equals: expected "failure" but got "success" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window.js b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window.js new file mode 100644 index 0000000..8f49a5c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/non-secure-context.window.js
@@ -0,0 +1,31 @@ +// META: script=resources/support.js +// +// Spec: https://wicg.github.io/cors-rfc1918/#integration-fetch +// +// This file covers only those tests that must execute in a non secure context. +// Other tests are defined in: secure-context.window.js + +setup(() => { + // Making sure we are in a non secure context, as expected. + assert_false(window.isSecureContext); +}); + +promise_test(async t => { + return fetch("/common/blank.html") + .catch(reason => {unreached_func(reason)}); +}, "Local non secure page fetches local page."); + +// For the following tests, we go through an iframe, because it is not possible +// to directly import the test harness from a secured public page. +promise_test(async t => { + let iframe = await appendIframe(t, document, + "resources/treat-as-public-address.html"); + let reply = futureMessage(); + iframe.contentWindow.postMessage("/common/blank.html", "*"); + assert_equals(await reply, "failure"); +}, "Public non secure page fetches local page."); + +// TODO(https://github.com/web-platform-tests/wpt/issues/26166): +// Add tests for public variations when we are able to fetch resources using a +// mechanism compatible with WPT guidelines regarding being self-contained. +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/support.js b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/support.js new file mode 100644 index 0000000..be49c51 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/support.js
@@ -0,0 +1,34 @@ +// Creates a new iframe in |doc|, calls |func| on it and appends it as a child +// of |doc|. +// Returns a promise that resolves to the iframe once loaded (successfully or +// not). +// The iframe is removed from |doc| once test |t| is done running. +// +// NOTE: Because iframe elements always invoke the onload event handler, even +// in case of error, we cannot wire onerror to a promise rejection. The Promise +// constructor requires users to resolve XOR reject the promise. +function appendIframeWith(t, doc, func) { + return new Promise(resolve => { + const child = doc.createElement("iframe"); + func(child); + child.onload = () => { resolve(child); }; + doc.body.appendChild(child); + t.add_cleanup(() => { doc.body.removeChild(child); }); + }); +} + +// Appends a child iframe to |doc| sourced from |src|. +// +// See append_child_frame_with() for more details. +function appendIframe(t, doc, src) { + return appendIframeWith(t, doc, child => { child.src = src; }); +} + +// Register an event listener that will resolve this promise when this +// window receives a message posted to it. +function futureMessage() { + return new Promise(resolve => { + window.addEventListener("message", e => resolve(e.data)); + }); +}; +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html new file mode 100644 index 0000000..7a8f6f09 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html
@@ -0,0 +1,8 @@ +<script> + window.addEventListener("message", function (event) { + fetch(event.data) + .then(response => {parent.postMessage("success", "*")}) + .catch(error => {parent.postMessage("failure", "*")}); + }); +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html.headers b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html.headers new file mode 100644 index 0000000..76371c62 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.html.headers
@@ -0,0 +1 @@ +Content-Security-Policy: treat-as-public-address;
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html new file mode 100644 index 0000000..7a8f6f09 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html
@@ -0,0 +1,8 @@ +<script> + window.addEventListener("message", function (event) { + fetch(event.data) + .then(response => {parent.postMessage("success", "*")}) + .catch(error => {parent.postMessage("failure", "*")}); + }); +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html.headers b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html.headers new file mode 100644 index 0000000..76371c62 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/resources/treat-as-public-address.https.html.headers
@@ -0,0 +1 @@ +Content-Security-Policy: treat-as-public-address;
diff --git a/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/secure-context.https.window.js b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/secure-context.https.window.js new file mode 100644 index 0000000..8ed028a3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/cors-rfc1918/secure-context.https.window.js
@@ -0,0 +1,31 @@ +// META: script=resources/support.js +// +// Spec: https://wicg.github.io/cors-rfc1918/#integration-fetch +// +// This file covers only those tests that must execute in a secure context. +// Other tests are defined in: non-secure-context.window.js + +setup(() => { + // Making sure we are in a secure context, as expected. + assert_true(window.isSecureContext); +}); + +promise_test(async t => { + return fetch("/common/blank.html") + .catch(reason => {unreached_func(reason)}); +}, "Local secure page fetches local page."); + +// For the following tests, we go through an iframe, because it is not possible +// to directly import the test harness from a secured public page. +promise_test(async t => { + let iframe = await appendIframe(t, document, + "resources/treat-as-public-address.https.html"); + let reply = futureMessage(); + iframe.contentWindow.postMessage("/common/blank.html", "*"); + assert_equals(await reply, "success"); +}, "Public secure page fetches local page."); + +// TODO(https://github.com/web-platform-tests/wpt/issues/26166): +// Add tests for public variations when we are able to fetch resources using a +// mechanism compatible with WPT guidelines regarding being self-contained. +
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving-internal.https.html b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving-internal.https.html index 887b747..d75bebba 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving-internal.https.html +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving-internal.https.html
@@ -18,6 +18,7 @@ for (const json of [ 'resources/empty-import-map-internal.json', + 'resources/url-specifiers-schemes-internal.json' ]) { promise_test(() => { const promise = runTestsFromJSON(json);
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.https-expected.txt b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.https-expected.txt new file mode 100644 index 0000000..cdab62d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.https-expected.txt
@@ -0,0 +1,175 @@ +This is a testharness.js-based test. +Found 171 tests; 165 PASS, 6 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS global setup +PASS Test helper: fetching and sanity checking test JSON: resources/scopes.json +PASS Test helper: fetching and sanity checking test JSON: resources/empty-import-map.json +PASS Test helper: fetching and sanity checking test JSON: resources/packages-via-trailing-slashes.json +PASS Test helper: fetching and sanity checking test JSON: resources/tricky-specifiers.json +PASS Test helper: fetching and sanity checking test JSON: resources/url-specifiers.json +PASS Test helper: fetching and sanity checking test JSON: resources/data-base-url.json +PASS Test helper: fetching and sanity checking test JSON: resources/scopes-exact-vs-prefix.json +PASS Test helper: fetching and sanity checking test JSON: resources/overlapping-entries.json +PASS Test helper: fetching and sanity checking test JSON: resources/resolving-null.json +PASS global cleanup +PASS Fallback to toplevel and between scopes: should fall back to `imports` when no scopes match: a +PASS Fallback to toplevel and between scopes: should fall back to `imports` when no scopes match: b +PASS Fallback to toplevel and between scopes: should fall back to `imports` when no scopes match: c +PASS Fallback to toplevel and between scopes: should fall back to `imports` when no scopes match: d +PASS Fallback to toplevel and between scopes: should use a direct scope override: a +PASS Fallback to toplevel and between scopes: should use a direct scope override: b +PASS Fallback to toplevel and between scopes: should use a direct scope override: c +PASS Fallback to toplevel and between scopes: should use a direct scope override: d +PASS Fallback to toplevel and between scopes: should use an indirect scope override: a +PASS Fallback to toplevel and between scopes: should use an indirect scope override: b +PASS Fallback to toplevel and between scopes: should use an indirect scope override: c +PASS Fallback to toplevel and between scopes: should use an indirect scope override: d +PASS Relative URL scope keys: An empty string scope is a scope with import map base URL: a +PASS Relative URL scope keys: An empty string scope is a scope with import map base URL: b +PASS Relative URL scope keys: An empty string scope is a scope with import map base URL: c +PASS Relative URL scope keys: './' scope is a scope with import map base URL's directory: a +PASS Relative URL scope keys: './' scope is a scope with import map base URL's directory: b +PASS Relative URL scope keys: './' scope is a scope with import map base URL's directory: c +PASS Relative URL scope keys: '../' scope is a scope with import map base URL's parent directory: a +PASS Relative URL scope keys: '../' scope is a scope with import map base URL's parent directory: b +PASS Relative URL scope keys: '../' scope is a scope with import map base URL's parent directory: c +PASS Package-like scenarios: Base URLs inside the scope should use the scope if the scope has matching keys: lodash-dot +PASS Package-like scenarios: Base URLs inside the scope should use the scope if the scope has matching keys: lodash-dot/foo +PASS Package-like scenarios: Base URLs inside the scope should use the scope if the scope has matching keys: lodash-dotdot +PASS Package-like scenarios: Base URLs inside the scope should use the scope if the scope has matching keys: lodash-dotdot/foo +PASS Package-like scenarios: Base URLs inside the scope fallback to less specific scope: moment +PASS Package-like scenarios: Base URLs inside the scope fallback to less specific scope: vue +PASS Package-like scenarios: Base URLs inside the scope fallback to toplevel: moment/foo +PASS Package-like scenarios: Base URLs outside a scope shouldn't use the scope even if the scope has matching keys: lodash-dot +PASS Package-like scenarios: Base URLs outside a scope shouldn't use the scope even if the scope has matching keys: lodash-dotdot +PASS Package-like scenarios: Base URLs outside a scope shouldn't use the scope even if the scope has matching keys: lodash-dot/foo +PASS Package-like scenarios: Base URLs outside a scope shouldn't use the scope even if the scope has matching keys: lodash-dotdot/foo +PASS Package-like scenarios: Fallback to toplevel or not, depending on trailing slash match: moment +PASS Package-like scenarios: Fallback to toplevel or not, depending on trailing slash match: moment/foo +PASS Package-like scenarios: should still fail for package-like specifiers that are not declared: underscore/ +PASS Package-like scenarios: should still fail for package-like specifiers that are not declared: underscore/foo +PASS valid relative specifiers: ./foo +PASS valid relative specifiers: ./foo/bar +PASS valid relative specifiers: ./foo/../bar +PASS valid relative specifiers: ./foo/../../bar +PASS valid relative specifiers: ../foo +PASS valid relative specifiers: ../foo/bar +PASS valid relative specifiers: ../../../foo/bar +PASS valid relative specifiers: /foo +PASS valid relative specifiers: /foo/bar +PASS valid relative specifiers: /../../foo/bar +PASS valid relative specifiers: /../foo/../bar +PASS HTTPS scheme absolute URLs: https://fetch-scheme.net +PASS HTTPS scheme absolute URLs: https:fetch-scheme.org +PASS HTTPS scheme absolute URLs: https://fetch%2Dscheme.com/ +PASS HTTPS scheme absolute URLs: https://///fetch-scheme.com/// +PASS valid relative URLs that are invalid as specifiers should fail: invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: \invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: :invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: @invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: %2E/invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: %2E%2E/invalid-specifier +PASS valid relative URLs that are invalid as specifiers should fail: .%2Finvalid-specifier +PASS invalid absolute URLs should fail: https://invalid-url.com:demo +PASS invalid absolute URLs should fail: http://[invalid-url.com]/ +PASS Package-like scenarios: package main modules: moment +PASS Package-like scenarios: package main modules: lodash-dot +PASS Package-like scenarios: package main modules: lodash-dotdot +PASS Package-like scenarios: package submodules: moment/foo +PASS Package-like scenarios: package submodules: lodash-dot/foo +PASS Package-like scenarios: package submodules: lodash-dotdot/foo +PASS Package-like scenarios: package names that end in a slash should just pass through: moment/ +PASS Package-like scenarios: package modules that are not declared should fail: underscore/ +PASS Package-like scenarios: package modules that are not declared should fail: underscore/foo +PASS Package-like scenarios: backtracking via ..: mapped/path +PASS Package-like scenarios: backtracking via ..: mapped/path/ +FAIL Package-like scenarios: backtracking via ..: mapped/path/.. assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL Package-like scenarios: backtracking via ..: mapped/path/../backtrack assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL Package-like scenarios: backtracking via ..: mapped/path/../../backtrack assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL Package-like scenarios: backtracking via ..: mapped/path/../../../backtrack assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL Package-like scenarios: backtracking via ..: moment/../backtrack assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL Package-like scenarios: backtracking via ..: moment/.. assert_unreached: Should have rejected: undefined Reached unreachable code +PASS Tricky specifiers: explicitly-mapped specifiers that happen to have a slash: package/withslash +PASS Tricky specifiers: specifier with punctuation: . +PASS Tricky specifiers: specifier with punctuation: .. +PASS Tricky specifiers: specifier with punctuation: ..\ +PASS Tricky specifiers: specifier with punctuation: %2E +PASS Tricky specifiers: specifier with punctuation: %2F +PASS Tricky specifiers: submodule of something not declared with a trailing slash should fail: not-a-package/foo +PASS Tricky specifiers: module for which only a trailing-slash version is present should fail: only-slash +PASS URL-like specifiers: Ordinary URL-like specifiers: https://example.com/lib/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: https://///example.com/lib/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: /lib/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: https://example.com/app/dotrelative/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: ../app/dotrelative/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: https://example.com/dotdotrelative/foo.mjs +PASS URL-like specifiers: Ordinary URL-like specifiers: ../dotdotrelative/foo.mjs +PASS URL-like specifiers: Import map entries just composed from / and .: https://example.com/ +PASS URL-like specifiers: Import map entries just composed from / and .: / +PASS URL-like specifiers: Import map entries just composed from / and .: ../ +PASS URL-like specifiers: Import map entries just composed from / and .: https://example.com/app/ +PASS URL-like specifiers: Import map entries just composed from / and .: /app/ +PASS URL-like specifiers: Import map entries just composed from / and .: ../app/ +PASS URL-like specifiers: prefix-matched by keys with trailing slashes: /test/foo.mjs +PASS URL-like specifiers: prefix-matched by keys with trailing slashes: https://example.com/app/test/foo.mjs +PASS URL-like specifiers: should use the last entry's address when URL-like specifiers parse to the same absolute URL: /test +PASS URL-like specifiers: backtracking (relative URLs): /test/.. +PASS URL-like specifiers: backtracking (relative URLs): /test/../backtrack +PASS URL-like specifiers: backtracking (relative URLs): /test/../../backtrack +PASS URL-like specifiers: backtracking (relative URLs): /test/../../../backtrack +PASS URL-like specifiers: backtracking (absolute URLs): https://example.com/test/.. +PASS URL-like specifiers: backtracking (absolute URLs): https://example.com/test/../backtrack +PASS URL-like specifiers: backtracking (absolute URLs): https://example.com/test/../../backtrack +PASS URL-like specifiers: backtracking (absolute URLs): https://example.com/test/../../../backtrack +PASS data: base URL (?): should favor the most-specific key: foo/bar +PASS Exact vs. prefix based matching: Scope without trailing slash only: Non-trailing-slash base URL (exact match): moment +PASS Exact vs. prefix based matching: Scope without trailing slash only: Non-trailing-slash base URL (exact match): moment/foo +PASS Exact vs. prefix based matching: Scope without trailing slash only: Trailing-slash base URL (fail): moment +PASS Exact vs. prefix based matching: Scope without trailing slash only: Trailing-slash base URL (fail): moment/foo +PASS Exact vs. prefix based matching: Scope without trailing slash only: Subpath base URL (fail): moment +PASS Exact vs. prefix based matching: Scope without trailing slash only: Subpath base URL (fail): moment/foo +PASS Exact vs. prefix based matching: Scope without trailing slash only: Non-subpath base URL (fail): moment +PASS Exact vs. prefix based matching: Scope without trailing slash only: Non-subpath base URL (fail): moment/foo +PASS Exact vs. prefix based matching: Scope with trailing slash only: Non-trailing-slash base URL (fail): moment +PASS Exact vs. prefix based matching: Scope with trailing slash only: Non-trailing-slash base URL (fail): moment/foo +PASS Exact vs. prefix based matching: Scope with trailing slash only: Trailing-slash base URL (exact match): moment +PASS Exact vs. prefix based matching: Scope with trailing slash only: Trailing-slash base URL (exact match): moment/foo +PASS Exact vs. prefix based matching: Scope with trailing slash only: Subpath base URL (prefix match): moment +PASS Exact vs. prefix based matching: Scope with trailing slash only: Subpath base URL (prefix match): moment/foo +PASS Exact vs. prefix based matching: Scope with trailing slash only: Non-subpath base URL (fail): moment +PASS Exact vs. prefix based matching: Scope with trailing slash only: Non-subpath base URL (fail): moment/foo +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Non-trailing-slash base URL (exact match): moment +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Non-trailing-slash base URL (exact match): moment/foo +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Trailing-slash base URL (exact match): moment +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Trailing-slash base URL (exact match): moment/foo +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Subpath base URL (prefix match): moment +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Subpath base URL (prefix match): moment/foo +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Non-subpath base URL (fail): moment +PASS Exact vs. prefix based matching: Scopes with and without trailing slash: Non-subpath base URL (fail): moment/foo +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a/ +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a/x +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a/b +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a/b/ +PASS should favor the most-specific key: Overlapping entries with trailing slashes: a/b/c +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: null/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: null/b/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: null/b/c/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: invalid-url/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: invalid-url/b/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: invalid-url/b/c/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: without-trailing-slashes/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: without-trailing-slashes/b/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: without-trailing-slashes/b/c/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: prefix-resolution-error/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: prefix-resolution-error/b/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific prefixes: prefix-resolution-error/b/c/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific scopes: null +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific scopes: invalid-url +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific scopes: without-trailing-slashes/x +PASS Entries with errors shouldn't allow fallback: No fallback to less-specific scopes: prefix-resolution-error/x +PASS Entries with errors shouldn't allow fallback: No fallback to absolute URL parsing: https://example.com/null +PASS Entries with errors shouldn't allow fallback: No fallback to absolute URL parsing: https://example.com/invalid-url +PASS Entries with errors shouldn't allow fallback: No fallback to absolute URL parsing: https://example.com/without-trailing-slashes/x +PASS Entries with errors shouldn't allow fallback: No fallback to absolute URL parsing: https://example.com/prefix-resolution-error/x +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-import-map-internal.json b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-import-map-internal.json index 59390c8..42033a2c 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-import-map-internal.json +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-import-map-internal.json
@@ -10,6 +10,7 @@ }, "non-fetch scheme absolute URLs": { "expectedResults": { + "about:fetch-scheme": "about:fetch-scheme", "mailto:non-fetch-scheme": "mailto:non-fetch-scheme", "import:non-fetch-scheme": "import:non-fetch-scheme", "javascript:non-fetch-scheme": "javascript:non-fetch-scheme",
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/packages-via-trailing-slashes.json b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/packages-via-trailing-slashes.json index 6b8f013..6ff330cc 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/packages-via-trailing-slashes.json +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/packages-via-trailing-slashes.json
@@ -6,7 +6,9 @@ "lodash-dot": "./node_modules/lodash-es/lodash.js", "lodash-dot/": "./node_modules/lodash-es/", "lodash-dotdot": "../node_modules/lodash-es/lodash.js", - "lodash-dotdot/": "../node_modules/lodash-es/" + "lodash-dotdot/": "../node_modules/lodash-es/", + "mapped/": "https://example.com/", + "mapped/path/": "https://github.com/WICG/import-maps/issues/207/" } }, "importMapBaseURL": "https://example.com/app/index.html", @@ -38,6 +40,18 @@ "underscore/": null, "underscore/foo": null } + }, + "backtracking via ..": { + "expectedResults": { + "mapped/path": "https://example.com/path", + "mapped/path/": "https://github.com/WICG/import-maps/issues/207/", + "mapped/path/..": null, + "mapped/path/../backtrack": null, + "mapped/path/../../backtrack": null, + "mapped/path/../../../backtrack": null, + "moment/../backtrack": null, + "moment/..": null + } } } }
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/test-helper.js b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/test-helper.js index 0f53aea..579fd52 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/test-helper.js +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/test-helper.js
@@ -83,7 +83,7 @@ if (event.data.result === 'TypeError') { reject(new TypeError(event.data.message)); } else { - reject(new Error(event.data.result)); + reject(new Error(event.data.message)); } } else { assert_unreached('Invalid message: ' + event.data.type);
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers-schemes-internal.json b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers-schemes-internal.json new file mode 100644 index 0000000..58a9764 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers-schemes-internal.json
@@ -0,0 +1,45 @@ +{ + "importMap": { + "imports": { + "data:text/": "/lib/test-data/", + "about:text/": "/lib/test-about/", + "blob:text/": "/lib/test-blob/", + "blah:text/": "/lib/test-blah/", + "http:text/": "/lib/test-http/", + "https:text/": "/lib/test-https/", + "file:text/": "/lib/test-file/", + "ftp:text/": "/lib/test-ftp/", + "ws:text/": "/lib/test-ws/", + "wss:text/": "/lib/test-wss/" + } + }, + "importMapBaseURL": "https://example.com/app/index.html", + "baseURL": "https://example.com/js/app.mjs", + "name": "URL-like specifiers", + "tests": { + "Non-special vs. special schemes": { + "expectedResults": { + "data:text/javascript,console.log('foo')": "data:text/javascript,console.log('foo')", + "data:text/": "https://example.com/lib/test-data/", + "about:text/foo": "about:text/foo", + "about:text/": "https://example.com/lib/test-about/", + "blob:text/foo": "blob:text/foo", + "blob:text/": "https://example.com/lib/test-blob/", + "blah:text/foo": "blah:text/foo", + "blah:text/": "https://example.com/lib/test-blah/", + "http:text/foo": "https://example.com/lib/test-http/foo", + "http:text/": "https://example.com/lib/test-http/", + "https:text/foo": "https://example.com/lib/test-https/foo", + "https:text/": "https://example.com/lib/test-https/", + "ftp:text/foo": "https://example.com/lib/test-ftp/foo", + "ftp:text/": "https://example.com/lib/test-ftp/", + "file:text/foo": "https://example.com/lib/test-file/foo", + "file:text/": "https://example.com/lib/test-file/", + "ws:text/foo": "https://example.com/lib/test-ws/foo", + "ws:text/": "https://example.com/lib/test-ws/", + "wss:text/foo": "https://example.com/lib/test-wss/foo", + "wss:text/": "https://example.com/lib/test-wss/" + } + } + } +}
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers.json b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers.json index aff55c4..6fcf7f4 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers.json +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/url-specifiers.json
@@ -16,7 +16,7 @@ "baseURL": "https://example.com/js/app.mjs", "name": "URL-like specifiers", "tests": { - "Ordinal URL-like specifiers": { + "Ordinary URL-like specifiers": { "expectedResults": { "https://example.com/lib/foo.mjs": "https://example.com/app/more/bar.mjs", "https://///example.com/lib/foo.mjs": "https://example.com/app/more/bar.mjs", @@ -47,6 +47,22 @@ "expectedResults": { "/test": "https://example.com/lib/test2.mjs" } + }, + "backtracking (relative URLs)": { + "expectedResults": { + "/test/..": "https://example.com/lib/slash-only/", + "/test/../backtrack": "https://example.com/lib/slash-only/backtrack", + "/test/../../backtrack": "https://example.com/lib/slash-only/backtrack", + "/test/../../../backtrack": "https://example.com/lib/slash-only/backtrack" + } + }, + "backtracking (absolute URLs)": { + "expectedResults": { + "https://example.com/test/..": "https://example.com/lib/slash-only/", + "https://example.com/test/../backtrack": "https://example.com/lib/slash-only/backtrack", + "https://example.com/test/../../backtrack": "https://example.com/lib/slash-only/backtrack", + "https://example.com/test/../../../backtrack": "https://example.com/lib/slash-only/backtrack" + } } } }
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCDataChannel-close.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCDataChannel-close.html index cd4ace2..e2a5ba772 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCDataChannel-close.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCDataChannel-close.html
@@ -45,7 +45,7 @@ assert_true(closingSeen, 'Closing event was seen'); }, `Close ${mode} causes closing and close event to be called`); - promise_test(async t => { + promise_test(async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); const [channel1, channel2] = await createDataChannelPair(t, options, pc1); @@ -100,5 +100,81 @@ pc1.close(); await new Promise(resolve => t.step_timeout(resolve, 10)); }, `Close peerconnection after ${mode} close causes no events`); + + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + pc1.createDataChannel('not-counted', options); + const tokenDataChannel = new Promise(resolve => { + pc2.ondatachannel = resolve; + }); + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + if (!options.negotiated) { + await tokenDataChannel; + } + let closeExpectedCount = 0; + let errorExpectedCount = 0; + let resolveCountIsZero; + let waitForCountIsZero = new Promise(resolve => { + resolveCountIsZero = resolve; + }); + for (let i = 1; i <= 10; i++) { + if ('id' in options) { + options.id = i; + } + pc1.createDataChannel('', options); + if (options.negotiated) { + const channel = pc2.createDataChannel('', options); + channel.addEventListener('error', t.step_func(event => { + assert_true(event instanceof RTCErrorEvent, 'error event ' + event); + errorExpectedCount -= 1; + })); + channel.addEventListener('close', t.step_func(event => { + closeExpectedCount -= 1; + if (closeExpectedCount == 0) { + resolveCountIsZero(); + } + })); + } else { + await new Promise(resolve => { + pc2.ondatachannel = ({channel}) => { + channel.addEventListener('error', t.step_func(event => { + assert_true(event instanceof RTCErrorEvent); + errorExpectedCount -= 1; + })); + channel.addEventListener('close', t.step_func(event => { + closeExpectedCount -= 1; + if (closeExpectedCount == 0) { + resolveCountIsZero(); + } + })); + resolve(); + } + }); + } + ++closeExpectedCount; + ++errorExpectedCount; + } + assert_equals(closeExpectedCount, 10); + // We have to wait until SCTP is connected before we close, otherwise + // there will be no signal. + // The state is not available under Plan B, and unreliable on negotiated + // channels. + // TODO(bugs.webrtc.org/12259): Remove dependency on "negotiated" + if (pc1.sctp && !options.negotiated) { + waitForState(pc1.sctp, 'connected'); + } else { + // Under plan B, we don't have a dtls transport to wait on, so just + // wait a bit. + await new Promise(resolve => t.step_timeout(resolve, 100)); + } + pc1.close(); + await waitForCountIsZero; + assert_equals(closeExpectedCount, 0); + assert_equals(errorExpectedCount, 0); + }, `Close peerconnection causes close event and error on many channels, ${mode}`); } </script>
diff --git a/third_party/blink/web_tests/external/wpt/webusb/resources/manual.js b/third_party/blink/web_tests/external/wpt/webusb/resources/manual.js new file mode 100644 index 0000000..869ac450 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webusb/resources/manual.js
@@ -0,0 +1,38 @@ +let manualTestDevice = null; + +navigator.usb.addEventListener('disconnect', (e) => { + if (e.device === manualTestDevice) { + manualTestDevice = null; + } +}) + +async function getDeviceForManualTest() { + if (manualTestDevice) { + return manualTestDevice; + } + + const button = document.createElement('button'); + button.textContent = 'Click to select a device'; + button.style.display = 'block'; + button.style.fontSize = '20px'; + button.style.padding = '10px'; + + await new Promise((resolve) => { + button.onclick = () => { + document.body.removeChild(button); + resolve(); + }; + document.body.appendChild(button); + }); + + manualTestDevice = await navigator.usb.requestDevice({filters: []}); + assert_true(manualTestDevice instanceof USBDevice); + + return manualTestDevice; +} + +function manual_usb_test(func, name, properties) { + promise_test(async (test) => { + await func(test, await getDeviceForManualTest()); + }, name, properties); +}
diff --git a/third_party/blink/web_tests/external/wpt/webusb/usbDevice_claimInterface-manual.https.html b/third_party/blink/web_tests/external/wpt/webusb/usbDevice_claimInterface-manual.https.html new file mode 100644 index 0000000..991c1a9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webusb/usbDevice_claimInterface-manual.https.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title></title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/manual.js"></script> + </head> + <body> + <p> + These tests require a USB device to be connected. + </p> + <script> + manual_usb_test(async (t, device) => { + await device.open(); + const interfacesClaimed = []; + t.add_cleanup(async () => { + for (const iface of interfacesClaimed) { + await device.releaseInterface(iface.interfaceNumber); + } + await device.close(); + }); + + await device.selectConfiguration(1); + + const promises = []; + for (const iface of device.configuration.interfaces) { + const promise = device.claimInterface(iface.interfaceNumber); + promises.push(promise); + + // Create a subtest for each interface so that success or failure to + // claim the interface is visible but does not affect the result of + // the overall test. + promise_test(async (t) => { + await promise; + + interfacesClaimed.push(iface); + }, `Can claim interface ${iface.interfaceNumber}`); + } + + await Promise.allSettled(promises); + }, 'claimInterface() resolves or rejects for all interfaces'); + </script> + </body> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt_automation/css/selectors/focus-visible-003-manual-automation.js b/third_party/blink/web_tests/external/wpt_automation/css/selectors/focus-visible-003-manual-automation.js deleted file mode 100644 index 36cd490..0000000 --- a/third_party/blink/web_tests/external/wpt_automation/css/selectors/focus-visible-003-manual-automation.js +++ /dev/null
@@ -1,5 +0,0 @@ -importAutomationScript('/pointerevents/pointerevent_common_input.js'); - -function inject_input() { - return mouseClickInTarget("[data-tested=false]"); -};
diff --git a/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed-expected.html b/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed-expected.html new file mode 100644 index 0000000..e54e505 --- /dev/null +++ b/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed-expected.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<style> +body { margin: 0 } +.ref { + width: 80px; + height: 80px; + background-color: green +} +.spacer { + height: 80px +} +svg { + display: block +} +</style> +<svg xmlns="http://www.w3.org/2000/svg" width="160" viewBox="0 0 2 2"> + <polygon points="0,1 1,0 2,1 1,2" fill="green"/> +</svg> +<div class="ref"></div> +<div class="spacer"></div> +<div class="ref"></div>
diff --git a/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed.html b/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed.html new file mode 100644 index 0000000..5ce86202 --- /dev/null +++ b/third_party/blink/web_tests/fast/borders/border-image-svg-zoomed.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<style> +body { + margin: 0; + zoom: 4 +} +div { + border-style: solid; + border-width: 20px; + width: 0 +} +.t1 { + /* SVG paints a beveled rectangle. */ + border-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="3" height="3"><polygon points="0,1 1,0 2,0 3,1, 3,2 2,3 1,3 0,2" fill="green"/></svg>') 1 +} +.t2 { + /* SVG fills top left corner of nine piece image given a 40x40 default object size. */ + border-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="40"><rect width="20" height="20" fill="green"/></svg>') 20; +} +.t3 { + /* SVG fills top left corner of nine piece image. */ + border-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3 3" width="30" height="30"><rect x="0" y="0" width="1" height="1" fill="green"/></svg>') 10; + width: 40px; + height: 40px; + border-bottom-width: 0; + border-right-width: 0 +} +</style> +<div class="t1"></div> +<div class="t2"></div> +<div class="t3"></div>
diff --git a/third_party/blink/web_tests/http/tests/document-policy/document-policy-in-xsl.php b/third_party/blink/web_tests/http/tests/document-policy/document-policy-in-xsl.php new file mode 100644 index 0000000..2991938 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/document-policy/document-policy-in-xsl.php
@@ -0,0 +1,9 @@ +<?php +header("Document-Policy: oversized-images=2.0"); +header("Content-Type: application/xml"); + +echo '<?xml version="1.0"?> +<?xml-stylesheet href="resources/document-policy-in-xsl.xslt" type="text/xsl"?> +<page> +</page>'; +?>
diff --git a/third_party/blink/web_tests/http/tests/document-policy/document-policy-report-only-in-xsl.php b/third_party/blink/web_tests/http/tests/document-policy/document-policy-report-only-in-xsl.php new file mode 100644 index 0000000..d690f74f --- /dev/null +++ b/third_party/blink/web_tests/http/tests/document-policy/document-policy-report-only-in-xsl.php
@@ -0,0 +1,9 @@ +<?php +header("Document-Policy-Report-Only: oversized-images=2.0"); +header("Content-Type: application/xml"); + +echo '<?xml version="1.0"?> +<?xml-stylesheet href="resources/document-policy-report-only-in-xsl.xslt" type="text/xsl"?> +<page> +</page>'; +?>
diff --git a/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-in-xsl.xslt b/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-in-xsl.xslt new file mode 100644 index 0000000..21ba11d --- /dev/null +++ b/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-in-xsl.xslt
@@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + +<xsl:template match="page"> + <html> + <head> + <title> Test XSLT </title> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + <script> + // The page is expected to have 'oversized-images' threshold + // set to 2.0, i.e. images with actual_size / display_size ratio + // > 2.0 should be replaced with placeholder images. A violation + // report is also expected to be generated. + + async_test(t => { + new ReportingObserver(t.step_func_done((reports, _) => { + assert_equals(reports.length, 1); + const report = reports[0]; + assert_equals(report.type, 'document-policy-violation'); + assert_equals(report.body.featureId, 'oversized-images'); + assert_equals(report.body.disposition, 'enforce'); + }), {types: ['document-policy-violation']}).observe(); + }); + + </script> + </head> + <body bgcolor="#ffffff"> + <img src="resources/green-256x256.jpg" width="100"></img> + </body> + </html> +</xsl:template> + +</xsl:stylesheet> \ No newline at end of file
diff --git a/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-report-only-in-xsl.xslt b/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-report-only-in-xsl.xslt new file mode 100644 index 0000000..cab5fb18f --- /dev/null +++ b/third_party/blink/web_tests/http/tests/document-policy/resources/document-policy-report-only-in-xsl.xslt
@@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + +<xsl:template match="page"> + <html> + <head> + <title> Test XSLT </title> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + <script> + // The page is expected to have 'oversized-images' threshold + // set to 2.0 in report only mode, i.e. images with + // actual_size / display_size ratio > 2.0 should generate + // violation reports. + + async_test(t => { + new ReportingObserver(t.step_func_done((reports, _) => { + assert_equals(reports.length, 1); + const report = reports[0]; + assert_equals(report.type, 'document-policy-violation'); + assert_equals(report.body.featureId, 'oversized-images'); + assert_equals(report.body.disposition, 'report'); + }), {types: ['document-policy-violation']}).observe(); + }); + + </script> + </head> + <body bgcolor="#ffffff"> + <img src="resources/green-256x256.jpg" width="100"></img> + </body> + </html> +</xsl:template> + +</xsl:stylesheet> \ No newline at end of file
diff --git a/third_party/blink/web_tests/http/tests/document-policy/resources/green-256x256.jpg b/third_party/blink/web_tests/http/tests/document-policy/resources/green-256x256.jpg new file mode 100644 index 0000000..497ed770 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/document-policy/resources/green-256x256.jpg Binary files differ
diff --git a/third_party/blink/web_tests/virtual/cors-rfc1918/README.md b/third_party/blink/web_tests/virtual/cors-rfc1918/README.md new file mode 100644 index 0000000..489d641 --- /dev/null +++ b/third_party/blink/web_tests/virtual/cors-rfc1918/README.md
@@ -0,0 +1,2 @@ +This directory is for testing the CORS-RFC1918 implementation. +
diff --git a/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/cors-rfc1918/README.md b/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/cors-rfc1918/README.md new file mode 100644 index 0000000..8aef905e --- /dev/null +++ b/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/cors-rfc1918/README.md
@@ -0,0 +1 @@ +This directory is for testing the CORS-RFC1918 implementation.
diff --git a/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt b/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt new file mode 100644 index 0000000..09f4940 --- /dev/null +++ b/third_party/blink/web_tests/virtual/cors-rfc1918/external/wpt/fetch/cors-rfc1918/non-secure-context.window-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +PASS Local non secure page fetches local page. +PASS Public non secure page fetches local page. +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/cors-rfc1918/http/tests/security/cors-rfc1918/README.txt b/third_party/blink/web_tests/virtual/cors-rfc1918/http/tests/security/cors-rfc1918/README.txt deleted file mode 100644 index eea20f1a..0000000 --- a/third_party/blink/web_tests/virtual/cors-rfc1918/http/tests/security/cors-rfc1918/README.txt +++ /dev/null
@@ -1 +0,0 @@ -This directory is for testing the Blink-side CORS-RFC1918 implementation.
diff --git a/third_party/blink/web_tests/webgpu/README.md b/third_party/blink/web_tests/webgpu/README.md index 2007a973..a58e700e 100644 --- a/third_party/blink/web_tests/webgpu/README.md +++ b/third_party/blink/web_tests/webgpu/README.md
@@ -2,13 +2,10 @@ The WebGPU conformance test suite (CTS) is developed at <https://github.com/gpuweb/cts>. It is written in TypeScript and compiled to -JavaScript to run as part of WPT. It currently has two branches: - -- `main`: Tests which do not use GLSL shaders. -- `glsl-dependent`: With additional tests that use GLSL shaders compiled to SPIR-V. +JavaScript to run as part of WPT. The `roll_webgpu_cts.sh` script in this directory rolls Chromium's -`third_party/webgpu-cts/src/` to the latest `glsl-dependent` revision, builds +`third_party/webgpu-cts/src/` to the latest revision, builds it, and saves the built files into `.../wpt_internal/webgpu/`. Once this is done, `.../wpt_internal/webgpu/cts.html` must also be regenerated. This is done with the `regenerate_internal_cts_html.sh` script. @@ -24,24 +21,6 @@ ## How to roll the WebGPU CTS into Chromium -1. Merge the cts `main` branch into `glsl-dependent` if it hasn't been - done recently (or just ask kainino@ to do this). - 1. Check out the `glsl-dependent` branch in a local checkout. - 1. `git merge main`, fix any immediate conflicts, and finish merge. - 1. Push `glsl-dependent` to your own fork of `gpuweb/cts`. - 1. Open PR from `you:glsl-dependent` to `gpuweb:glsl-dependent`. - 1. Push to your fork. - 1. CI may fail. Fix the branch build if needed. - 1. `npm install --frozen-lockfile` - 1. Fixes to make `npx grunt pre` pass. - 1. Commit fixes and push to your fork. - 1. Get review (specifically on the build-fix commit if any). - 1. (Ideally) **don't** click the merge button. Push your branch directly to - `gpuweb:glsl-dependent` to keep the nice merge history. This will not - bypass the CI and review checks. - 1. Wait for - [Chromium's mirror](https://chromium.googlesource.com/external/github.com/gpuweb/cts/+log/refs/heads/glsl-dependent) - to pick up the changes (_usually_ <10 minutes). 1. Run `third_party/blink/web_tests/webgpu/roll_webgpu_cts.sh`. 1. Repeat until regeneration succeeds: 1. Run `third_party/blink/web_tests/webgpu/regenerate_internal_cts_html.sh`. @@ -81,5 +60,4 @@ This is not necessary for the roll process, but if you want to run a test locally with `--enable-unsafe-webgpu`, you can easily do so here: -* <https://gpuweb-cts-glsl.github.io/standalone/> (`glsl-dependent` branch) -* <https://gpuweb.github.io/cts/standalone/> (`main` branch) +* <https://gpuweb.github.io/cts/standalone/>
diff --git a/third_party/blink/web_tests/webgpu/roll_webgpu_cts.sh b/third_party/blink/web_tests/webgpu/roll_webgpu_cts.sh index c6cc40c..1255de9 100755 --- a/third_party/blink/web_tests/webgpu/roll_webgpu_cts.sh +++ b/third_party/blink/web_tests/webgpu/roll_webgpu_cts.sh
@@ -3,9 +3,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# This tool rolls the latest webgpu-cts glsl-dependent branch into +# This tool rolls the latest WebGPU CTS revision into # wpt_internal/webgpu/. It does the following: -# - Updates Chromium's DEPS to the latest origin/glsl-dependent. +# - Updates Chromium's DEPS third_party/webgpu-cts to the latest origin/main. # - Runs gclient sync. # - Builds the CTS (requires a local installation of node+npm). # - Syncs the built out-wpt/ directory into wpt_internal/webgpu/. @@ -47,12 +47,12 @@ pushd third_party/webgpu-cts/src > /dev/null npm install --frozen-lockfile - npx grunt wpt # build third_party/webgpu-cts/src/out-wpt/ + npm run wpt # build third_party/webgpu-cts/src/out-wpt/ popd > /dev/null } -roll_cts_to origin/glsl-dependent +roll_cts_to origin/main rsync -au --del \ third_party/webgpu-cts/src/out-wpt/{common,webgpu} \ third_party/blink/web_tests/wpt_internal/webgpu/
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/glsl.js b/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/glsl.js deleted file mode 100644 index 68e7826..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/glsl.js +++ /dev/null
@@ -1,35 +0,0 @@ -/** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ import { assert, unreachable } from './util/util.js'; - -/** Whether we've tried to load glslang or not. */ -let glslangAttempted = false; -/** Glslang instance if it has loaded, undefined if it hasn't (or failed). */ -let glslangInstance; - -export async function initGLSL() { - if (glslangAttempted) { - assert(glslangInstance !== undefined, 'glslang is not available'); - } else { - glslangAttempted = true; - const glslangPath = '../../third_party/glslang_js/lib/glslang.js'; - let glslangModule; - try { - glslangModule = (await import(glslangPath)).default; - } catch (ex) { - unreachable('glslang is not available'); - } - - const glslang = await glslangModule(); - glslangInstance = glslang; - } -} - -export function compileGLSL(glsl, shaderType, genDebug, spirvVersion) { - assert( - glslangInstance !== undefined, - 'GLSL compiler is not instantiated. Run `await initGLSL()` first' - ); - - return glslangInstance.compileGLSL(glsl.trimLeft(), shaderType, genDebug, spirvVersion); -}
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/version.js b/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/version.js index 8411958..b2a5605 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/version.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/common/framework/version.js
@@ -1,3 +1,3 @@ // AUTO-GENERATED - DO NOT EDIT. See tools/gen_version. -export const version = 'a8196844ac6228fea3560b82d29e01fed2fbf13a'; +export const version = '3c2fe3888658d82b47ca831d59a2e07579619c2d';
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html index 56679f9..9c2abcd 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html +++ b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
@@ -212,7 +212,6 @@ <meta name=variant content='?q=webgpu:api,validation,vertex_state:*'> <meta name=variant content='?q=webgpu:examples:*'> <meta name=variant content='?q=webgpu:idl,constants,flags:*'> -<meta name=variant content='?q=webgpu:shader,execution,robust_access:*'> <meta name=variant content='?q=webgpu:shader,execution,robust_access_vertex:*'> <meta name=variant content='?q=webgpu:util,texture,texelData:unorm_texel_data_in_shader:format="r8unorm";*'> <meta name=variant content='?q=webgpu:util,texture,texelData:unorm_texel_data_in_shader:format="rg8unorm";*'>
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/LICENSE b/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/LICENSE deleted file mode 100644 index 8b2e821..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/LICENSE +++ /dev/null
@@ -1,25 +0,0 @@ -Copyright (c) 2015-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS -KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS -SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT - https://www.khronos.org/registry/ - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/OWNERS b/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/OWNERS deleted file mode 100644 index 858ef76..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -# This directory already inherits owner '*', so these owners are informational. -kainino@chromium.org -cwallez@chromium.org -enga@chromium.org
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/README.chromium b/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/README.chromium deleted file mode 100644 index 4d7d784..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/README.chromium +++ /dev/null
@@ -1,17 +0,0 @@ -Name: JS+WASM build of glslang (Khronos reference front-end for GLSL and ESSL) -Short Name: glslang.js -URL: https://github.com/kainino0x/-webgpu-glslang -Version: 0.0.15 -Revision: 6f3bd3ec25393a41a090b4644935336b5430cb23 -Security Critical: no -License: MIT -License File: LICENSE - -Description: -JS+WASM build of glslang. - -glslang is an OpenGL and OpenGL ES shader front end and validator. - -See https://github.com/kainino0x/glslang.js for info on rebuilding. -The latest binary was built with `build.sh` on macOS with Emscripten 1.39.7 -and uploaded to CIPD with `cipd create --pkg-def cipd.yaml`.
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/cipd.yaml b/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/cipd.yaml deleted file mode 100644 index 46b51f2..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/cipd.yaml +++ /dev/null
@@ -1,7 +0,0 @@ -package: chromium/third_party/glslang_js -description: 'JS+WASM build of glslang (Khronos reference front-end for GLSL and ESSL)' -data: - - file: lib/glslang.js - - file: lib/glslang.wasm -# Copy instead of symlink so that these files are captured properly in a test isolate. -install_mode: copy
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/lib/.gitignore b/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/lib/.gitignore deleted file mode 100644 index 87bf7565..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/third_party/glslang_js/lib/.gitignore +++ /dev/null
@@ -1,2 +0,0 @@ -/glslang.js -/glslang.wasm
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js index 14498657..25bf3da 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/buffer_sync_test.js
@@ -243,4 +243,12 @@ bufferData[0] = expectedValue; this.expectContents(buffer, bufferData); } + + verifyDataTwoValidValues(buffer, expectedValue1, expectedValue2) { + const bufferData1 = new Uint32Array(1); + bufferData1[0] = expectedValue1; + const bufferData2 = new Uint32Array(1); + bufferData2[0] = expectedValue2; + this.expectContentsTwoValidValues(buffer, bufferData1, bufferData2); + } }
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/ww.spec.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/ww.spec.js index b0cedc3a..7c6c8ea 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/ww.spec.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/operation/memory_sync/buffer/ww.spec.js
@@ -12,7 +12,7 @@ - if pass type is the same, x= {single pass, separate passes} (note: render has loose guarantees) - if not single pass, x= writes in {same cmdbuf, separate cmdbufs, separate submits, separate queues} `; -import { poptions, params } from '../../../../../common/framework/params_builder.js'; +import { pbool, poptions, params } from '../../../../../common/framework/params_builder.js'; import { makeTestGroup } from '../../../../../common/framework/test_group.js'; import { kAllWriteOps, BufferSyncTest } from './buffer_sync_test.js'; @@ -84,7 +84,60 @@ a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected data in buffer is either 1 or 2. It may use bundle in each draw.` ) - .unimplemented(); + .params(params().combine(pbool('firstDrawUseBundle')).combine(pbool('secondDrawUseBundle'))) + .fn(async t => { + const { firstDrawUseBundle, secondDrawUseBundle } = t.params; + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); + + const useBundle = [firstDrawUseBundle, secondDrawUseBundle]; + for (let i = 0; i < 2; ++i) { + const renderEncoder = useBundle[i] + ? t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'], + }) + : passEncoder; + const pipeline = t.createStorageWriteRenderPipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + if (useBundle[i]) passEncoder.executeBundles([renderEncoder.finish()]); + } + + passEncoder.endPass(); + t.device.defaultQueue.submit([encoder.finish()]); + t.verifyDataTwoValidValues(buffer, 1, 2); + }); + +g.test('two_draws_in_the_same_render_bundle') + .desc( + `Test write-after-write operations in the same render bundle. The first write will write 1 into + a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected + data in buffer is either 1 or 2.` + ) + .fn(async t => { + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const passEncoder = t.beginSimpleRenderPass(encoder); + const renderEncoder = t.device.createRenderBundleEncoder({ + colorFormats: ['rgba8unorm'], + }); + + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteRenderPipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + renderEncoder.setPipeline(pipeline); + renderEncoder.setBindGroup(0, bindGroup); + renderEncoder.draw(1, 1, 0, 0); + } + + passEncoder.executeBundles([renderEncoder.finish()]); + passEncoder.endPass(); + t.device.defaultQueue.submit([encoder.finish()]); + t.verifyDataTwoValidValues(buffer, 1, 2); + }); g.test('two_dispatches_in_the_same_compute_pass') .desc( @@ -92,4 +145,20 @@ a storage buffer. The second write will write 2 into the same buffer in the same pass. Expected data in buffer is 2.` ) - .unimplemented(); + .fn(async t => { + const buffer = await t.createBufferWithValue(0); + const encoder = t.device.createCommandEncoder(); + const pass = encoder.beginComputePass(); + + for (let i = 0; i < 2; ++i) { + const pipeline = t.createStorageWriteComputePipeline(i + 1); + const bindGroup = t.createBindGroup(pipeline, buffer); + pass.setPipeline(pipeline); + pass.setBindGroup(0, bindGroup); + pass.dispatch(1); + } + + pass.endPass(); + t.device.defaultQueue.submit([encoder.finish()]); + t.verifyData(buffer, 2); + });
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/validation/createRenderPipeline.spec.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/validation/createRenderPipeline.spec.js index 30ca11e..0d2036ed 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/validation/createRenderPipeline.spec.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/api/validation/createRenderPipeline.spec.js
@@ -21,9 +21,45 @@ const format = colorStates.length ? colorStates[0].format : 'rgba8unorm'; + let fragColorType; + let suffix; + if (format.endsWith('sint')) { + fragColorType = 'i32'; + suffix = ''; + } else if (format.endsWith('uint')) { + fragColorType = 'u32'; + suffix = 'u'; + } else { + fragColorType = 'f32'; + suffix = '.0'; + } + return { - vertexStage: this.getVertexStage(), - fragmentStage: this.getFragmentStage(format), + vertexStage: { + module: this.device.createShaderModule({ + code: ` + [[builtin(position)]] var<out> Position : vec4<f32>; + + [[stage(vertex)]] fn main() -> void { + Position = vec4<f32>(0.0, 0.0, 0.0, 1.0); + }`, + }), + + entryPoint: 'main', + }, + + fragmentStage: { + module: this.device.createShaderModule({ + code: ` + [[location(0)]] var<out> fragColor : vec4<${fragColorType}>; + [[stage(fragment)]] fn main() -> void { + fragColor = vec4<${fragColorType}>(0${suffix}, 1${suffix}, 0${suffix}, 1${suffix}); + }`, + }), + + entryPoint: 'main', + }, + layout: this.getPipelineLayout(), primitiveTopology, colorStates, @@ -32,45 +68,6 @@ }; } - getVertexStage() { - return { - module: this.makeShaderModule('vertex', { - glsl: ` - #version 450 - void main() { - gl_Position = vec4(0.0, 0.0, 0.0, 1.0); - } - `, - }), - - entryPoint: 'main', - }; - } - - getFragmentStage(format) { - let fragColorType; - if (format.endsWith('sint')) { - fragColorType = 'ivec4'; - } else if (format.endsWith('uint')) { - fragColorType = 'uvec4'; - } else { - fragColorType = 'vec4'; - } - - const glsl = ` - #version 450 - layout(location = 0) out ${fragColorType} fragColor; - void main() { - fragColor = ${fragColorType}(0.0, 1.0, 0.0, 1.0); - } - `; - - return { - module: this.makeShaderModule('fragment', { glsl }), - entryPoint: 'main', - }; - } - getPipelineLayout() { return this.device.createPipelineLayout({ bindGroupLayouts: [] }); }
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/gpu_test.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/gpu_test.js index c7dce0de..120f0e4 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/gpu_test.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/gpu_test.js
@@ -1,7 +1,6 @@ /** * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts **/ import { Fixture } from '../common/framework/fixture.js'; -import { compileGLSL, initGLSL } from '../common/framework/glsl.js'; import { attemptGarbageCollection } from '../common/framework/util/collect_garbage.js'; import { assert } from '../common/framework/util/util.js'; @@ -33,7 +32,6 @@ async init() { await super.init(); - await initGLSL(); this.provider = await devicePool.reserve(); } @@ -89,16 +87,6 @@ } } - makeShaderModule(stage, code) { - // If both are provided, always choose WGSL. (Can change this if needed.) - if ('wgsl' in code) { - return this.device.createShaderModule({ code: code.wgsl }); - } else { - const spirv = compileGLSL(code.glsl, stage, false); - return this.device.createShaderModule({ code: spirv }); - } - } - createCopyForMapRead(src, srcOffset, size) { assert(srcOffset % 4 === 0); assert(size % 4 === 0); @@ -132,10 +120,6 @@ } expectContents(src, expected, srcOffset = 0) { - this.expectSubContents(src, srcOffset, expected); - } - - expectSubContents(src, srcOffset, expected) { const { dst, begin, end } = this.createAlignedCopyForMapRead( src, expected.byteLength, @@ -155,6 +139,32 @@ }); } + // We can expand this function in order to support multiple valid values or two mixed vectors + // if needed. See the discussion at https://github.com/gpuweb/cts/pull/384#discussion_r533101429 + expectContentsTwoValidValues(src, expected1, expected2, srcOffset = 0) { + assert(expected1.byteLength === expected2.byteLength); + const { dst, begin, end } = this.createAlignedCopyForMapRead( + src, + expected1.byteLength, + srcOffset + ); + + this.eventualAsyncExpectation(async niceStack => { + const constructor = expected1.constructor; + await dst.mapAsync(GPUMapMode.READ); + const actual = new constructor(dst.getMappedRange()); + const check1 = this.checkBuffer(actual.subarray(begin, end), expected1); + const check2 = this.checkBuffer(actual.subarray(begin, end), expected2); + if (check1 !== undefined && check2 !== undefined) { + niceStack.message = `Expected one of the following two checks to succeed: + - ${check1} + - ${check2}`; + this.rec.expectationFailed(niceStack); + } + dst.destroy(); + }); + } + expectBuffer(actual, exp) { const check = this.checkBuffer(actual, exp); if (check !== undefined) {
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/listing.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/listing.js index 5d79159..505b598 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/listing.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/listing.js
@@ -635,14 +635,6 @@ "file": [ "shader", "execution", - "robust_access" - ], - "description": "Tests to check datatype clamping in shaders is correctly implemented including vector / matrix indexing\n\n- For each shader stage (TODO):\n - For various memory spaces (storage, uniform, global, function local, shared memory, TODO(in, out))\n - For dynamic vs. non dynamic buffer bindings (when testing storage or uniform)\n - For many data types (float, uint, int) x (sized array, unsized array, vec, mat...)\n - For various types of accesses (read, write, atomic ops)\n - For various indices in bounds and out of bounds of the data type\n - Check that accesses are in bounds or discarded (as much as we can tell)\n\nTODO add tests to check that texel fetch operations stay in-bounds." - }, - { - "file": [ - "shader", - "execution", "robust_access_vertex" ], "description": "Test vertex attributes behave correctly (no crash / data leak) when accessed out of bounds\n\nTest coverage:\n\nThe following will be parameterized (all combinations tested):\n\n1) Draw call indexed? (false / true)\n - Run the draw call using an index buffer\n\n2) Draw call indirect? (false / true)\n - Run the draw call using an indirect buffer\n\n3) Draw call parameter (vertexCount, firstVertex, indexCount, firstIndex, baseVertex, instanceCount,\n firstInstance)\n - The parameter which will go out of bounds. Filtered depending on if the draw call is indexed.\n\n4) Attribute type (float, vec2, vec3, vec4)\n - The input attribute type in the vertex shader\n\n5) Error scale (1, 4, 10^2, 10^4, 10^6)\n - Offset to add to the correct draw call parameter\n\n6) Additional vertex buffers (0, +4)\n - Tests that no OOB occurs if more vertex buffers are used\n\nThe tests will also have another vertex buffer bound for an instanced attribute, to make sure\ninstanceCount / firstInstance are tested.\n\nThe tests will include multiple attributes per vertex buffer.\n\nThe vertex buffers will be filled by repeating a few chosen values until the end of the buffer.\n\nThe test will run a render pipeline which verifies the following:\n1) All vertex attribute values occur in the buffer or are zero\n2) All gl_VertexIndex values are within the index buffer or 0\n\nTODO:\n\nA suppression may be needed for d3d12 on tests that have non-zero baseVertex, since d3d12 counts\nfrom 0 instead of from baseVertex (will fail check for gl_VertexIndex).\n\nVertex buffer contents could be randomized to prevent the case where a previous test creates\na similar buffer to ours and the OOB-read seems valid. This should be deterministic, which adds\nmore complexity that we may not need."
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access.spec.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access.spec.js deleted file mode 100644 index 07c2d37..0000000 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access.spec.js +++ /dev/null
@@ -1,432 +0,0 @@ -/** - * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts - **/ export const description = ` -Tests to check datatype clamping in shaders is correctly implemented including vector / matrix indexing - -- For each shader stage (TODO): - - For various memory spaces (storage, uniform, global, function local, shared memory, TODO(in, out)) - - For dynamic vs. non dynamic buffer bindings (when testing storage or uniform) - - For many data types (float, uint, int) x (sized array, unsized array, vec, mat...) - - For various types of accesses (read, write, atomic ops) - - For various indices in bounds and out of bounds of the data type - - Check that accesses are in bounds or discarded (as much as we can tell) - -TODO add tests to check that texel fetch operations stay in-bounds. -`; -import { params, poptions } from '../../../common/framework/params_builder.js'; -import { makeTestGroup } from '../../../common/framework/test_group.js'; -import { assert } from '../../../common/framework/util/util.js'; -import { GPUTest } from '../../gpu_test.js'; - -export const g = makeTestGroup(GPUTest); - -// Utilities that should probably live in some shared place. -function copyArrayBuffer(src) { - const dst = new ArrayBuffer(src.byteLength); - new Uint8Array(dst).set(new Uint8Array(src)); - return dst; -} - -const kUintMax = 4294967295; -const kIntMax = 2147483647; - -// A small utility to test shaders: -// - it wraps the source into a small harness that checks the runTest() function returns 0. -// - it runs the shader with the testBindings set as bindgroup 0. -// -// The shader also has access to a uniform value that's equal to 1u to avoid constant propagation -// in the shader compiler. -function runShaderTest(t, stage, testSource, testBindings) { - assert(stage === GPUShaderStage.COMPUTE, 'Only know how to deal with compute for now'); - - const constantsBuffer = t.device.createBuffer({ - mappedAtCreation: true, - size: 4, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM, - }); - - const constantsData = new Uint32Array(constantsBuffer.getMappedRange()); - constantsData[0] = 1; - constantsBuffer.unmap(); - - const resultBuffer = t.device.createBuffer({ - size: 4, - usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE, - }); - - const source = `#version 450 - layout(std140, set = 1, binding = 0) uniform Constants { - uint one; - }; - layout(std430, set = 1, binding = 1) buffer Result { - uint result; - }; - - ${testSource} - - void main() { - result = runTest(); - }`; - - const pipeline = t.device.createComputePipeline({ - computeStage: { - entryPoint: 'main', - module: t.makeShaderModule('compute', { glsl: source }), - }, - }); - - const group = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(1), - entries: [ - { binding: 0, resource: { buffer: constantsBuffer } }, - { binding: 1, resource: { buffer: resultBuffer } }, - ], - }); - - const testGroup = t.device.createBindGroup({ - layout: pipeline.getBindGroupLayout(0), - entries: testBindings, - }); - - const encoder = t.device.createCommandEncoder(); - const pass = encoder.beginComputePass(); - pass.setPipeline(pipeline); - pass.setBindGroup(0, testGroup); - pass.setBindGroup(1, group); - pass.dispatch(1); - pass.endPass(); - - t.queue.submit([encoder.finish()]); - - t.expectContents(resultBuffer, new Uint32Array([0])); -} - -// The definition of base types for aggregate types, for example float, uint, etc. - -const baseTypes = { - // TODO bools - uint: { - name: 'uint', - byteSize: 4, - glslPrefix: 'u', - glslZero: '0u', - fillBuffer(data, zeroStart, size) { - const typedData = new Uint32Array(data); - typedData.fill(42); - for (let i = 0; i < size / 4; i++) { - typedData[zeroStart / 4 + i] = 0; - } - }, - }, - - int: { - name: 'int', - byteSize: 4, - glslPrefix: 'i', - glslZero: '0', - fillBuffer(data, zeroStart, size) { - const typedData = new Int32Array(data); - typedData.fill(42); - for (let i = 0; i < size / 4; i++) { - typedData[zeroStart / 4 + i] = 0; - } - }, - }, - - float: { - name: 'float', - byteSize: 4, - glslPrefix: '', - glslZero: '0.0f', - fillBuffer(data, zeroStart, size) { - const typedData = new Float32Array(data); - typedData.fill(42); - for (let i = 0; i < size / 4; i++) { - typedData[zeroStart / 4 + i] = 0; - } - }, - }, - - bool: { - name: 'bool', - byteSize: 4, - glslPrefix: 'b', - glslZero: 'false', - fillBuffer(data, zeroStart, size) { - const typedData = new Uint32Array(data); - typedData.fill(42); - for (let i = 0; i < size / 4; i++) { - typedData[zeroStart / 4 + i] = 0; - } - }, - }, -}; - -// The definition of aggregate types. - -const typeParams = (() => { - const types = {}; - for (const baseTypeName of Object.keys(baseTypes)) { - const baseType = baseTypes[baseTypeName]; - - // Arrays - types[`${baseTypeName}_sizedArray`] = { - declaration: `${baseTypeName} data[3]`, - length: 3, - // TODO should really be std140Length: 2 * 4 + 1? - std140Length: 3 * 4, - std430Length: 3, - zero: baseType.glslZero, - baseType, - }; - - types[`${baseTypeName}_unsizedArray`] = { - declaration: `${baseTypeName} data[]`, - length: 3, - std140Length: 0, // Unused - std430Length: 3, - zero: baseType.glslZero, - baseType, - isUnsizedArray: true, - }; - - // Vectors - for (let dimension = 2; dimension <= 4; dimension++) { - types[`${baseTypeName}_vector${dimension}`] = { - declaration: `${baseType.glslPrefix}vec${dimension} data`, - length: dimension, - std140Length: dimension, - std430Length: dimension, - zero: baseType.glslZero, - baseType, - }; - } - } - - // Matrices, there are only float matrices in GLSL. - for (const transposed of [false, true]) { - for (let numColumns = 2; numColumns <= 4; numColumns++) { - for (let numRows = 2; numRows <= 4; numRows++) { - const majorDim = transposed ? numRows : numColumns; - const minorDim = transposed ? numColumns : numRows; - - const std140SizePerMinorDim = 4; - const std430SizePerMinorDim = minorDim === 3 ? 4 : minorDim; - - let typeName = `mat${numColumns}`; - if (numColumns !== numRows) { - typeName += `x${numRows}`; - } - - types[(transposed ? 'transposed_' : '') + typeName] = { - declaration: (transposed ? 'layout(row_major) ' : '') + `${typeName} data`, - length: numColumns, - // TODO should really be std140Length: std140SizePerMinorDim * (majorDim - 1) + minorDim, - std140Length: std140SizePerMinorDim * majorDim, - std430Length: std430SizePerMinorDim * (majorDim - 1) + minorDim, - zero: `vec${numRows}(0.0f)`, - baseType: baseTypes['float'], - }; - } - } - } - - return types; -})(); - -g.test('bufferMemory') - .params( - params() - .combine(poptions('type', Object.keys(typeParams))) - .combine([ - { memory: 'storage', access: 'read' }, - { memory: 'storage', access: 'write' }, - { memory: 'storage', access: 'atomic' }, - { memory: 'uniform', access: 'read' }, - { memory: 'global', access: 'read' }, - { memory: 'global', access: 'write' }, - { memory: 'function', access: 'read' }, - { memory: 'function', access: 'write' }, - { memory: 'shared', access: 'read' }, - { memory: 'shared', access: 'write' }, - ]) - - // Unsized arrays are only supported with SSBOs - .unless(p => typeParams[p.type].isUnsizedArray === true && p.memory !== 'storage') - // Atomics are only supported with integers - .unless( - p => p.access === 'atomic' && !['uint', 'int'].includes(typeParams[p.type].baseType.name) - ) - - // Layouts are only supported on interfaces - .unless( - p => p.type.indexOf('transposed') !== -1 && !['uniform', 'storage'].includes(p.memory) - ) - ) - .fn(async t => { - const { memory, access } = t.params; - - const type = typeParams[t.params.type]; - const baseType = type.baseType; - - const usesCanary = ['global', 'function', 'shared'].includes(memory); - const usesBuffer = ['uniform', 'storage'].includes(memory); - - let globalSource = ''; - let testFunctionSource = ''; - let bufferByteSize = 0; - - // Declare the data that will be accessed to check robust access, as a buffer or a struct - // in the global scope or inside the test function itself. - const structDecl = ` - struct S { - uint startCanary[10]; - ${type.declaration}; - uint endCanary[10]; - };`; - - switch (memory) { - case 'uniform': - globalSource += ` - layout(std140, set = 0, binding = 0) uniform TestData { - ${type.declaration}; - } s;`; - bufferByteSize = baseType.byteSize * type.std140Length; - break; - - case 'storage': - globalSource += ` - layout(std430, set = 0, binding = 0) buffer TestData { - ${type.declaration}; - } s;`; - bufferByteSize = baseType.byteSize * type.std430Length; - break; - - case 'global': - globalSource += ` - ${structDecl} - S s;`; - break; - - case 'function': - globalSource += `${structDecl}`; - testFunctionSource += 'S s;'; - break; - - case 'shared': - globalSource += ` - ${structDecl} - shared S s;`; - break; - } - - // Build the test function that will do the tests. - - // If we use a local canary declared in the shader, initialize it. - if (usesCanary) { - testFunctionSource += ` - for (uint i = 0; i < 10; i++) { - s.startCanary[i] = s.endCanary[i] = 0xFFFFFFFFu; - }`; - } - - const indicesToTest = [ - // Write to the inside of the type so we can check the size computations were correct. - '0', - `${type.length} - 1`, - - // Check exact bounds - '-1', - `${type.length}`, - - // Check large offset - '-1000000', - '1000000', - - // Check with max uint - `${kUintMax}`, - `-1 * ${kUintMax}`, - - // Check with max int - `${kIntMax}`, - `-1 * ${kIntMax}`, - ]; - - // Produce the accesses to the variable. - for (const indexToTest of indicesToTest) { - // TODO check with constants too if WGSL allows it. - const index = `(${indexToTest}) * one`; - - switch (access) { - case 'read': - testFunctionSource += ` - if(s.data[${index}] != ${type.zero}) { - return __LINE__; - }`; - break; - - case 'write': - testFunctionSource += `s.data[${index}] = ${type.zero};`; - break; - - case 'atomic': - testFunctionSource += `atomicAdd(s.data[${index}], 1);`; - break; - } - } - - // Check that the canaries haven't been modified - if (usesCanary) { - testFunctionSource += ` - for (uint i = 0; i < 10; i++) { - if (s.startCanary[i] != 0xFFFFFFFFu) { - return __LINE__; - } - if (s.endCanary[i] != 0xFFFFFFFFu) { - return __LINE__; - } - }`; - } - - // Run the test - - // First aggregate the test source - const testSource = ` - ${globalSource} - - uint runTest() { - ${testFunctionSource} - return 0; - }`; - - // Run it. - if (usesBuffer) { - // Create a buffer that contains zeroes in the allowed access area, and 42s everywhere else. - const testBuffer = t.device.createBuffer({ - mappedAtCreation: true, - size: 512, - usage: - GPUBufferUsage.COPY_SRC | - GPUBufferUsage.UNIFORM | - GPUBufferUsage.STORAGE | - GPUBufferUsage.COPY_DST, - }); - - const testInit = testBuffer.getMappedRange(); - baseType.fillBuffer(testInit, 256, bufferByteSize); - const testInitCopy = copyArrayBuffer(testInit); - testBuffer.unmap(); - - // Run the shader, accessing the buffer. - runShaderTest(t, GPUShaderStage.COMPUTE, testSource, [ - { binding: 0, resource: { buffer: testBuffer, offset: 256, size: bufferByteSize } }, - ]); - - // Check that content of the buffer outside of the allowed area didn't change. - t.expectSubContents(testBuffer, 0, new Uint8Array(testInitCopy.slice(0, 256))); - const dataEnd = 256 + bufferByteSize; - t.expectSubContents(testBuffer, dataEnd, new Uint8Array(testInitCopy.slice(dataEnd, 512))); - } else { - runShaderTest(t, GPUShaderStage.COMPUTE, testSource, []); - } - });
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js index 3859d63..9156056 100644 --- a/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js +++ b/third_party/blink/web_tests/wpt_internal/webgpu/webgpu/shader/execution/robust_access_vertex.spec.js
@@ -145,18 +145,14 @@ size -= 1; } const vertexBuffer = this.device.createBuffer({ - mappedAtCreation: true, size, - usage: GPUBufferUsage.VERTEX, + usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, }); - const vertexMapping = vertexBuffer.getMappedRange(); - if (!partialLastNumber) { - new Float32Array(vertexMapping).set(vertexArray); - } else { - new Uint8Array(vertexMapping).set(new Uint8Array(vertexArray.buffer).slice(0, size)); + if (partialLastNumber) { + size -= 3; } - vertexBuffer.unmap(); + this.device.defaultQueue.writeBuffer(vertexBuffer, 0, vertexArray, size); return vertexBuffer; } @@ -164,11 +160,10 @@ generateIndexBuffer(indexArray) { const indexBuffer = this.device.createBuffer({ size: indexArray.byteLength, - usage: GPUBufferUsage.INDEX, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST, }); - new Uint16Array(indexBuffer.getMappedRange()).set(indexArray); - indexBuffer.unmap(); + this.device.defaultQueue.writeBuffer(indexBuffer, 0, indexArray); return indexBuffer; } @@ -218,28 +213,28 @@ const typeInfoMap = { float: { - format: 'float', + wgslType: 'f32', size: 4, validationFunc: 'return valid(v);', }, - vec2: { - format: 'float2', + float2: { + wgslType: 'vec2<f32>', size: 8, validationFunc: 'return valid(v.x) && valid(v.y);', }, - vec3: { - format: 'float3', + float3: { + wgslType: 'vec3<f32>', size: 12, validationFunc: 'return valid(v.x) && valid(v.y) && valid(v.z);', }, - vec4: { - format: 'float4', + float4: { + wgslType: 'vec4<f32>', size: 16, validationFunc: `return valid(v.x) && valid(v.y) && valid(v.z) && valid(v.w) || - v.x == 0 && v.y == 0 && v.z == 0 && (v.w == 0.0 || v.w == 1.0);`, + v.x == 0.0 && v.y == 0.0 && v.z == 0.0 && (v.w == 0.0 || v.w == 1.0);`, }, }; @@ -266,8 +261,8 @@ const p = t.params; const typeInfo = typeInfoMap[p.type]; - // Number of vertices to draw - const numVertices = 3; + // Number of vertices to draw, odd so that uint16 index buffers are aligned to size 4 + const numVertices = 4; // Each buffer will be bound to this many attributes (2 would mean 2 attributes per buffer) const attributesPerBuffer = 2; // Make an array big enough for the vertices, attributes, and size of each element @@ -304,7 +299,7 @@ let currAttribute = 0; for (let i = 0; i < bufferContents.length; i++) { for (let j = 0; j < attributesPerBuffer; j++) { - layoutStr += `layout(location=${currAttribute}) in ${p.type} a_${currAttribute};\n`; + layoutStr += `[[location(${currAttribute})]] var<in> a_${currAttribute} : ${typeInfo.wgslType};\n`; attributeNames.push(`a_${currAttribute}`); currAttribute++; } @@ -324,7 +319,7 @@ .map((_, i) => ({ shaderLocation: currAttribute++, offset: i * typeInfo.size, - format: typeInfo.format, + format: p.type, })), }); } @@ -336,47 +331,60 @@ vertexIndexOffset += p.errorScale; } - // Construct pipeline that outputs a red fragment, only if we notice any invalid values - const vertexModule = t.makeShaderModule('vertex', { - glsl: ` - #version 450 - ${layoutStr} + const pipeline = t.device.createRenderPipeline({ + vertexStage: { + module: t.device.createShaderModule({ + code: ` + [[builtin(position)]] var<out> Position : vec4<f32>; + [[builtin(vertex_idx)]] var<in> VertexIndex : u32; + ${layoutStr} - bool valid(float f) { - return ${validValues.map(v => `f == ${v}`).join(' || ')}; - } + fn valid(f : f32) -> bool { + return ${validValues.map(v => `f == ${v}.0`).join(' || ')}; + } - bool validationFunc(${p.type} v) { - ${typeInfo.validationFunc} - } + fn validationFunc(v : ${typeInfo.wgslType}) -> bool { + ${typeInfo.validationFunc} + } - void main() { - bool attributesInBounds = ${attributeNames.map(a => `validationFunc(${a})`).join(' && ')}; - bool indexInBounds = gl_VertexIndex == 0 || (gl_VertexIndex >= ${vertexIndexOffset} && - gl_VertexIndex < ${vertexIndexOffset + numVertices}); + [[stage(vertex)]] fn main() -> void { + var attributesInBounds : bool = ${attributeNames + .map(a => `validationFunc(${a})`) + .join(' && ')}; + var indexInBounds : bool = VertexIndex == 0u || + (VertexIndex >= ${vertexIndexOffset}u && + VertexIndex < ${vertexIndexOffset + numVertices}u); - if (attributesInBounds && (${!p.indexed} || indexInBounds)) { - // Success case, move the vertex out of the viewport - gl_Position = vec4(-1.0, 0.0, 0.0, 1.0); - } else { - // Failure case, move the vertex inside the viewport - gl_Position = vec4(0.0, 0.0, 0.0, 1.0); - } - } - `, - }); + if (attributesInBounds && (${!p.indexed} || indexInBounds)) { + # Success case, move the vertex out of the viewport + Position = vec4<f32>(-1.0, 0.0, 0.0, 1.0); + } else { + # Failure case, move the vertex inside the viewport + Position = vec4<f32>(0.0, 0.0, 0.0, 1.0); + } + }`, + }), - const fragmentModule = t.makeShaderModule('fragment', { - glsl: ` - #version 450 - precision mediump float; + entryPoint: 'main', + }, - layout(location = 0) out vec4 fragColor; + fragmentStage: { + module: t.device.createShaderModule({ + code: ` + [[location(0)]] var<out> fragColor : vec4<f32>; + [[stage(fragment)]] fn main() -> void { + fragColor = vec4<f32>(1.0, 0.0, 0.0, 1.0); + }`, + }), - void main() { - fragColor = vec4(1.0, 0.0, 0.0, 1.0); - } - `, + entryPoint: 'main', + }, + + primitiveTopology: 'point-list', + colorStates: [{ format: 'rgba8unorm' }], + vertexState: { + vertexBuffers, + }, }); // Pipeline setup, texture setup @@ -388,17 +396,6 @@ const colorAttachmentView = colorAttachment.createView(); - const pipeline = t.device.createRenderPipeline({ - vertexStage: { module: vertexModule, entryPoint: 'main' }, - fragmentStage: { module: fragmentModule, entryPoint: 'main' }, - primitiveTopology: 'point-list', - colorStates: [{ format: 'rgba8unorm', alphaBlend: {}, colorBlend: {} }], - vertexState: { - indexFormat: 'uint16', - vertexBuffers, - }, - }); - // Offset the draw call parameter we are testing by |errorScale| draw[p.drawCallTestParameter] += p.errorScale;
diff --git a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/aesv8-armx64.S b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/aesv8-armx64.S index 76b5803..13950f1 100644 --- a/third_party/boringssl/ios-aarch64/crypto/fipsmodule/aesv8-armx64.S +++ b/third_party/boringssl/ios-aarch64/crypto/fipsmodule/aesv8-armx64.S
@@ -620,20 +620,34 @@ add x7,x3,#32 mov w6,w5 csel x12,xzr,x12,lo + + // ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are + // affected by silicon errata #1742098 [0] and #1655431 [1], + // respectively, where the second instruction of an aese/aesmc + // instruction pair may execute twice if an interrupt is taken right + // after the first instruction consumes an input register of which a + // single 32-bit lane has been updated the last time it was modified. + // + // This function uses a counter in one 32-bit lane. The vmov lines + // could write to v1.16b and v18.16b directly, but that trips this bugs. + // We write to v6.16b and copy to the final register as a workaround. + // + // [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice + // [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice #ifndef __ARMEB__ rev w8, w8 #endif - orr v1.16b,v0.16b,v0.16b add w10, w8, #1 - orr v18.16b,v0.16b,v0.16b - add w8, w8, #2 orr v6.16b,v0.16b,v0.16b rev w10, w10 - mov v1.s[3],w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b b.ls Lctr32_tail rev w12, w8 + mov v6.s[3],w12 sub x2,x2,#3 // bias - mov v18.s[3],w12 + orr v18.16b,v6.16b,v6.16b b Loop3x_ctr32 .align 4 @@ -660,11 +674,11 @@ aese v1.16b,v16.16b aesmc v5.16b,v1.16b ld1 {v2.16b},[x0],#16 - orr v0.16b,v6.16b,v6.16b + add w9,w8,#1 aese v18.16b,v16.16b aesmc v18.16b,v18.16b ld1 {v3.16b},[x0],#16 - orr v1.16b,v6.16b,v6.16b + rev w9,w9 aese v4.16b,v17.16b aesmc v4.16b,v4.16b aese v5.16b,v17.16b @@ -673,8 +687,6 @@ mov x7,x3 aese v18.16b,v17.16b aesmc v17.16b,v18.16b - orr v18.16b,v6.16b,v6.16b - add w9,w8,#1 aese v4.16b,v20.16b aesmc v4.16b,v4.16b aese v5.16b,v20.16b @@ -689,21 +701,26 @@ aesmc v4.16b,v4.16b aese v5.16b,v21.16b aesmc v5.16b,v5.16b + // Note the logic to update v0.16b, v1.16b, and v1.16b is written to work + // around a bug in ARM Cortex-A57 and Cortex-A72 cores running in + // 32-bit mode. See the comment above. eor v19.16b,v19.16b,v7.16b - rev w9,w9 + mov v6.s[3], w9 aese v17.16b,v21.16b aesmc v17.16b,v17.16b - mov v0.s[3], w9 + orr v0.16b,v6.16b,v6.16b rev w10,w10 aese v4.16b,v22.16b aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 aese v5.16b,v22.16b aesmc v5.16b,v5.16b - mov v1.s[3], w10 - rev w12,w8 + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 aese v17.16b,v22.16b aesmc v17.16b,v17.16b - mov v18.s[3], w12 + orr v18.16b,v6.16b,v6.16b subs x2,x2,#3 aese v4.16b,v23.16b aese v5.16b,v23.16b
diff --git a/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S b/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S index ca84b23da3..87b4b0a 100644 --- a/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S +++ b/third_party/boringssl/ios-arm/crypto/fipsmodule/aesv8-armx32.S
@@ -630,20 +630,34 @@ add r7,r3,#32 mov r6,r5 movlo r12,#0 + + @ ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are + @ affected by silicon errata #1742098 [0] and #1655431 [1], + @ respectively, where the second instruction of an aese/aesmc + @ instruction pair may execute twice if an interrupt is taken right + @ after the first instruction consumes an input register of which a + @ single 32-bit lane has been updated the last time it was modified. + @ + @ This function uses a counter in one 32-bit lane. The + @ could write to q1 and q10 directly, but that trips this bugs. + @ We write to q6 and copy to the final register as a workaround. + @ + @ [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice + @ [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice #ifndef __ARMEB__ rev r8, r8 #endif - vorr q1,q0,q0 add r10, r8, #1 - vorr q10,q0,q0 - add r8, r8, #2 vorr q6,q0,q0 rev r10, r10 - vmov.32 d3[1],r10 + vmov.32 d13[1],r10 + add r8, r8, #2 + vorr q1,q6,q6 bls Lctr32_tail rev r12, r8 + vmov.32 d13[1],r12 sub r2,r2,#3 @ bias - vmov.32 d21[1],r12 + vorr q10,q6,q6 b Loop3x_ctr32 .align 4 @@ -670,11 +684,11 @@ .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 .byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1 vld1.8 {q2},[r0]! - vorr q0,q6,q6 + add r9,r8,#1 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 vld1.8 {q3},[r0]! - vorr q1,q6,q6 + rev r9,r9 .byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9 @@ -683,8 +697,6 @@ mov r7,r3 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 .byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10 - vorr q10,q6,q6 - add r9,r8,#1 .byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12 @@ -699,21 +711,26 @@ .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 + @ Note the logic to update q0, q1, and q1 is written to work + @ around a bug in ARM Cortex-A57 and Cortex-A72 cores running in + @ 32-bit mode. See the comment above. veor q11,q11,q7 - rev r9,r9 + vmov.32 d13[1], r9 .byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d1[1], r9 + vorr q0,q6,q6 rev r10,r10 .byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 + vmov.32 d13[1], r10 + rev r12,r8 .byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 - vmov.32 d3[1], r10 - rev r12,r8 + vorr q1,q6,q6 + vmov.32 d13[1], r12 .byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d21[1], r12 + vorr q10,q6,q6 subs r2,r2,#3 .byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15 .byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15
diff --git a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S index 24af2da..f8cd03d 100644 --- a/third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S +++ b/third_party/boringssl/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S
@@ -621,20 +621,34 @@ add x7,x3,#32 mov w6,w5 csel x12,xzr,x12,lo + + // ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are + // affected by silicon errata #1742098 [0] and #1655431 [1], + // respectively, where the second instruction of an aese/aesmc + // instruction pair may execute twice if an interrupt is taken right + // after the first instruction consumes an input register of which a + // single 32-bit lane has been updated the last time it was modified. + // + // This function uses a counter in one 32-bit lane. The vmov lines + // could write to v1.16b and v18.16b directly, but that trips this bugs. + // We write to v6.16b and copy to the final register as a workaround. + // + // [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice + // [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice #ifndef __ARMEB__ rev w8, w8 #endif - orr v1.16b,v0.16b,v0.16b add w10, w8, #1 - orr v18.16b,v0.16b,v0.16b - add w8, w8, #2 orr v6.16b,v0.16b,v0.16b rev w10, w10 - mov v1.s[3],w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b b.ls .Lctr32_tail rev w12, w8 + mov v6.s[3],w12 sub x2,x2,#3 // bias - mov v18.s[3],w12 + orr v18.16b,v6.16b,v6.16b b .Loop3x_ctr32 .align 4 @@ -661,11 +675,11 @@ aese v1.16b,v16.16b aesmc v5.16b,v1.16b ld1 {v2.16b},[x0],#16 - orr v0.16b,v6.16b,v6.16b + add w9,w8,#1 aese v18.16b,v16.16b aesmc v18.16b,v18.16b ld1 {v3.16b},[x0],#16 - orr v1.16b,v6.16b,v6.16b + rev w9,w9 aese v4.16b,v17.16b aesmc v4.16b,v4.16b aese v5.16b,v17.16b @@ -674,8 +688,6 @@ mov x7,x3 aese v18.16b,v17.16b aesmc v17.16b,v18.16b - orr v18.16b,v6.16b,v6.16b - add w9,w8,#1 aese v4.16b,v20.16b aesmc v4.16b,v4.16b aese v5.16b,v20.16b @@ -690,21 +702,26 @@ aesmc v4.16b,v4.16b aese v5.16b,v21.16b aesmc v5.16b,v5.16b + // Note the logic to update v0.16b, v1.16b, and v1.16b is written to work + // around a bug in ARM Cortex-A57 and Cortex-A72 cores running in + // 32-bit mode. See the comment above. eor v19.16b,v19.16b,v7.16b - rev w9,w9 + mov v6.s[3], w9 aese v17.16b,v21.16b aesmc v17.16b,v17.16b - mov v0.s[3], w9 + orr v0.16b,v6.16b,v6.16b rev w10,w10 aese v4.16b,v22.16b aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 aese v5.16b,v22.16b aesmc v5.16b,v5.16b - mov v1.s[3], w10 - rev w12,w8 + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 aese v17.16b,v22.16b aesmc v17.16b,v17.16b - mov v18.s[3], w12 + orr v18.16b,v6.16b,v6.16b subs x2,x2,#3 aese v4.16b,v23.16b aese v5.16b,v23.16b
diff --git a/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S b/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S index 5b168d0f..30c6525 100644 --- a/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S +++ b/third_party/boringssl/linux-arm/crypto/fipsmodule/aesv8-armx32.S
@@ -619,20 +619,34 @@ add r7,r3,#32 mov r6,r5 movlo r12,#0 + + @ ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are + @ affected by silicon errata #1742098 [0] and #1655431 [1], + @ respectively, where the second instruction of an aese/aesmc + @ instruction pair may execute twice if an interrupt is taken right + @ after the first instruction consumes an input register of which a + @ single 32-bit lane has been updated the last time it was modified. + @ + @ This function uses a counter in one 32-bit lane. The + @ could write to q1 and q10 directly, but that trips this bugs. + @ We write to q6 and copy to the final register as a workaround. + @ + @ [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice + @ [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice #ifndef __ARMEB__ rev r8, r8 #endif - vorr q1,q0,q0 add r10, r8, #1 - vorr q10,q0,q0 - add r8, r8, #2 vorr q6,q0,q0 rev r10, r10 - vmov.32 d3[1],r10 + vmov.32 d13[1],r10 + add r8, r8, #2 + vorr q1,q6,q6 bls .Lctr32_tail rev r12, r8 + vmov.32 d13[1],r12 sub r2,r2,#3 @ bias - vmov.32 d21[1],r12 + vorr q10,q6,q6 b .Loop3x_ctr32 .align 4 @@ -659,11 +673,11 @@ .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 .byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1 vld1.8 {q2},[r0]! - vorr q0,q6,q6 + add r9,r8,#1 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 vld1.8 {q3},[r0]! - vorr q1,q6,q6 + rev r9,r9 .byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9 @@ -672,8 +686,6 @@ mov r7,r3 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 .byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10 - vorr q10,q6,q6 - add r9,r8,#1 .byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12 @@ -688,21 +700,26 @@ .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 + @ Note the logic to update q0, q1, and q1 is written to work + @ around a bug in ARM Cortex-A57 and Cortex-A72 cores running in + @ 32-bit mode. See the comment above. veor q11,q11,q7 - rev r9,r9 + vmov.32 d13[1], r9 .byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d1[1], r9 + vorr q0,q6,q6 rev r10,r10 .byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 + vmov.32 d13[1], r10 + rev r12,r8 .byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 - vmov.32 d3[1], r10 - rev r12,r8 + vorr q1,q6,q6 + vmov.32 d13[1], r12 .byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d21[1], r12 + vorr q10,q6,q6 subs r2,r2,#3 .byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15 .byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15
diff --git a/third_party/gvr-android-sdk/display_synchronizer_jni.h b/third_party/gvr-android-sdk/display_synchronizer_jni.h index 2724329..db3eb0ac 100644 --- a/third_party/gvr-android-sdk/display_synchronizer_jni.h +++ b/third_party/gvr-android-sdk/display_synchronizer_jni.h
@@ -12,6 +12,7 @@ // 2. Use absolute path instead of relative path. // 3. Removed all helper functions such as: Create. // 4. Added function RegisterDisplaySynchronizerNatives at the end of this file. +// 5. Added "vr" as an argument to base::android::LazyGetClass. #ifndef com_google_vr_cardboard_DisplaySynchronizer_JNI #define com_google_vr_cardboard_DisplaySynchronizer_JNI @@ -35,8 +36,8 @@ // Leaking this jclass as we cannot use LazyInstance from some threads. std::atomic<jclass> g_DisplaySynchronizer_clazz __attribute__((unused)) (nullptr); -#define DisplaySynchronizer_clazz(env) \ - base::android::LazyGetClass(env, kDisplaySynchronizerClassPath, \ +#define DisplaySynchronizer_clazz(env) \ + base::android::LazyGetClass(env, kDisplaySynchronizerClassPath, "vr", \ &g_DisplaySynchronizer_clazz) } // namespace
diff --git a/third_party/gvr-android-sdk/gvr_api_jni.h b/third_party/gvr-android-sdk/gvr_api_jni.h index 96a1540f..a5be67b7 100644 --- a/third_party/gvr-android-sdk/gvr_api_jni.h +++ b/third_party/gvr-android-sdk/gvr_api_jni.h
@@ -14,6 +14,7 @@ // 4. Removed external functions that don't have implementation in shim file. // 5. Changed RectF, Point, and PoseTracker to correct package name. // 6. Added function RegisterGvrApiNatives at the end of this file. +// 7. Added "vr" as an argument to base::android::LazyGetClass. #ifndef com_google_vr_ndk_base_GvrApi_JNI #define com_google_vr_ndk_base_GvrApi_JNI @@ -35,7 +36,7 @@ // Leaking this jclass as we cannot use LazyInstance from some threads. std::atomic<jclass> g_GvrApi_clazz __attribute__((unused)) (nullptr); #define GvrApi_clazz(env) \ - base::android::LazyGetClass(env, kGvrApiClassPath, &g_GvrApi_clazz) + base::android::LazyGetClass(env, kGvrApiClassPath, "vr", &g_GvrApi_clazz) } // namespace
diff --git a/third_party/gvr-android-sdk/native_callbacks_jni.h b/third_party/gvr-android-sdk/native_callbacks_jni.h index cc9534d..7900017 100644 --- a/third_party/gvr-android-sdk/native_callbacks_jni.h +++ b/third_party/gvr-android-sdk/native_callbacks_jni.h
@@ -17,6 +17,7 @@ // generate the file. But the real jni functions in the static library // doesn't have the prefix. // 6. Added function RegisterNativeCallbacksNatives at the end of this file. +// 7. Added "vr" as an argument to base::android::LazyGetClass. #ifndef com_google_vr_internal_controller_NativeCallbacks_JNI #define com_google_vr_internal_controller_NativeCallbacks_JNI @@ -38,8 +39,8 @@ "com/google/vr/internal/controller/NativeCallbacks"; // Leaking this jclass as we cannot use LazyInstance from some threads. std::atomic<jclass> g_NativeCallbacks_clazz __attribute__((unused)) (nullptr); -#define NativeCallbacks_clazz(env) \ - base::android::LazyGetClass(env, kNativeCallbacksClassPath, \ +#define NativeCallbacks_clazz(env) \ + base::android::LazyGetClass(env, kNativeCallbacksClassPath, "vr", \ &g_NativeCallbacks_clazz) } // namespace
diff --git a/third_party/r8/playground/Playground.java b/third_party/r8/playground/Playground.java index 51cc05c1..2244aae 100644 --- a/third_party/r8/playground/Playground.java +++ b/third_party/r8/playground/Playground.java
@@ -10,5 +10,5 @@ System.out.println("Your test here"); } - private static native boolean doThing(long ptr, String s); + private static native boolean ensureSideEffects(); }
diff --git a/third_party/r8/playground/playground.pgcfg b/third_party/r8/playground/playground.pgcfg index fb218fb..e26f908 100644 --- a/third_party/r8/playground/playground.pgcfg +++ b/third_party/r8/playground/playground.pgcfg
@@ -2,7 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. --keep class Playground { - native *** *(...); - public static void main(...); +-allowaccessmodification + +-keep,allowoptimization class Playground { + void main(...); }
diff --git a/tools/clang/blink_gc_plugin/BadPatternFinder.cpp b/tools/clang/blink_gc_plugin/BadPatternFinder.cpp index e081cf3c..6016ec2 100644 --- a/tools/clang/blink_gc_plugin/BadPatternFinder.cpp +++ b/tools/clang/blink_gc_plugin/BadPatternFinder.cpp
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "BadPatternFinder.h" +#include <clang/AST/Decl.h> #include "DiagnosticsReporter.h" #include <algorithm> @@ -60,24 +61,30 @@ : diagnostics_(diagnostics) {} void Register(MatchFinder& match_finder) { - // Matches any application of make_unique where the template argument is - // known to refer to a garbage-collected type. - auto optional_construction = - cxxConstructExpr(hasDeclaration(cxxConstructorDecl(ofClass( - classTemplateSpecializationDecl( - hasName("::base::Optional"), - hasTemplateArgument( - 0, refersToType(GarbageCollectedType()))) - .bind("optional"))))) - .bind("bad"); - match_finder.addDynamicMatcher(optional_construction, this); + // Matches fields and new-expressions of type base::Optional where the + // template argument is known to refer to a garbage-collected type. + auto optional_type = hasType( + classTemplateSpecializationDecl( + hasName("::base::Optional"), + hasTemplateArgument(0, refersToType(GarbageCollectedType()))) + .bind("optional")); + auto optional_field = fieldDecl(optional_type).bind("bad_field"); + auto optional_new_expression = + cxxNewExpr(has(cxxConstructExpr(optional_type))).bind("bad_new"); + match_finder.addDynamicMatcher(optional_field, this); + match_finder.addDynamicMatcher(optional_new_expression, this); } void run(const MatchFinder::MatchResult& result) override { - auto* bad_use = result.Nodes.getNodeAs<clang::Expr>("bad"); auto* optional = result.Nodes.getNodeAs<clang::CXXRecordDecl>("optional"); auto* gc_type = result.Nodes.getNodeAs<clang::CXXRecordDecl>("gctype"); - diagnostics_.OptionalUsedWithGC(bad_use, optional, gc_type); + if (auto* bad_field = + result.Nodes.getNodeAs<clang::FieldDecl>("bad_field")) { + diagnostics_.OptionalFieldUsedWithGC(bad_field, optional, gc_type); + } else { + auto* bad_new = result.Nodes.getNodeAs<clang::Expr>("bad_new"); + diagnostics_.OptionalNewExprUsedWithGC(bad_new, optional, gc_type); + } } private:
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp index 4a6d9dd..de7853c4 100644 --- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp +++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
@@ -141,9 +141,15 @@ "[blink-gc] Disallowed use of %0 found; %1 is a garbage-collected type. " "std::unique_ptr cannot hold garbage-collected objects."; -const char kOptionalUsedWithGC[] = - "[blink-gc] Disallowed construction of %0 found; %1 is a garbage-collected " - "type. optional cannot hold garbage-collected objects."; +const char kOptionalFieldUsedWithGC[] = + "[blink-gc] Disallowed optional field of %0 found; %1 is a " + "garbage-collected " + "type. Optional fields cannot hold garbage-collected objects."; + +const char kOptionalNewExprUsedWithGC[] = + "[blink-gc] Disallowed new-expression of %0 found; %1 is a " + "garbage-collected " + "type. GCed types cannot be created with new."; const char kVariantUsedWithGC[] = "[blink-gc] Disallowed construction of %0 found; %1 is a garbage-collected " @@ -248,8 +254,10 @@ diag_unique_ptr_used_with_gc_ = diagnostic_.getCustomDiagID(getErrorLevel(), kUniquePtrUsedWithGC); - diag_optional_used_with_gc_ = - diagnostic_.getCustomDiagID(getErrorLevel(), kOptionalUsedWithGC); + diag_optional_field_used_with_gc_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kOptionalFieldUsedWithGC); + diag_optional_new_expr_used_with_gc_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kOptionalNewExprUsedWithGC); diag_variant_used_with_gc_ = diagnostic_.getCustomDiagID(getErrorLevel(), kVariantUsedWithGC); } @@ -540,11 +548,19 @@ << bad_function << gc_type << expr->getSourceRange(); } -void DiagnosticsReporter::OptionalUsedWithGC( +void DiagnosticsReporter::OptionalFieldUsedWithGC( + const clang::FieldDecl* field, + const clang::CXXRecordDecl* optional, + const clang::CXXRecordDecl* gc_type) { + ReportDiagnostic(field->getBeginLoc(), diag_optional_field_used_with_gc_) + << optional << gc_type << field->getSourceRange(); +} + +void DiagnosticsReporter::OptionalNewExprUsedWithGC( const clang::Expr* expr, const clang::CXXRecordDecl* optional, const clang::CXXRecordDecl* gc_type) { - ReportDiagnostic(expr->getBeginLoc(), diag_optional_used_with_gc_) + ReportDiagnostic(expr->getBeginLoc(), diag_optional_new_expr_used_with_gc_) << optional << gc_type << expr->getSourceRange(); }
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h index 24cf7a1b..73ddcd0e 100644 --- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h +++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
@@ -79,9 +79,12 @@ void UniquePtrUsedWithGC(const clang::Expr* expr, const clang::FunctionDecl* bad_function, const clang::CXXRecordDecl* gc_type); - void OptionalUsedWithGC(const clang::Expr* expr, - const clang::CXXRecordDecl* optional, - const clang::CXXRecordDecl* gc_type); + void OptionalFieldUsedWithGC(const clang::FieldDecl* decl, + const clang::CXXRecordDecl* optional, + const clang::CXXRecordDecl* gc_type); + void OptionalNewExprUsedWithGC(const clang::Expr* expr, + const clang::CXXRecordDecl* optional, + const clang::CXXRecordDecl* gc_type); void VariantUsedWithGC(const clang::Expr* expr, const clang::CXXRecordDecl* variant, const clang::CXXRecordDecl* gc_type); @@ -142,7 +145,8 @@ unsigned diag_member_in_stack_allocated_class_; unsigned diag_unique_ptr_used_with_gc_; - unsigned diag_optional_used_with_gc_; + unsigned diag_optional_field_used_with_gc_; + unsigned diag_optional_new_expr_used_with_gc_; unsigned diag_variant_used_with_gc_; };
diff --git a/tools/clang/blink_gc_plugin/tests/optional_gc_object.cpp b/tools/clang/blink_gc_plugin/tests/optional_gc_object.cpp index c044b9d..8c27ce94 100644 --- a/tools/clang/blink_gc_plugin/tests/optional_gc_object.cpp +++ b/tools/clang/blink_gc_plugin/tests/optional_gc_object.cpp
@@ -6,14 +6,23 @@ namespace blink { +class WithOpt : public GarbageCollected<WithOpt> { + public: + virtual void Trace(Visitor*) const {} + + private: + base::Optional<Base> optional_field_; // Optional fields are disallowed. +}; + void DisallowedUseOfUniquePtr() { - base::Optional<Base> optional_base; + base::Optional<Base> optional_base; // Must be okay. (void)optional_base; - base::Optional<Derived> optional_derived; + base::Optional<Derived> optional_derived; // Must also be okay. (void)optional_derived; - new base::Optional<Base>; + new base::Optional<Base>; // New expression with gced optionals are not + // allowed. } } // namespace blink
diff --git a/tools/clang/blink_gc_plugin/tests/optional_gc_object.txt b/tools/clang/blink_gc_plugin/tests/optional_gc_object.txt index 9b78937..b95ec6a8 100644 --- a/tools/clang/blink_gc_plugin/tests/optional_gc_object.txt +++ b/tools/clang/blink_gc_plugin/tests/optional_gc_object.txt
@@ -1,10 +1,7 @@ -optional_gc_object.cpp:10:24: warning: [blink-gc] Disallowed construction of 'Optional<blink::Base>' found; 'Base' is a garbage-collected type. optional cannot hold garbage-collected objects. - base::Optional<Base> optional_base; - ^~~~~~~~~~~~~ -optional_gc_object.cpp:13:27: warning: [blink-gc] Disallowed construction of 'Optional<blink::Derived>' found; 'Derived' is a garbage-collected type. optional cannot hold garbage-collected objects. - base::Optional<Derived> optional_derived; - ^~~~~~~~~~~~~~~~ -optional_gc_object.cpp:16:7: warning: [blink-gc] Disallowed construction of 'Optional<blink::Base>' found; 'Base' is a garbage-collected type. optional cannot hold garbage-collected objects. - new base::Optional<Base>; - ^~~~ -3 warnings generated. +optional_gc_object.cpp:14:3: warning: [blink-gc] Disallowed optional field of 'Optional<blink::Base>' found; 'Base' is a garbage-collected type. Optional fields cannot hold garbage-collected objects. + base::Optional<Base> optional_field_; // Optional fields are disallowed. + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +optional_gc_object.cpp:24:3: warning: [blink-gc] Disallowed new-expression of 'Optional<blink::Base>' found; 'Base' is a garbage-collected type. GCed types cannot be created with new. + new base::Optional<Base>; // New expression with gced optionals are not + ^~~~~~~~~~~~~~~~~~~~~~~~ +2 warnings generated.
diff --git a/tools/grit/preprocess_grit.gni b/tools/grit/preprocess_grit.gni index 4bc4cad..6607147 100644 --- a/tools/grit/preprocess_grit.gni +++ b/tools/grit/preprocess_grit.gni
@@ -2,6 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +# This tool is no longer supported. Use preprocess_if_expr instead, which +# also generates manifests and preprocesses <if expr> but does not also +# inline <include>s (which are deprecated). + import("//build/config/python.gni") import("//tools/grit/grit_defines.gni")
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 1f11a465..4bbd29344 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -26998,6 +26998,10 @@ <action name="XR.ARCoreDeviceProviderFactory.NotInstalled" not_user_triggered="true"> + <obsolete> + The code that caused the issue this action was meant to track is no longer + present. + </obsolete> <owner>bialpio@chromium.org</owner> <description> Raised when XR service was unable to obtain necessary component. The action
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 638765fc..7aa7361 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -11334,7 +11334,8 @@ <int value="-603" label="FTP_TRANSFER_ABORTED"/> <int value="-602" label="FTP_SERVICE_UNAVAILABLE"/> <int value="-601" label="FTP_FAILED"/> - <int value="-507" label="TRUST_TOKEN_OPERATION_CACHE_HIT"/> + <int value="-507" + label="TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST"/> <int value="-506" label="TRUST_TOKEN_OPERATION_FAILED"/> <int value="-505" label="INVALID_WEB_BUNDLE"/> <int value="-504" label="INVALID_SIGNED_EXCHANGE"/> @@ -19408,6 +19409,7 @@ <int value="0" label="Opened with plaform handler by default"/> <int value="1" label="Opened in browser by default"/> <int value="2" label="Opened with plaform handler by user choice"/> + <int value="3" label="Opened with an alternate rename handler"/> </enum> <enum name="DownloadOriginStateOnResumption"> @@ -32016,6 +32018,16 @@ <int value="2" label="Record format version with validation value"/> </enum> +<enum name="FingerprintScanResult"> + <int value="0" label="Success"/> + <int value="1" label="Partial"/> + <int value="2" label="Insufficient"/> + <int value="3" label="Sensor Dirty"/> + <int value="4" label="Too Slow"/> + <int value="5" label="Too Fast"/> + <int value="6" label="Immobile"/> +</enum> + <enum name="FingerprintSensorMode"> <int value="0" label="None"/> <int value="1" label="Deepsleep"/> @@ -32516,6 +32528,12 @@ </int> </enum> +<enum name="GaiaCookieStateOnSignedInNavigation"> + <int value="0" label="Gaia cookie is present"/> + <int value="1" label="Gaia cookie is missing from Google-associated domain"/> + <int value="2" label="Gaia cookie is missing from Add Session"/> +</enum> + <enum name="GaiaPasswordChangedScreenUserAction"> <summary>Actions which happen on the screen.</summary> <int value="0" label="Resync user data"/> @@ -42717,6 +42735,7 @@ <int value="-1197245070" label="CookieDeprecationMessages:disabled"/> <int value="-1197035323" label="ZeroSuggestRedirectToChrome:disabled"/> <int value="-1195194959" label="XGEOVisibleNetworks:disabled"/> + <int value="-1195034892" label="ContinuousSearch:disabled"/> <int value="-1194129602" label="ClientSideDetectionModelOnAndroid:disabled"/> <int value="-1192790333" label="ArcUseHighMemoryDalvikProfile:disabled"/> <int value="-1191258368" label="PageInfoPerformanceHints:disabled"/> @@ -43203,6 +43222,7 @@ <int value="-728461030" label="AutofillPruneSuggestions:disabled"/> <int value="-727860269" label="WebAuthenticationBle:disabled"/> <int value="-726892130" label="AndroidMessagesIntegration:disabled"/> + <int value="-726567328" label="disable-virtual-keyboard"/> <int value="-723224470" label="enable-password-force-saving:enabled"/> <int value="-722474177" label="browser-side-navigation:disabled"/> <int value="-721685663" label="WebViewMixedContentAutoupgrades:enabled"/> @@ -43227,6 +43247,7 @@ <int value="-706733351" label="enable-floating-virtual-keyboard:enabled"/> <int value="-706159808" label="QuickAnswersOnEditableText:disabled"/> <int value="-705746939" label="ChromeDuet:enabled"/> + <int value="-704459022" label="ContinuousSearch:enabled"/> <int value="-704232562" label="UseMonitorColorSpace:enabled"/> <int value="-702477233" label="ContentFullscreen:enabled"/> <int value="-700300613" label="use-fake-device-for-media-stream:disabled"/> @@ -50678,7 +50699,8 @@ <int value="504" label="INVALID_SIGNED_EXCHANGE"/> <int value="505" label="INVALID_WEB_BUNDLE"/> <int value="506" label="TRUST_TOKEN_OPERATION_FAILED"/> - <int value="507" label="TRUST_TOKEN_OPERATION_CACHE_HIT"/> + <int value="507" + label="TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST"/> <int value="601" label="FTP_FAILED"/> <int value="602" label="FTP_SERVICE_UNAVAILABLE"/> <int value="603" label="FTP_TRANSFER_ABORTED"/> @@ -57959,6 +57981,7 @@ <int value="2" label="DISMISSED"/> <int value="3" label="IGNORED"/> <int value="4" label="REVOKED"/> + <int value="5" label="GRANTED_ONCE"/> </enum> <enum name="PermissionAutoRevocationHistory"> @@ -76937,6 +76960,7 @@ <int value="4" label="Aborted"/> <int value="5" label="Timeout"/> <int value="6" label="UserCancelled"/> + <int value="7" label="BackendNotAvailable"/> </enum> <enum name="WebpDecodedFormat">
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml index 4e95c89d..8b10863 100644 --- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -540,6 +540,9 @@ <histogram name="Blink.DecodedImage.DensitySizeCorrectionDetected" enum="BooleanPresent" expires_after="2021-01-03"> + <obsolete> + Removed in M89. + </obsolete> <owner>schenney@chromium.org</owner> <owner>noam.j.rosenthal@gmail.com</owner> <owner>paint-dev@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml index cd395c91..e306334 100644 --- a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml
@@ -583,7 +583,8 @@ <summary> Measures the time taken to load a single indexed ruleset in the browser process for an extension. This includes reading the indexed ruleset file and - verifying it. Emitted whenever a single extension ruleset is loaded. + verifying it. Emitted whenever a single file-backed extension ruleset is + loaded. </summary> </histogram>
diff --git a/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml b/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml index 5a8bf9c..b80f56e2 100644 --- a/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml
@@ -21,6 +21,32 @@ <histograms> +<histogram name="Fingerprint.Auth.ScanResult" enum="FingerprintScanResult" + expires_after="2021-09-01"> + <owner>rsorokin@chromium.org</owner> + <owner>tomhughes@chromium.org</owner> + <owner>cros-oac@google.com</owner> + <owner>chromeos-fingerprint@google.com</owner> + <summary> + Tracks the scan result during fingerprint authentication session. It is + recorded every time user touches the fingerprint sensor while authenticating + (unlock screen, web auth, etc.). + </summary> +</histogram> + +<histogram name="Fingerprint.Enroll.ScanResult" enum="FingerprintScanResult" + expires_after="2021-09-01"> + <owner>rsorokin@chromium.org</owner> + <owner>tomhughes@chromium.org</owner> + <owner>cros-oac@google.com</owner> + <owner>chromeos-fingerprint@google.com</owner> + <summary> + Tracks the scan result during fingerprint enrollment session. It is recorded + every time user touches the fingerprint sensor while enrolling fingerprints + (during onboarding or in Chrome OS settings). + </summary> +</histogram> + <histogram name="Fingerprint.Reset.ResetContextMode" enum="FingerprintSensorMode" expires_after="2021-03-15"> <owner>tomhughes@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml index 1763bd4..2fdfa7d 100644 --- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -13727,6 +13727,7 @@ <suffix name="Gesture" label="With user gesture"/> <suffix name="NoGesture" label="Without user gesture"/> <affected-histogram name="Permissions.Prompt.Accepted"/> + <affected-histogram name="Permissions.Prompt.AcceptedOnce"/> <affected-histogram name="Permissions.Prompt.Denied"/> <affected-histogram name="Permissions.Prompt.Shown"/> </histogram_suffixes> @@ -13755,6 +13756,7 @@ <suffix name="VideoCapture" label="Camera permission"/> <suffix name="VR" label="VR permission"/> <affected-histogram name="Permissions.Engagement.Accepted"/> + <affected-histogram name="Permissions.Engagement.AcceptedOnce"/> <affected-histogram name="Permissions.Engagement.Denied"/> <affected-histogram name="Permissions.Engagement.Dismissed"/> <affected-histogram name="Permissions.Engagement.Ignored"/> @@ -13804,6 +13806,9 @@ <affected-histogram name="Permissions.Prompt.Accepted.PriorDismissCount2"/> <affected-histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount"/> <affected-histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount2"/> + <affected-histogram + name="Permissions.Prompt.AcceptedOnce.PriorDismissCount2"/> + <affected-histogram name="Permissions.Prompt.AcceptedOnce.PriorIgnoreCount2"/> <affected-histogram name="Permissions.Prompt.Denied.Persisted"/> <affected-histogram name="Permissions.Prompt.Denied.PriorDismissCount"/> <affected-histogram name="Permissions.Prompt.Denied.PriorDismissCount2"/>
diff --git a/tools/metrics/histograms/histograms_xml/network/histograms.xml b/tools/metrics/histograms/histograms_xml/network/histograms.xml index 4ea30e0..c29e331 100644 --- a/tools/metrics/histograms/histograms_xml/network/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/network/histograms.xml
@@ -22,14 +22,18 @@ <histograms> <histogram name="Network.3G.Gobi.Activation" units="ms" expires_after="M85"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary>The time the Gobi modem takes to complete activation.</summary> </histogram> <histogram name="Network.3G.Gobi.Connect" units="ms" expires_after="2019-12-31"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary> The time the Gobi modem takes to connect to the cellular network. </summary> @@ -37,8 +41,10 @@ <histogram name="Network.3G.Gobi.Disconnect" units="ms" expires_after="2019-12-31"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary> The time the Gobi modem takes to disconnect from the cellular network. </summary> @@ -46,22 +52,28 @@ <histogram name="Network.3G.Gobi.FirmwareDownload.Attempts" units="units" expires_after="M85"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary>Number of attempts taken to install Gobi firmware.</summary> </histogram> <histogram name="Network.3G.Gobi.FirmwareDownload.Time" units="ms" expires_after="M85"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary>The time it takes to install Gobi firmware.</summary> </histogram> <histogram name="Network.3G.Gobi.Registration" units="ms" expires_after="2019-12-31"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary> The time the Gobi modem takes to register on the cellular network. </summary> @@ -69,8 +81,10 @@ <histogram name="Network.3G.Gobi.SetPower" enum="Network3GGobiError" expires_after="2019-12-31"> + <obsolete> + Removed 12/2020 + </obsolete> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <summary>Errors experienced during Gobi device powerup.</summary> </histogram> @@ -117,8 +131,7 @@ <histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop" enum="NetworkCellular3GPPRegistrationDelayedDrop" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of cellular network @@ -129,8 +142,7 @@ <histogram name="Network.Shill.Cellular.AutoConnectTotalTime" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the total amount of time spent @@ -141,8 +153,7 @@ <histogram name="Network.Shill.Cellular.AutoConnectTries" units="units" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of auto-connect @@ -153,8 +164,7 @@ <histogram name="Network.Shill.Cellular.DevicePresenceStatus" enum="BooleanPresent" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the presence of a Cellular device in @@ -164,8 +174,7 @@ <histogram name="Network.Shill.Cellular.Disconnect" enum="NetworkDisconnectType" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network usage metric that tracks whether the cellular network was @@ -175,8 +184,7 @@ <histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS cellular network metric that tracks the number of drops based on @@ -186,8 +194,7 @@ <histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds2" units="seconds" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the length of a lease for a @@ -198,8 +205,7 @@ <histogram name="Network.Shill.Cellular.IPv6ConnectivityStatus" enum="IPv6ConnectivityStatus" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the presence of complete IPv6 @@ -209,8 +215,7 @@ <histogram name="Network.Shill.Cellular.NetworkConnectionIPType" enum="NetworkConnectionIPType" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the types of IP configuration used for @@ -220,8 +225,7 @@ <histogram name="Network.Shill.Cellular.OutOfCreditsReason" enum="NetworkCellularOutOfCreditsReason" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS cellular network metric that tracks the number of out-of-credits @@ -231,8 +235,7 @@ <histogram name="Network.Shill.Cellular.PortalAttempts" units="units" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of portal detection @@ -243,8 +246,7 @@ <histogram name="Network.Shill.Cellular.PortalAttemptsToOnline" units="units" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the total number of portal @@ -255,8 +257,7 @@ <histogram name="Network.Shill.Cellular.PortalResult" enum="NetworkPortalResult" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the result of portal detections @@ -275,8 +276,7 @@ <histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop" units="units" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric sampling the signal strength (0-100) of the @@ -286,8 +286,7 @@ <histogram name="Network.Shill.Cellular.TimeOnline" units="seconds" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric sampling the time spent using cellular to transport @@ -298,8 +297,7 @@ <histogram name="Network.Shill.Cellular.TimeToConfig" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to join a cellular @@ -309,8 +307,7 @@ <histogram name="Network.Shill.Cellular.TimeToConnect" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to connect a cellular @@ -320,8 +317,7 @@ <histogram name="Network.Shill.Cellular.TimeToDisable" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to disable a cellular @@ -331,8 +327,7 @@ <histogram name="Network.Shill.Cellular.TimeToEnable" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to enable a cellular @@ -342,8 +337,7 @@ <histogram name="Network.Shill.Cellular.TimeToInitialize" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to initialize a @@ -353,8 +347,7 @@ <histogram name="Network.Shill.Cellular.TimeToOnline" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to determine that a @@ -364,8 +357,7 @@ <histogram name="Network.Shill.Cellular.TimeToPortal" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to determine that a @@ -387,8 +379,7 @@ <histogram name="Network.Shill.Cellular.TimeToScan" units="ms" expires_after="2021-12-01"> - <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>ejcaruso@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to scan a cellular @@ -397,9 +388,9 @@ </histogram> <histogram name="Network.Shill.ConnectionDiagnosticsIssue" - enum="ConnectionDiagnosticsIssue" expires_after="M85"> + enum="ConnectionDiagnosticsIssue" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the connectivity issue diagnosed by the ConnectionDiagnostics class in Shill. This metric is logged each time a @@ -409,9 +400,9 @@ </histogram> <histogram name="Network.Shill.CorruptedProfile" enum="NetworkCorruptedProfile" - expires_after="M78"> + expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> + <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS cellular network metric that tracks the number of corrupted profiles encountered by Shill. @@ -501,7 +492,6 @@ enum="ShillSuspendTerminationDarkResumeActionResult" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of dark resume @@ -512,7 +502,6 @@ <histogram name="Network.Shill.DarkResumeActionsTimeTaken" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the time in milliseconds it @@ -523,7 +512,6 @@ <histogram name="Network.Shill.DarkResumeScanNumRetries" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric sampling the number of times a dark resume scan is @@ -534,7 +522,6 @@ <histogram name="Network.Shill.DarkResumeScanRetryResult" enum="DarkResumeScanRetryResult" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks whether dark resume scan retries led to @@ -547,7 +534,6 @@ <histogram name="Network.Shill.DeviceConnectionStatus" enum="ConnectionStatus" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the connection status of @@ -558,7 +544,6 @@ <histogram name="Network.Shill.DeviceRemovedEvent" enum="DeviceTechnologyType" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the network device removed events for @@ -569,7 +554,6 @@ <histogram name="Network.Shill.DHCPClientMTUValue" units="bytes" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the MTU value proposed by the @@ -581,7 +565,6 @@ <histogram name="Network.Shill.DHCPClientStatus" enum="NetworkDhcpClientStatus" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the current state of the DHCP @@ -592,7 +575,6 @@ <histogram name="Network.Shill.DHCPOptionFailureDetected" enum="NetworkTechnology" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the number of DHCP option failures @@ -605,7 +587,6 @@ <histogram name="Network.Shill.Ethernet.DevicePresenceStatus" enum="BooleanPresent" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric that tracks the presence of an Ethernet device in @@ -616,7 +597,6 @@ <histogram name="Network.Shill.Ethernet.Disconnect" enum="NetworkDisconnectType" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network usage metric that tracks whether the Ethernet network was @@ -627,7 +607,6 @@ <histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2" units="seconds" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the length of a lease for @@ -639,7 +618,6 @@ <histogram name="Network.Shill.Ethernet.LinkMonitorBroadcastErrorsAtFailure" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the number of LinkMonitor @@ -651,7 +629,6 @@ <histogram name="Network.Shill.Ethernet.LinkMonitorFailure" enum="LinkMonitorFailureType" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS metric that signals the type of failure the LinkMonitor @@ -662,7 +639,6 @@ <histogram name="Network.Shill.Ethernet.LinkMonitorResponseTimeSample" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the number of milliseconds @@ -673,7 +649,6 @@ <histogram name="Network.Shill.Ethernet.LinkMonitorSecondsToFailure" units="seconds" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the number of seconds from @@ -684,7 +659,6 @@ <histogram name="Network.Shill.Ethernet.LinkMonitorUnicastErrorsAtFailure" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric that tracks the number of LinkMonitor @@ -696,7 +670,6 @@ <histogram name="Network.Shill.Ethernet.PortalAttempts" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of portal detection @@ -708,7 +681,6 @@ <histogram name="Network.Shill.Ethernet.PortalAttemptsToOnline" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the total number of portal @@ -720,7 +692,6 @@ <histogram name="Network.Shill.Ethernet.PortalResult" enum="NetworkPortalResult" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the result of portal detections @@ -740,7 +711,6 @@ <histogram name="Network.Shill.Ethernet.TimeOnline" units="seconds" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric sampling the time spent using Ethernet to transport @@ -752,7 +722,6 @@ <histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to join a wired @@ -764,7 +733,6 @@ <histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to initialize an @@ -775,7 +743,6 @@ <histogram name="Network.Shill.Ethernet.TimeToOnline" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to determine that an @@ -786,7 +753,6 @@ <histogram name="Network.Shill.Ethernet.TimeToPortal" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network performance metric sampling the time to determine that an @@ -896,7 +862,6 @@ <histogram name="Network.Shill.ServiceErrors" enum="NetworkServiceError" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS connection manager service errors across all technologies. @@ -906,7 +871,6 @@ <histogram name="Network.Shill.ServicesOnSameNetwork" units="units" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network metric sampling the number of services that are connected @@ -918,7 +882,6 @@ enum="ShillSuspendTerminationDarkResumeActionResult" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of suspend actions @@ -940,7 +903,6 @@ enum="ShillSuspendTerminationDarkResumeActionResult" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the number of termination @@ -952,7 +914,6 @@ <histogram name="Network.Shill.TerminationActionsTimeTaken" units="ms" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network diagnostic metric sampling the time in milliseconds it @@ -963,7 +924,6 @@ <histogram name="Network.Shill.TimeToDrop" units="seconds" expires_after="2021-12-01"> <owner>stevenjb@chromium.org</owner> - <owner>benchan@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> Chrome OS network stability metric sampling the time in seconds between the
diff --git a/tools/metrics/histograms/histograms_xml/permissions/histograms.xml b/tools/metrics/histograms/histograms_xml/permissions/histograms.xml index ada465c7..78d84ced 100644 --- a/tools/metrics/histograms/histograms_xml/permissions/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/permissions/histograms.xml
@@ -218,7 +218,19 @@ <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> - Tracks the engagement score for sites where permission prompts are accepted. + Recorded when the user accepts the permission prompt. It tracks the Site + engagement score for sites. For more info check chrome/browser/engagement/ + </summary> +</histogram> + +<histogram name="Permissions.Engagement.AcceptedOnce" units="%" + expires_after="2021-06-19"> + <owner>engedy@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + Recorded when the user accepts the one time permission prompt. It tracks the + Site engagement score for sites. For more info check + chrome/browser/engagement/ </summary> </histogram> @@ -227,7 +239,8 @@ <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> - Tracks the engagement score for sites where permission prompts are denied. + Recorded when the user denies the permission prompt. It tracks the Site + engagement score for sites. For more info check chrome/browser/engagement/ </summary> </histogram> @@ -236,8 +249,8 @@ <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> - Tracks the engagement score for sites where permission prompts are - dismissed. + Recorded when the user dismisses the permission prompt. It tracks the Site + engagement score for sites. For more info check chrome/browser/engagement/ </summary> </histogram> @@ -246,7 +259,8 @@ <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> - Tracks the engagement score for sites where permission prompts are ignored. + Recorded when the user ignores the permission prompt. It tracks the Site + engagement score for sites. For more info check chrome/browser/engagement/ </summary> </histogram> @@ -289,9 +303,9 @@ </histogram> <histogram name="Permissions.Prompt.Accepted.PriorDismissCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt accept, records the total number of prompt dismissal events for this origin since the last time @@ -302,9 +316,9 @@ </histogram> <histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount2" units="units" - expires_after="2021-03-07"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt accept, records the total number of prompt ignore events for this origin since the last time the @@ -314,6 +328,44 @@ </summary> </histogram> +<histogram name="Permissions.Prompt.AcceptedOnce" enum="PermissionRequestType" + expires_after="2021-12-31"> + <owner>engedy@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + Recorded when the user clicks on the one-time allow button of the permission + prompt. Tracks the permission bubbles (merged and non-merged) that are + accepted once. Merged bubbles are considered accepted if all permissions are + allowed. + </summary> +</histogram> + +<histogram name="Permissions.Prompt.AcceptedOnce.PriorDismissCount2" + units="units" expires_after="2021-12-31"> + <owner>engedy@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + This metric, recorded at the time of a permission prompt one-time accept, + records the total number of prompt dismissal events for this origin since + the last time the user explicitly set the permission state or cleared + history / site data and prior to the accept. The suffix of the histogram + indicates which particular permission. + </summary> +</histogram> + +<histogram name="Permissions.Prompt.AcceptedOnce.PriorIgnoreCount2" + units="units" expires_after="2021-12-31"> + <owner>engedy@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + This metric, recorded at the time of a permission prompt one-time accept, + records the total number of prompt ignore events for this origin since the + last time the user explicitly set the permission state or cleared history / + site data and prior to the accept. The suffix of the histogram indicates + which particular permission. + </summary> +</histogram> + <histogram name="Permissions.Prompt.Denied" enum="PermissionRequestType" expires_after="M90"> <owner>dominickn@chromium.org</owner> @@ -325,9 +377,9 @@ </histogram> <histogram name="Permissions.Prompt.Denied.PriorDismissCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt deny, records the total number of prompt dismissal events for this origin since the last time @@ -338,9 +390,9 @@ </histogram> <histogram name="Permissions.Prompt.Denied.PriorIgnoreCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt deny, records the total number of prompt ignore events for this origin since the last time the @@ -351,9 +403,9 @@ </histogram> <histogram name="Permissions.Prompt.Dismissed.PriorDismissCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt dismiss, records the total number of prompt dismissal events for this origin since the last @@ -364,9 +416,9 @@ </histogram> <histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt dismiss, records the total number of prompt ignore events for this origin since the last time @@ -377,9 +429,9 @@ </histogram> <histogram name="Permissions.Prompt.Ignored.PriorDismissCount2" units="units" - expires_after="2020-12-31"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt ignore, records the total number of prompt dismissal events for this origin since the last time @@ -390,9 +442,9 @@ </histogram> <histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount2" units="units" - expires_after="2021-03-07"> + expires_after="2021-12-31"> <owner>engedy@chromium.org</owner> - <owner>elklm@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> This metric, recorded at the time of a permission prompt ignore, records the total number of prompt ignore events for this origin since the last time the
diff --git a/tools/metrics/histograms/histograms_xml/signin/histograms.xml b/tools/metrics/histograms/histograms_xml/signin/histograms.xml index deb8e369..a7888ca 100644 --- a/tools/metrics/histograms/histograms_xml/signin/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/signin/histograms.xml
@@ -476,6 +476,21 @@ </summary> </histogram> +<histogram name="Signin.IOSGaiaCookieStateOnSignedInNavigation" + enum="GaiaCookieStateOnSignedInNavigation" expires_after="2021-08-05"> + <owner>fernandex@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <owner>chrome-signin-team@google.com</owner> + <summary> + Records whether the Gaia cookie is present when a user signed in to Chrome + navigates to a Google-owned domain that is eligible for Mirror account + consistency. This metrics tracks the user journeys that interact with + authentication cookies and that could be disrupted if an external force + (e.g. Apple's ITP) were to remove these cookies. This logging is limited to + once every hour due to performance constraints. + </summary> +</histogram> + <histogram name="Signin.IOSLoginMethodAndSyncState" enum="SigninIOSLoginMethodAndSyncState" expires_after="2021-04-30"> <owner>jebel@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 7aa8920..a365e988 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,8 +1,8 @@ { "trace_processor_shell": { "win": { - "hash": "50c634c891c0c93d8afee401aa4f31adb86d2eba", - "remote_path": "perfetto_binaries/trace_processor_shell/win/a45552c0f29dc62ed601a22b258b27ed2838bc57/trace_processor_shell.exe" + "hash": "83905a5068c26daa567cf81ef4c21963f7584593", + "remote_path": "perfetto_binaries/trace_processor_shell/win/877fbcb6917926dfd7e80e9de84baa303b2df995/trace_processor_shell.exe" }, "mac": { "hash": "50d02eb2ca79777ef1a5250242d821413d57e41f", @@ -10,7 +10,7 @@ }, "linux": { "hash": "d258d32b58428c1acaf19c46e51e820b092227a4", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/a45552c0f29dc62ed601a22b258b27ed2838bc57/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/8ddf5ae4b8a57c7acc28dad9f2e3857c1d3b7bc0/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/process_perf_results.py b/tools/perf/process_perf_results.py index 3566fac..f55d693 100755 --- a/tools/perf/process_perf_results.py +++ b/tools/perf/process_perf_results.py
@@ -62,12 +62,16 @@ # in the build properties machine_group = build_properties['perf_dashboard_machine_group'] else: - mastername_mapping = {} + builder_group_mapping = {} with open(MACHINE_GROUP_JSON_FILE) as fp: - mastername_mapping = json.load(fp) - legacy_mastername = build_properties['mastername'] - if mastername_mapping.get(legacy_mastername): - machine_group = mastername_mapping[legacy_mastername] + builder_group_mapping = json.load(fp) + if build_properties.get('builder_group', False): + legacy_builder_group = build_properties['builder_group'] + else: + # TODO(crbug.com/1153958): remove reference to mastername. + legacy_builder_group = build_properties['mastername'] + if builder_group_mapping.get(legacy_builder_group): + machine_group = builder_group_mapping[legacy_builder_group] if not machine_group: raise ValueError( 'Must set perf_dashboard_machine_group or have a valid '
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.h b/ui/accelerated_widget_mac/ca_transaction_observer.h index 04b3ba9d..eb86180 100644 --- a/ui/accelerated_widget_mac/ca_transaction_observer.h +++ b/ui/accelerated_widget_mac/ca_transaction_observer.h
@@ -22,7 +22,7 @@ // CATransactionCoordinator is an interface to undocumented macOS APIs which // run callbacks at different stages of committing a CATransaction to the // window server. There is no guarantee that it will call registered observers -// at all: it does nothing on macOS older than 10.11. +// at all. // // - Pre-commit: After all outstanding CATransactions have committed and after // layout, but before the new layer tree has been sent to the window server. @@ -84,7 +84,6 @@ CATransactionCoordinator(); ~CATransactionCoordinator(); - API_AVAILABLE(macos(10.11)) void SynchronizeImpl(); void PreCommitHandler(); void PostCommitHandler();
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.mm b/ui/accelerated_widget_mac/ca_transaction_observer.mm index e6d8b28f..af02cc2 100644 --- a/ui/accelerated_widget_mac/ca_transaction_observer.mm +++ b/ui/accelerated_widget_mac/ca_transaction_observer.mm
@@ -19,7 +19,6 @@ kCATransactionPhasePostCommit, } CATransactionPhase; -API_AVAILABLE(macos(10.11)) @interface CATransaction () + (void)addCommitHandler:(void (^)(void))block forPhase:(CATransactionPhase)phase; @@ -116,8 +115,7 @@ void CATransactionCoordinator::Synchronize() { if (disabled_for_testing_) return; - if (@available(macos 10.11, *)) - SynchronizeImpl(); + SynchronizeImpl(); } void CATransactionCoordinator::AddPreCommitObserver(
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb index 117ed8cb..600b37b7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Installeer met Linux</translation> <translation id="2225536596944493418">Is jy seker jy wil <ph name="NUMBER_OF_ITEMS" /> items uitvee?</translation> <translation id="2230062665678605299">Kon nie vouer "<ph name="FOLDER_NAME" />" skep nie. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Laai uit asblik terug</translation> <translation id="2275059641601412272">Geskuif.</translation> <translation id="2288278176040912387">Platespeler</translation> <translation id="2291538123825441971">Maak tans <ph name="NUMBER_OF_FILES" /> lêers oop.</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">Yslands</translation> <translation id="8669949407341943408">Skuif tans …</translation> <translation id="8698464937041809063">Google-tekening</translation> +<translation id="8712637175834984815">Het dit</translation> <translation id="8713112442029511308">Maltees</translation> <translation id="8714406895390098252">Fiets</translation> <translation id="8719721339511222681">Het <ph name="ENTRY_NAME" /> gekies.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb index 6df172d..3ebd6b7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">በLinux ይጫኑ</translation> <translation id="2225536596944493418">እርግጠኛ ነዎት <ph name="NUMBER_OF_ITEMS" /> ንጥሎችን መሰረዝ ይፈልጋሉ?</translation> <translation id="2230062665678605299">የ«<ph name="FOLDER_NAME" />» አቃፊን መፍጠር አልተቻለም። <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">ከመጣያ ወደነበረበት መልስ</translation> <translation id="2275059641601412272">ተወስደዋል።</translation> <translation id="2288278176040912387">የሙዚቃ ማጫወቻ</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> ፋይሎችን በመክፈት ላይ።</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">አይስላንድኛ</translation> <translation id="8669949407341943408">በመውሰድ ላይ...</translation> <translation id="8698464937041809063">Google ስዕል</translation> +<translation id="8712637175834984815">ገባኝ</translation> <translation id="8713112442029511308">ማልታኛ</translation> <translation id="8714406895390098252">ቢስክሌት</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ተመርጧል።</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb index 8ca9d99e..8c7a8ef 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">الآيسلندية</translation> <translation id="8669949407341943408">جارٍ النقل...</translation> <translation id="8698464937041809063">رسم Google</translation> +<translation id="8712637175834984815">تم</translation> <translation id="8713112442029511308">المالطية</translation> <translation id="8714406895390098252">دراجة</translation> <translation id="8719721339511222681">تم اختيار <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb index f91fa53..9509a26b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -728,6 +728,7 @@ <translation id="8609695766746872526">আইচলেণ্ডীয়</translation> <translation id="8669949407341943408">স্থানান্তৰ কৰি থকা হৈছে...</translation> <translation id="8698464937041809063">Google অংকন</translation> +<translation id="8712637175834984815">বুজি পালোঁ</translation> <translation id="8713112442029511308">মল্টিজ</translation> <translation id="8714406895390098252">বাইচাইকেল</translation> <translation id="8719721339511222681">বাছনি কৰা <ph name="ENTRY_NAME" />।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb index be95f92..68f61b5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Linux ilə quraşdırın</translation> <translation id="2225536596944493418"><ph name="NUMBER_OF_ITEMS" /> elementi silmək istədiyinizə əminsiniz?</translation> <translation id="2230062665678605299">Qovluq yaratmaq alınmadı "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Zibil qutusundan bərpa edin</translation> <translation id="2275059641601412272">Köçürülüb.</translation> <translation id="2288278176040912387">Rekord oyunçu</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> fayl açılır.</translation> @@ -731,6 +732,7 @@ <translation id="8609695766746872526">İsland</translation> <translation id="8669949407341943408">Daşınır...</translation> <translation id="8698464937041809063">Google çertyoj</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8713112442029511308">Malta</translation> <translation id="8714406895390098252">Velosiped</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> seçildi.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb index 4c424b3..030155251 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Ісландская</translation> <translation id="8669949407341943408">Ідзе перамяшчэнне...</translation> <translation id="8698464937041809063">Рысунак Google</translation> +<translation id="8712637175834984815">Зразумела</translation> <translation id="8713112442029511308">Мальтыйская</translation> <translation id="8714406895390098252">Веласіпед</translation> <translation id="8719721339511222681">Выбрана: <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb index b7f41b195..68fdb3f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Инсталиране с Linux</translation> <translation id="2225536596944493418">Наистина ли искате да изтриете <ph name="NUMBER_OF_ITEMS" /> елемента?</translation> <translation id="2230062665678605299">Не можем да създадем папката „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Възстановяване от кошчето</translation> <translation id="2275059641601412272">Преместено.</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Отварят се <ph name="NUMBER_OF_FILES" /> файла.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Исландски</translation> <translation id="8669949407341943408">Извършва се преместване...</translation> <translation id="8698464937041809063">Рисунка в Google</translation> +<translation id="8712637175834984815">Разбрах</translation> <translation id="8713112442029511308">Малтийски</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681">Избрахте <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb index e082be4..7585a67 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">আইসল্যান্ডিক</translation> <translation id="8669949407341943408">সরানো হচ্ছে...</translation> <translation id="8698464937041809063">Google অঙ্কন</translation> +<translation id="8712637175834984815">বুঝেছি</translation> <translation id="8713112442029511308">মল্টিজ</translation> <translation id="8714406895390098252">সাইকেল</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> বেছে নেওয়া হয়েছে।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb index 543d6cf1..74bb46f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instaliraj s Linuxom</translation> <translation id="2225536596944493418">Jeste li sigurni da želite izbrisati sljedeći broj stavki: <ph name="NUMBER_OF_ITEMS" />?</translation> <translation id="2230062665678605299">Kreiranje foldera "<ph name="FOLDER_NAME" />" nije uspjelo. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Vrati iz otpada</translation> <translation id="2275059641601412272">Premješteno.</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Broj fajlova koji se trenutno otvara: <ph name="NUMBER_OF_FILES" />.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">islandski</translation> <translation id="8669949407341943408">Premještanje...</translation> <translation id="8698464937041809063">Google crtež</translation> +<translation id="8712637175834984815">Razumijem</translation> <translation id="8713112442029511308">malteški</translation> <translation id="8714406895390098252">Biciklo</translation> <translation id="8719721339511222681">Odabran je unos <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb index ae5e8bb..cf8b83d1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instal·la per a Linux</translation> <translation id="2225536596944493418">Confirmes que vols suprimir <ph name="NUMBER_OF_ITEMS" /> elements?</translation> <translation id="2230062665678605299">No es pot crear la carpeta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Restaura de la paperera</translation> <translation id="2275059641601412272">S'ha mogut.</translation> <translation id="2288278176040912387">Tocadiscos</translation> <translation id="2291538123825441971">S'estan obrint <ph name="NUMBER_OF_FILES" /> fitxers.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandès</translation> <translation id="8669949407341943408">S'estan traslladant...</translation> <translation id="8698464937041809063">Dibuix de Google</translation> +<translation id="8712637175834984815">Entesos</translation> <translation id="8713112442029511308">Maltès</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">S'ha seleccionat <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb index 2edb009b..18bb4a80 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">islandština</translation> <translation id="8669949407341943408">Přesouvání...</translation> <translation id="8698464937041809063">Nákres Google</translation> +<translation id="8712637175834984815">Hotovo</translation> <translation id="8713112442029511308">maltština</translation> <translation id="8714406895390098252">Kolo</translation> <translation id="8719721339511222681">Vybrali jste položku <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb index 0e8c925..980d6d4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Installer med Linux</translation> <translation id="2225536596944493418">Er du sikker på, at du vil slette <ph name="NUMBER_OF_ITEMS" /> elementer?</translation> <translation id="2230062665678605299">Mappen "<ph name="FOLDER_NAME" />" kunne ikke oprettes. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Gendan fra papirkurven</translation> <translation id="2275059641601412272">Blev flyttet.</translation> <translation id="2288278176040912387">Pladespiller</translation> <translation id="2291538123825441971">Åbner <ph name="NUMBER_OF_FILES" /> filer.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandsk</translation> <translation id="8669949407341943408">Flytter…</translation> <translation id="8698464937041809063">Google-tegning</translation> +<translation id="8712637175834984815">Forstået</translation> <translation id="8713112442029511308">Maltesisk</translation> <translation id="8714406895390098252">Cykel</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> er valgt.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb index 4afeb0b..1484a1e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Isländisch</translation> <translation id="8669949407341943408">Verschieben...</translation> <translation id="8698464937041809063">Google-Zeichnung</translation> +<translation id="8712637175834984815">Alles klar</translation> <translation id="8713112442029511308">Maltesisch</translation> <translation id="8714406895390098252">Fahrrad</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> wurde ausgewählt.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb index 8804dfd..8609dc6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -119,6 +119,7 @@ <translation id="2208919847696382164">Εγκατάσταση με Linux</translation> <translation id="2225536596944493418">Είστε βέβαιοι ότι θέλετε να διαγράψετε <ph name="NUMBER_OF_ITEMS" /> στοιχεία;</translation> <translation id="2230062665678605299">Δεν είναι δυνατή η δημιουργία του φακέλου "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Επαναφορά από τον κάδο</translation> <translation id="2275059641601412272">Μετακινήθηκε.</translation> <translation id="2288278176040912387">Πικάπ</translation> <translation id="2291538123825441971">Άνοιγμα <ph name="NUMBER_OF_FILES" /> αρχείων.</translation> @@ -754,6 +755,7 @@ <translation id="8609695766746872526">Ισλανδικά</translation> <translation id="8669949407341943408">Μετακίνηση…</translation> <translation id="8698464937041809063">Σχέδιο Google</translation> +<translation id="8712637175834984815">Κατάλαβα!</translation> <translation id="8713112442029511308">Μαλτεζικά</translation> <translation id="8714406895390098252">Ποδήλατο</translation> <translation id="8719721339511222681">Επιλογή <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index 6074043..23de1343 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Install with Linux</translation> <translation id="2225536596944493418">Are you sure that you want to delete <ph name="NUMBER_OF_ITEMS" /> items?</translation> <translation id="2230062665678605299">Unable to create folder "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Restore from bin</translation> <translation id="2275059641601412272">Moved.</translation> <translation id="2288278176040912387">Record player</translation> <translation id="2291538123825441971">Opening <ph name="NUMBER_OF_FILES" /> files.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Icelandic</translation> <translation id="8669949407341943408">Moving...</translation> <translation id="8698464937041809063">Google drawing</translation> +<translation id="8712637175834984815">Got it</translation> <translation id="8713112442029511308">Maltese</translation> <translation id="8714406895390098252">Bicycle</translation> <translation id="8719721339511222681">Selected <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb index 2192941..5f74fda 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandés</translation> <translation id="8669949407341943408">Moviendo…</translation> <translation id="8698464937041809063">Dibujo de Google</translation> +<translation id="8712637175834984815">Entendido</translation> <translation id="8713112442029511308">Maltés</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">Se seleccionó <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb index d8caf08c9..1a3d3a0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandés</translation> <translation id="8669949407341943408">Moviendo...</translation> <translation id="8698464937041809063">Dibujo de Google</translation> +<translation id="8712637175834984815">Listo</translation> <translation id="8713112442029511308">Maltés</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">Se ha seleccionado <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb index 7c874dc..5e0a17a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Installi Linuxiga</translation> <translation id="2225536596944493418">Kas soovite <ph name="NUMBER_OF_ITEMS" /> üksust kindlasti kustutada?</translation> <translation id="2230062665678605299">Kausta „<ph name="FOLDER_NAME" />” ei saa luua. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Taasta prügikastist</translation> <translation id="2275059641601412272">Teisaldatud.</translation> <translation id="2288278176040912387">Grammofon</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> faili avamine.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">islandi</translation> <translation id="8669949407341943408">Teisaldamine ...</translation> <translation id="8698464937041809063">Google joonistus</translation> +<translation id="8712637175834984815">Selge</translation> <translation id="8713112442029511308">malta</translation> <translation id="8714406895390098252">Jalgratas</translation> <translation id="8719721339511222681">Valiti <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index ff098d6..5334356 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Islandiarra</translation> <translation id="8669949407341943408">Mugitzen…</translation> <translation id="8698464937041809063">Google-ko marrazkia</translation> +<translation id="8712637175834984815">Ados</translation> <translation id="8713112442029511308">Maltarra</translation> <translation id="8714406895390098252">Bizikleta</translation> <translation id="8719721339511222681">Hautatu da <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb index c738f0a..8d519a74 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">ایسلندی</translation> <translation id="8669949407341943408">در حال انتقال...</translation> <translation id="8698464937041809063">طراحی Google </translation> +<translation id="8712637175834984815">متوجه شدم</translation> <translation id="8713112442029511308">مالتی</translation> <translation id="8714406895390098252">دوچرخه</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> انتخاب شد.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb index 3b15c6f..6902c23 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Asenna Linux-versio</translation> <translation id="2225536596944493418">Haluatko varmasti poistaa <ph name="NUMBER_OF_ITEMS" /> kohdetta?</translation> <translation id="2230062665678605299">Kansiota <ph name="FOLDER_NAME" /> ei voi luoda. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Palauta roskakorista</translation> <translation id="2275059641601412272">Siirretty</translation> <translation id="2288278176040912387">Levysoitin</translation> <translation id="2291538123825441971">Avataan <ph name="NUMBER_OF_FILES" /> tiedostoa.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">islanti</translation> <translation id="8669949407341943408">Siirretään…</translation> <translation id="8698464937041809063">Google-piirros</translation> +<translation id="8712637175834984815">Ymmärretty</translation> <translation id="8713112442029511308">malta</translation> <translation id="8714406895390098252">Polkupyörä</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> valittiin.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb index 7f4085b3..0dd3127f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">I-install gamit ang Linux</translation> <translation id="2225536596944493418">Sigurado ka bang gusto mong i-delete ang <ph name="NUMBER_OF_ITEMS" /> (na) item?</translation> <translation id="2230062665678605299">Hindi malikha ang folder na "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">I-restore mula sa trash</translation> <translation id="2275059641601412272">Nailipat.</translation> <translation id="2288278176040912387">Record player</translation> <translation id="2291538123825441971">Binubuksan ang <ph name="NUMBER_OF_FILES" /> (na) file.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Icelandic</translation> <translation id="8669949407341943408">Inililipat...</translation> <translation id="8698464937041809063">Drawing ng Google</translation> +<translation id="8712637175834984815">Nakuha ko</translation> <translation id="8713112442029511308">Maltese</translation> <translation id="8714406895390098252">Bisikleta</translation> <translation id="8719721339511222681">Pinili ang <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb index 744c43cf..d21a326 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -735,6 +735,7 @@ <translation id="8609695766746872526">Islandais</translation> <translation id="8669949407341943408">Déplacement en cours…</translation> <translation id="8698464937041809063">Dessin Google</translation> +<translation id="8712637175834984815">OK</translation> <translation id="8713112442029511308">Maltais</translation> <translation id="8714406895390098252">Vélo</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> sélectionné.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index 0e7b6c5..eded0c6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandais</translation> <translation id="8669949407341943408">Déplacement en cours…</translation> <translation id="8698464937041809063">Dessin Google</translation> +<translation id="8712637175834984815">OK</translation> <translation id="8713112442029511308">Maltais</translation> <translation id="8714406895390098252">Vélo</translation> <translation id="8719721339511222681">Élément <ph name="ENTRY_NAME" /> sélectionné.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb index 66b972a..b53538c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Islandés</translation> <translation id="8669949407341943408">Movendo...</translation> <translation id="8698464937041809063">Debuxo de Google</translation> +<translation id="8712637175834984815">De acordo</translation> <translation id="8713112442029511308">Maltés</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">Seleccionouse <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb index 0e0e5ed..e6219d7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -732,6 +732,7 @@ <translation id="8609695766746872526">આઇસલેન્ડિક</translation> <translation id="8669949407341943408">ખસેડી રહ્યું છે...</translation> <translation id="8698464937041809063">Google રેખાંકન</translation> +<translation id="8712637175834984815">સમજાઈ ગયું</translation> <translation id="8713112442029511308">માલ્ટીઝ</translation> <translation id="8714406895390098252">સાયકલ</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> પસંદ કર્યું</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb index 03fb91c..4486740 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Linux ऐप्लिकेशन की मदद से इंस्टॉल करें</translation> <translation id="2225536596944493418">क्या आप वाकई <ph name="NUMBER_OF_ITEMS" /> आइटम मिटाना चाहते हैं?</translation> <translation id="2230062665678605299">"<ph name="FOLDER_NAME" />" फ़ोल्डर बनाने में असमर्थ. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">ट्रैश से वापस लाएं</translation> <translation id="2275059641601412272">भेज दिया गया.</translation> <translation id="2288278176040912387">रिकॉर्ड प्लेयर</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> फ़ाइलें खुल रही हैं.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">आइसलैंडिक</translation> <translation id="8669949407341943408">चल रहे...</translation> <translation id="8698464937041809063">Google ड्रॉइंग</translation> +<translation id="8712637175834984815">समझ लिया</translation> <translation id="8713112442029511308">माल्टीज़</translation> <translation id="8714406895390098252">साइकिल</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> को चुना गया.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb index 310b6cc4..d236c12 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instaliranje uz Linux</translation> <translation id="2225536596944493418">Jeste li sigurni da želite izbrisati te stavke (njih <ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Nije moguće izraditi mapu "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Vrati iz otpada</translation> <translation id="2275059641601412272">Premješteno.</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Otvaranje datoteka (<ph name="NUMBER_OF_FILES" />).</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">islandski</translation> <translation id="8669949407341943408">Premještanje...</translation> <translation id="8698464937041809063">Googleov crtež</translation> +<translation id="8712637175834984815">Shvaćam</translation> <translation id="8713112442029511308">malteški</translation> <translation id="8714406895390098252">Bicikl</translation> <translation id="8719721339511222681">Odabrana je stavka <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb index 8212020..8eecd96 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Telepítés Linux segítségével</translation> <translation id="2225536596944493418">Biztosan törli ezt a(z) <ph name="NUMBER_OF_ITEMS" /> elemet?</translation> <translation id="2230062665678605299">Nem sikerült létrehozni a(z) "<ph name="FOLDER_NAME" />" könyvtárat. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Visszaállítás a kukából</translation> <translation id="2275059641601412272">Áthelyezve.</translation> <translation id="2288278176040912387">Lemezjátszó</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> fájl megnyitása.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">izlandi</translation> <translation id="8669949407341943408">Áthelyezés…</translation> <translation id="8698464937041809063">Google-rajz</translation> +<translation id="8712637175834984815">Sikerült</translation> <translation id="8713112442029511308">máltai</translation> <translation id="8714406895390098252">Kerékpár</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> kijelölve.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb index ab68c793..481143b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">իսլանդերեն</translation> <translation id="8669949407341943408">Տեղափոխում...</translation> <translation id="8698464937041809063">Google գծագիր</translation> +<translation id="8712637175834984815">Պատրաստ է</translation> <translation id="8713112442029511308">մալթայերեն</translation> <translation id="8714406895390098252">Հեծանիվ</translation> <translation id="8719721339511222681">Ընտրվեց «<ph name="ENTRY_NAME" />» գրառումը:</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb index 7328b27..f00a1f1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandia</translation> <translation id="8669949407341943408">Memindahkan...</translation> <translation id="8698464937041809063">Gambar Google</translation> +<translation id="8712637175834984815">Mengerti</translation> <translation id="8713112442029511308">Malta</translation> <translation id="8714406895390098252">Sepeda</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> dipilih.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb index 6cdc685b5..c7c8c29d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Íslenska</translation> <translation id="8669949407341943408">Flytur...</translation> <translation id="8698464937041809063">Google teikning</translation> +<translation id="8712637175834984815">Ég skil</translation> <translation id="8713112442029511308">Maltneska</translation> <translation id="8714406895390098252">Bíllaus</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> valið.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb index a9c149e..ae362bb7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Islandese</translation> <translation id="8669949407341943408">Spostamento...</translation> <translation id="8698464937041809063">Disegno Google</translation> +<translation id="8712637175834984815">Fatto</translation> <translation id="8713112442029511308">Maltese</translation> <translation id="8714406895390098252">Bicicletta</translation> <translation id="8719721339511222681">È stato selezionato l'elemento <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index 4032079..e6abe35 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -735,6 +735,7 @@ <translation id="8609695766746872526">איסלנדית</translation> <translation id="8669949407341943408">ההעברה מתבצעת...</translation> <translation id="8698464937041809063">איור של Google</translation> +<translation id="8712637175834984815">הבנתי</translation> <translation id="8713112442029511308">מלטזית</translation> <translation id="8714406895390098252">אופניים</translation> <translation id="8719721339511222681">בחרת את <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb index d2712e450..1cd6bb5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">アイスランド語</translation> <translation id="8669949407341943408">移動しています...</translation> <translation id="8698464937041809063">Google 図形描画</translation> +<translation id="8712637175834984815">閉じる</translation> <translation id="8713112442029511308">マルタ語</translation> <translation id="8714406895390098252">自転車</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> を選択しました。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb index 2a472ae..2a161a30 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">დააინსტალირეთ Linux-ის მეშვეობით</translation> <translation id="2225536596944493418">ნამდვილად გსურთ, წაშალოთ <ph name="NUMBER_OF_ITEMS" /> ერთეული?</translation> <translation id="2230062665678605299">ვერ შეიქმნა საქაღალდე „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">წაშლილებიდან აღდგენა</translation> <translation id="2275059641601412272">გადატანილია.</translation> <translation id="2288278176040912387">ფლეიერი</translation> <translation id="2291538123825441971">მიმდინარეობს <ph name="NUMBER_OF_FILES" /> ფაილის გახსნა.</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">ისლანდიური</translation> <translation id="8669949407341943408">გადატანა...</translation> <translation id="8698464937041809063">Google ნახაზი</translation> +<translation id="8712637175834984815">კარგი</translation> <translation id="8713112442029511308">მალტური</translation> <translation id="8714406895390098252">ველოსიპედი</translation> <translation id="8719721339511222681">არჩეულია <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb index f5d18b8..ee2a41e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Исланд</translation> <translation id="8669949407341943408">Жылжытылуда…</translation> <translation id="8698464937041809063">Google суреті</translation> +<translation id="8712637175834984815">Түсінікті</translation> <translation id="8713112442029511308">Мальта</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> таңдалды.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb index a2e3f11..b9149477 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">ភាសាអ៊ីស្លង់</translation> <translation id="8669949407341943408">កំពុងផ្លាស់ទី...</translation> <translation id="8698464937041809063">គំនូរ Google</translation> +<translation id="8712637175834984815">យល់ហើយ</translation> <translation id="8713112442029511308">ភាសាម៉ាល់តា</translation> <translation id="8714406895390098252">កង់</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ដែលបានជ្រើសរើស។</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index dad8915..738701ce 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -722,6 +722,7 @@ <translation id="8609695766746872526">ಐಸ್ಲ್ಯಾಂಡಿಕ್</translation> <translation id="8669949407341943408">ಸರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="8698464937041809063">Google ರೇಖಾಚಿತ್ರ</translation> +<translation id="8712637175834984815">ಅರ್ಥವಾಯಿತು</translation> <translation id="8713112442029511308">ಮಾಲ್ಟೇಸ್</translation> <translation id="8714406895390098252">ಬೈಸಿಕಲ್</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb index a7dd97b..881bf4ca 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">아이슬란드어</translation> <translation id="8669949407341943408">이동 중...</translation> <translation id="8698464937041809063">Google 드로잉</translation> +<translation id="8712637175834984815">확인</translation> <translation id="8713112442029511308">몰타어</translation> <translation id="8714406895390098252">자전거</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> 항목이 선택되었습니다.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb index 114a830..bee2e15 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Исландча</translation> <translation id="8669949407341943408">Жылдырылууда…</translation> <translation id="8698464937041809063">Google чийүү</translation> +<translation id="8712637175834984815">Түшүндүм</translation> <translation id="8713112442029511308">Малтизче</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> тандалды.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb index e6c3b99..bc20022 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">ຕິດຕັ້ງດ້ວຍ Linux</translation> <translation id="2225536596944493418">ທ່ານແນ່ໃຈບໍ່ວ່າ ທ່ານຕ້ອງການລຶບ <ph name="NUMBER_OF_ITEMS" /> ລາຍການ?</translation> <translation id="2230062665678605299">ບໍ່ສາມາດສ້າງໂຟລເດີ "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /> ໄດ້</translation> +<translation id="2251368349685848079">ກູ້ຄືນຈາກຖັງຂີ້ເຫຍື້ອ</translation> <translation id="2275059641601412272">ຍ້າຍແລ້ວ.</translation> <translation id="2288278176040912387">ເຄື່ອງຫຼິ້ນບັນທຶກ</translation> <translation id="2291538123825441971">ກຳລັງເປີດ <ph name="NUMBER_OF_FILES" /> ໄຟລ໌.</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">ພາສາໄອແລນດິກ</translation> <translation id="8669949407341943408">ກໍາລັງຍ້າຍ...</translation> <translation id="8698464937041809063">ການແຕ້ມຮູບ Google</translation> +<translation id="8712637175834984815">ເຂົ້າໃຈແລ້ວ</translation> <translation id="8713112442029511308">ພາສາມັລທີສ</translation> <translation id="8714406895390098252">ລົດຖີບ</translation> <translation id="8719721339511222681">ເລືອກ <ph name="ENTRY_NAME" /> ແລ້ວ.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb index cbaa65b..84d26cb6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandų k.</translation> <translation id="8669949407341943408">Perkeliama...</translation> <translation id="8698464937041809063">„Google“ piešinys</translation> +<translation id="8712637175834984815">Supratau</translation> <translation id="8713112442029511308">Maltiečių k.</translation> <translation id="8714406895390098252">Dviratis</translation> <translation id="8719721339511222681">Pasirinktas įrašas „<ph name="ENTRY_NAME" />“.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb index 21e11ab..70c4008 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instalēt operētājsistēmā Linux</translation> <translation id="2225536596944493418">Vai tiešām vēlaties dzēst <ph name="NUMBER_OF_ITEMS" /> vienumus?</translation> <translation id="2230062665678605299">Mapi “<ph name="FOLDER_NAME" />” nevar izveidot. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Atjaunot no atkritnes</translation> <translation id="2275059641601412272">Pārvietots.</translation> <translation id="2288278176040912387">Ierakstu atskaņotājs</translation> <translation id="2291538123825441971">Notiek <ph name="NUMBER_OF_FILES" /> failu atvēršana.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandiešu</translation> <translation id="8669949407341943408">Notiek pārvietošana...</translation> <translation id="8698464937041809063">Google zīmējums</translation> +<translation id="8712637175834984815">Sapratu!</translation> <translation id="8713112442029511308">Maltiešu</translation> <translation id="8714406895390098252">Velosipēds</translation> <translation id="8719721339511222681">Atlasīts vienums “<ph name="ENTRY_NAME" />”.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb index fad0a3e8..f1230a9b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Инсталирај со Linux</translation> <translation id="2225536596944493418">Дали сигурно сакате да избришете <ph name="NUMBER_OF_ITEMS" /> ставки?</translation> <translation id="2230062665678605299">Не може да се создаде папка „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Врати од корпа</translation> <translation id="2275059641601412272">Преместено.</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Се отвораат <ph name="NUMBER_OF_FILES" /> датотеки.</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">исландски</translation> <translation id="8669949407341943408">Се преместува...</translation> <translation id="8698464937041809063">Google-цртеж</translation> +<translation id="8712637175834984815">Сфатив</translation> <translation id="8713112442029511308">малтешки</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681">Избрано е <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index 16738cd..73cb2d8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">ഐസ്ലാന്ഡിക്</translation> <translation id="8669949407341943408">നീക്കുന്നു...</translation> <translation id="8698464937041809063">Google ഡ്രോയിംഗ്</translation> +<translation id="8712637175834984815">മനസ്സിലായി</translation> <translation id="8713112442029511308">മാള്ട്ടീസ്</translation> <translation id="8714406895390098252">സൈക്കിള്</translation> <translation id="8719721339511222681">തിരഞ്ഞെടുത്ത <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb index c2237b0..a4435b6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Linux-р суулгах</translation> <translation id="2225536596944493418">Та <ph name="NUMBER_OF_ITEMS" /> зүйлийг устгахдаа итгэлтэй байна уу?</translation> <translation id="2230062665678605299">"<ph name="FOLDER_NAME" /> ". <ph name="ERROR_MESSAGE" /> хавтас үүсгэх боломжгүй байна</translation> +<translation id="2251368349685848079">Хогийн савнаас сэргээх</translation> <translation id="2275059641601412272">Зөөсөн.</translation> <translation id="2288278176040912387">Бичлэг тоглуулагч</translation> <translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> файлыг нээж байна.</translation> @@ -731,6 +732,7 @@ <translation id="8609695766746872526">Исланд</translation> <translation id="8669949407341943408">Зөөж байна...</translation> <translation id="8698464937041809063">Google-ийн зураг</translation> +<translation id="8712637175834984815">Ойлголоо</translation> <translation id="8713112442029511308">Мальта</translation> <translation id="8714406895390098252">Унадаг дугуй</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> сонгогдсон.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb index 2657c38..8cc67fd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">आइसलँडिक</translation> <translation id="8669949407341943408">हलवत आहे...</translation> <translation id="8698464937041809063">Google रेखांकन</translation> +<translation id="8712637175834984815">समजले</translation> <translation id="8713112442029511308">माल्टीज</translation> <translation id="8714406895390098252">सायकल</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> निवडले.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb index c7e1ee44..ea1dfb9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Pasang dengan Linux</translation> <translation id="2225536596944493418">Adakah anda pasti anda mahu memadamkan <ph name="NUMBER_OF_ITEMS" /> item?</translation> <translation id="2230062665678605299">Tidak dapat membuat folder "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Pulihkan daripada sampah</translation> <translation id="2275059641601412272">Dialihkan.</translation> <translation id="2288278176040912387">Pemain Piring Hitam</translation> <translation id="2291538123825441971">Membuka <ph name="NUMBER_OF_FILES" /> fail.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Iceland</translation> <translation id="8669949407341943408">Bergerak...</translation> <translation id="8698464937041809063">Lukisan Google</translation> +<translation id="8712637175834984815">Faham</translation> <translation id="8713112442029511308">Malta</translation> <translation id="8714406895390098252">Basikal</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> dipilih.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb index 24f82e5..1be3ece 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Linux ဖြင့် ထည့်သွင်းရန်</translation> <translation id="2225536596944493418">အကြောင်းအရာ <ph name="NUMBER_OF_ITEMS" />ခုကို ဖျက်လိုသည်မှာ သေချာသလား။</translation> <translation id="2230062665678605299">ဖိုလ်ဒါ "<ph name="FOLDER_NAME" />"ကို ဖန်တီး မရခဲ့ပါ။ <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">အမှိုက်ပုံးမှ ပြန်ယူရန်</translation> <translation id="2275059641601412272">ရွှေ့ထားသည်။</translation> <translation id="2288278176040912387">ကစားသူ မှတ်တမ်းတင်</translation> <translation id="2291538123825441971">ဖိုင် <ph name="NUMBER_OF_FILES" /> ခု ဖွင့်နေသည်။</translation> @@ -733,6 +734,7 @@ <translation id="8609695766746872526">အိုက်စ်လန်</translation> <translation id="8669949407341943408">ရွှေ့ပေးနေ...</translation> <translation id="8698464937041809063">Google ရေးဆွဲခြင်း</translation> +<translation id="8712637175834984815">ရပါပြီ!</translation> <translation id="8713112442029511308">မော်လတာ</translation> <translation id="8714406895390098252">စက်ဘီး</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ကို ရွေးချယ်ထားသည်။</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index cd7c279c..9148b43b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">आइसल्यान्डिक</translation> <translation id="8669949407341943408">सारिँदै छ...</translation> <translation id="8698464937041809063">Google ड्रइङ</translation> +<translation id="8712637175834984815">भयो</translation> <translation id="8713112442029511308">माल्टिज</translation> <translation id="8714406895390098252">साइकल</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> चयन गरियो।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb index 443264ad..b11efae 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -735,6 +735,7 @@ <translation id="8609695766746872526">IJslands</translation> <translation id="8669949407341943408">Verplaatsen…</translation> <translation id="8698464937041809063">Google-tekening</translation> +<translation id="8712637175834984815">Begrepen</translation> <translation id="8713112442029511308">Maltees</translation> <translation id="8714406895390098252">Fiets</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> is geselecteerd.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb index 2ba65e4..9bfa8b6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Installér med Linux</translation> <translation id="2225536596944493418">Er du sikker på at du vil slette <ph name="NUMBER_OF_ITEMS" /> elementer?</translation> <translation id="2230062665678605299">Kunne ikke opprette mappen «<ph name="FOLDER_NAME" />». <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Gjenopprett fra papirkurven</translation> <translation id="2275059641601412272">Flyttet.</translation> <translation id="2288278176040912387">Platespiller</translation> <translation id="2291538123825441971">Åpner <ph name="NUMBER_OF_FILES" /> filer.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandsk</translation> <translation id="8669949407341943408">Flytter …</translation> <translation id="8698464937041809063">Google-tegning</translation> +<translation id="8712637175834984815">Skjønner</translation> <translation id="8713112442029511308">Maltesisk</translation> <translation id="8714406895390098252">Sykkel</translation> <translation id="8719721339511222681">Valgte <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb index e7ccb35..6a78757a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -728,6 +728,7 @@ <translation id="8609695766746872526">ଆଇସଲାଣ୍ଡିକ୍</translation> <translation id="8669949407341943408">ଘୁଞ୍ଚୁଛି …</translation> <translation id="8698464937041809063">Google ଡ୍ରଇଂ</translation> +<translation id="8712637175834984815">ବୁଝିଗଲି</translation> <translation id="8713112442029511308">ମାଲଟିଜ୍</translation> <translation id="8714406895390098252">ସାଇକେଲ୍</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ବଛାଯାଇଛି।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb index 36cf6c9..a7dd061 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">ਆਈਸਲੈਂਡੀ</translation> <translation id="8669949407341943408">ਮੂਵ ਕਰ ਰਿਹਾ ਹੈ...</translation> <translation id="8698464937041809063">Google ਡਰਾਇੰਗ</translation> +<translation id="8712637175834984815">ਸਮਝ ਲਿਆ</translation> <translation id="8713112442029511308">ਮਾਲਟਾਈ</translation> <translation id="8714406895390098252">ਸਾਈਕਲ</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ਨੂੰ ਚੁਣਿਆ ਗਿਆ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb index 193d2e4a..dd791f0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandzki</translation> <translation id="8669949407341943408">Przenoszę...</translation> <translation id="8698464937041809063">Rysunek Google</translation> +<translation id="8712637175834984815">Rozumiem</translation> <translation id="8713112442029511308">Maltański</translation> <translation id="8714406895390098252">Rower</translation> <translation id="8719721339511222681">Zaznaczono element <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index a753d55d..c20005a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandês</translation> <translation id="8669949407341943408">Movendo...</translation> <translation id="8698464937041809063">Desenho do Google</translation> +<translation id="8712637175834984815">Entendi</translation> <translation id="8713112442029511308">Maltês</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">Selecionado: <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb index 83d4a23..6b5c6e2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instalar com o Linux</translation> <translation id="2225536596944493418">Tem a certeza de que pretende eliminar <ph name="NUMBER_OF_ITEMS" /> itens?</translation> <translation id="2230062665678605299">Não é possível criar a pasta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Restaurar do lixo</translation> <translation id="2275059641601412272">Movido.</translation> <translation id="2288278176040912387">Gira-discos</translation> <translation id="2291538123825441971">A abrir <ph name="NUMBER_OF_FILES" /> ficheiros…</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandês</translation> <translation id="8669949407341943408">A mover...</translation> <translation id="8698464937041809063">Desenho do Google</translation> +<translation id="8712637175834984815">Entendido</translation> <translation id="8713112442029511308">Maltês</translation> <translation id="8714406895390098252">Bicicleta</translation> <translation id="8719721339511222681">Selecionou <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb index 80bc0ae8..04a07fc 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instalează cu Linux</translation> <translation id="2225536596944493418">Sigur dorești să ștergi <ph name="NUMBER_OF_ITEMS" /> elemente?</translation> <translation id="2230062665678605299">Nu s-a putut crea dosarul „<ph name="FOLDER_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Restabilește din coșul de gunoi</translation> <translation id="2275059641601412272">Mutat.</translation> <translation id="2288278176040912387">Picup</translation> <translation id="2291538123825441971">Se deschid <ph name="NUMBER_OF_FILES" /> fișiere.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Islandeză</translation> <translation id="8669949407341943408">Se mută...</translation> <translation id="8698464937041809063">Desen Google</translation> +<translation id="8712637175834984815">Am înțeles</translation> <translation id="8713112442029511308">Malteză</translation> <translation id="8714406895390098252">Bicicletă</translation> <translation id="8719721339511222681">S-a selectat <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb index 2043ca1..c24a966 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Исландский</translation> <translation id="8669949407341943408">Перемещение...</translation> <translation id="8698464937041809063">Рисунок Google</translation> +<translation id="8712637175834984815">Готово</translation> <translation id="8713112442029511308">Мальтийский</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681">Выбран объект "<ph name="ENTRY_NAME" />".</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb index 7b39c58..15b6f37 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">අයිස්ලන්ත</translation> <translation id="8669949407341943408">ගෙන යමින්...</translation> <translation id="8698464937041809063">Google ඇඳීම්</translation> +<translation id="8712637175834984815">එය ලැබුණා</translation> <translation id="8713112442029511308">මොල්ටීස්</translation> <translation id="8714406895390098252">බයිසිකල්</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> තෝරන ලදි.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb index 1cfb1fd..28620c5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Islandská klávesnica</translation> <translation id="8669949407341943408">Presúva sa...</translation> <translation id="8698464937041809063">Nákres Google</translation> +<translation id="8712637175834984815">Dobre</translation> <translation id="8713112442029511308">Maltská klávesnica</translation> <translation id="8714406895390098252">Bicykel</translation> <translation id="8719721339511222681">Bola vybraná položka <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb index 03a233a..ad4f3718 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">islandščina</translation> <translation id="8669949407341943408">Premikanje ...</translation> <translation id="8698464937041809063">Googlova risba</translation> +<translation id="8712637175834984815">Razumem</translation> <translation id="8713112442029511308">malteščina</translation> <translation id="8714406895390098252">Kolo</translation> <translation id="8719721339511222681">Izbran je vnos <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb index 4edab678..f4f5a5ca 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Islandisht</translation> <translation id="8669949407341943408">Po zhvendos...</translation> <translation id="8698464937041809063">Vizatimi Google</translation> +<translation id="8712637175834984815">E kuptova</translation> <translation id="8713112442029511308">Maltisht</translation> <translation id="8714406895390098252">Biçikleta</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> u zgjodh.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb index c939cb8..81cbb11c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Instalirajte pomoću Linux-a</translation> <translation id="2225536596944493418">Želite li stvarno da izbrišete stavke (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Nije moguće napraviti direktorijum „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Vrati iz otpada</translation> <translation id="2275059641601412272">Premešteno je.</translation> <translation id="2288278176040912387">Gramofon</translation> <translation id="2291538123825441971">Otvaraju se datoteke (<ph name="NUMBER_OF_FILES" />).</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">islandski</translation> <translation id="8669949407341943408">Premeštanje...</translation> <translation id="8698464937041809063">Google crtež</translation> +<translation id="8712637175834984815">Važi</translation> <translation id="8713112442029511308">malteški</translation> <translation id="8714406895390098252">Bicikl</translation> <translation id="8719721339511222681">Izabrali ste stavku <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb index 64a00819..dcc3286 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Инсталирајте помоћу Linux-а</translation> <translation id="2225536596944493418">Желите ли стварно да избришете ставке (<ph name="NUMBER_OF_ITEMS" />)?</translation> <translation id="2230062665678605299">Није могуће направити директоријум „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Врати из отпада</translation> <translation id="2275059641601412272">Премештено је.</translation> <translation id="2288278176040912387">Грамофон</translation> <translation id="2291538123825441971">Отварају се датотеке (<ph name="NUMBER_OF_FILES" />).</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">исландски</translation> <translation id="8669949407341943408">Премештање...</translation> <translation id="8698464937041809063">Google цртеж</translation> +<translation id="8712637175834984815">Важи</translation> <translation id="8713112442029511308">малтешки</translation> <translation id="8714406895390098252">Бицикл</translation> <translation id="8719721339511222681">Изабрали сте ставку <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb index c50b308..03e7063 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">isländska</translation> <translation id="8669949407341943408">Flyttar …</translation> <translation id="8698464937041809063">Google-teckning</translation> +<translation id="8712637175834984815">Uppfattat</translation> <translation id="8713112442029511308">maltesiska</translation> <translation id="8714406895390098252">Cykel</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> har markerats.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index 105b753..6eacec9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -117,6 +117,7 @@ <translation id="2208919847696382164">Sakinisha ukitumia Linux</translation> <translation id="2225536596944493418">Je, una uhakika ungependa kufuta vipengee <ph name="NUMBER_OF_ITEMS" />?</translation> <translation id="2230062665678605299">Haiwezi kuunda folda "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation> +<translation id="2251368349685848079">Rejesha kutoka kwenye tupio</translation> <translation id="2275059641601412272">Imehamishwa.</translation> <translation id="2288278176040912387">Kicheza rekodi</translation> <translation id="2291538123825441971">Inafungua faili <ph name="NUMBER_OF_FILES" />.</translation> @@ -734,6 +735,7 @@ <translation id="8609695766746872526">Kiaislandi</translation> <translation id="8669949407341943408">Inahamisha...</translation> <translation id="8698464937041809063">Mchoro wa Google</translation> +<translation id="8712637175834984815">Nimeelewa</translation> <translation id="8713112442029511308">Kimalta</translation> <translation id="8714406895390098252">Baiskeli</translation> <translation id="8719721339511222681">Umechagua <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb index 8b1d8d5..cb14ae0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">ஐஸ்லாண்டிக்</translation> <translation id="8669949407341943408">நகர்கிறது...</translation> <translation id="8698464937041809063">Google வரைதல்</translation> +<translation id="8712637175834984815">புரிந்தது</translation> <translation id="8713112442029511308">மால்டீஸ்</translation> <translation id="8714406895390098252">சைக்கிள்</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> தேர்ந்தெடுக்கப்பட்டுள்ளது.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index ff164c2..0d1dcff 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">ఐస్లాండిక్</translation> <translation id="8669949407341943408">తరలించబడుతున్నాయి...</translation> <translation id="8698464937041809063">Google డ్రాయింగ్</translation> +<translation id="8712637175834984815">అర్థమైంది</translation> <translation id="8713112442029511308">మాల్టీస్</translation> <translation id="8714406895390098252">సైకిల్</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> ఎంపిక చేయబడింది.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb index 5509663..3c28188 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">ไอซ์แลนด์</translation> <translation id="8669949407341943408">กำลังย้าย...</translation> <translation id="8698464937041809063">ภาพวาดของ Google</translation> +<translation id="8712637175834984815">สำเร็จ</translation> <translation id="8713112442029511308">มอลตา</translation> <translation id="8714406895390098252">จักรยาน</translation> <translation id="8719721339511222681">เลือก <ph name="ENTRY_NAME" /> ไว้</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb index d310006f..c36e6d8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">İzlandaca</translation> <translation id="8669949407341943408">Taşınıyor...</translation> <translation id="8698464937041809063">Google çizimler</translation> +<translation id="8712637175834984815">Anlaşıldı</translation> <translation id="8713112442029511308">Maltaca</translation> <translation id="8714406895390098252">Bisiklet</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> seçildi.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb index 9fba4f0..f2017f1d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Ісландська</translation> <translation id="8669949407341943408">Переміщення…</translation> <translation id="8698464937041809063">Малюнок Google</translation> +<translation id="8712637175834984815">Виконано</translation> <translation id="8713112442029511308">Мальтійська</translation> <translation id="8714406895390098252">Велосипед</translation> <translation id="8719721339511222681">Вибрано: <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb index 0639bad..ed8977d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">آئس لینڈک</translation> <translation id="8669949407341943408">منتقل کی جا رہی ہیں…</translation> <translation id="8698464937041809063">Google ڈرائنگ</translation> +<translation id="8712637175834984815">سمجھ آ گئی</translation> <translation id="8713112442029511308">مالٹیز</translation> <translation id="8714406895390098252">سائیکل</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> منتخب کیا گیا۔</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb index e5c83c5..f43a662 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Island</translation> <translation id="8669949407341943408">Ko‘chirilmoqda...</translation> <translation id="8698464937041809063">Google-chizmasi</translation> +<translation id="8712637175834984815">Tushunarli</translation> <translation id="8713112442029511308">Malta</translation> <translation id="8714406895390098252">Velosiped</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> tanlandi.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb index d44a4be..34d36de 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">Tiếng Iceland</translation> <translation id="8669949407341943408">Đang di chuyển...</translation> <translation id="8698464937041809063">Bản vẽ Google</translation> +<translation id="8712637175834984815">Bỏ qua</translation> <translation id="8713112442029511308">Tiếng Malta</translation> <translation id="8714406895390098252">Xe đạp</translation> <translation id="8719721339511222681">Đã chọn <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb index 9ddbf57..e64f94a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -729,6 +729,7 @@ <translation id="8609695766746872526">冰岛语</translation> <translation id="8669949407341943408">正在移动…</translation> <translation id="8698464937041809063">Google 绘图</translation> +<translation id="8712637175834984815">知道了</translation> <translation id="8713112442029511308">马耳他语</translation> <translation id="8714406895390098252">自行车</translation> <translation id="8719721339511222681">已选择<ph name="ENTRY_NAME" />。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb index ae0b634..325c60f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">冰島文</translation> <translation id="8669949407341943408">正在移動…</translation> <translation id="8698464937041809063">Google 繪圖</translation> +<translation id="8712637175834984815">我知道了</translation> <translation id="8713112442029511308">馬爾他文</translation> <translation id="8714406895390098252">單車</translation> <translation id="8719721339511222681">揀咗 <ph name="ENTRY_NAME" />。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb index 343e91a5..c94dbef 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -734,6 +734,7 @@ <translation id="8609695766746872526">冰島文</translation> <translation id="8669949407341943408">移動中...</translation> <translation id="8698464937041809063">Google 繪圖</translation> +<translation id="8712637175834984815">我瞭解了</translation> <translation id="8713112442029511308">馬爾他文</translation> <translation id="8714406895390098252">單車</translation> <translation id="8719721339511222681">已選取「<ph name="ENTRY_NAME" />」。</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb index 5cf82a2..36ca5d7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -733,6 +733,7 @@ <translation id="8609695766746872526">Isi-Icelandic</translation> <translation id="8669949407341943408">Iyahambisa...</translation> <translation id="8698464937041809063">Ukudweba kwe-Google</translation> +<translation id="8712637175834984815">Ngiyitholile</translation> <translation id="8713112442029511308">Isi-Maltese</translation> <translation id="8714406895390098252">Ibhayisikili</translation> <translation id="8719721339511222681">Okukhethiwe <ph name="ENTRY_NAME" />.</translation>
diff --git a/ui/file_manager/BUILD.gn b/ui/file_manager/BUILD.gn index f7da23332..7099db5 100644 --- a/ui/file_manager/BUILD.gn +++ b/ui/file_manager/BUILD.gn
@@ -5,7 +5,7 @@ import("//chrome/common/features.gni") import("//third_party/closure_compiler/compile_js.gni") import("//tools/grit/grit_rule.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") grit("resources") { @@ -80,10 +80,10 @@ preprocess_folder = "$target_gen_dir/preprocessed" -# Inline images and move files to the preprocessed folder to combine all -# resources in the same folder to be able to generate the JS bundle. +# Move files to the preprocessed folder to combine all resources in the same +# folder for JS bundling with rollup. # This is for files direct from the src/: input_folder="./". -preprocess_grit("preprocess_static") { +preprocess_if_expr("preprocess_static") { in_folder = "./" out_folder = preprocess_folder @@ -96,7 +96,7 @@ } # This is for files that are generated in "gen/": input_folder=target_gen_dir. -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { in_folder = target_gen_dir out_folder = preprocess_folder
diff --git a/ui/file_manager/externs/background/file_operation_manager.js b/ui/file_manager/externs/background/file_operation_manager.js index 9db8b762..8436bdf 100644 --- a/ui/file_manager/externs/background/file_operation_manager.js +++ b/ui/file_manager/externs/background/file_operation_manager.js
@@ -68,10 +68,9 @@ /** * Restores files from trash. * - * @param {Array<!{name: string, filesEntry: !Entry, infoEntry: !FileEntry}>} - * trashEntries The trash entries. + * @param {Array<!FilesAppEntry>} entries The trash entries. */ - restoreDeleted(trashEntries) {} + restoreDeleted(entries) {} /** * Creates a zip file for the selection of files.
diff --git a/ui/file_manager/externs/file_operation_progress_event.js b/ui/file_manager/externs/file_operation_progress_event.js index 98f550f6..059dfdc 100644 --- a/ui/file_manager/externs/file_operation_progress_event.js +++ b/ui/file_manager/externs/file_operation_progress_event.js
@@ -25,7 +25,7 @@ /** @public {number} */ this.processedBytes; - /** @public {?Array<!fileOperationUtil.TrashEntry>} */ + /** @public {?Array<!FilesAppEntry>} */ this.trashedEntries; } }
diff --git a/ui/file_manager/externs/file_operation_util.js b/ui/file_manager/externs/file_operation_util.js index 034520ba..68a95f6 100644 --- a/ui/file_manager/externs/file_operation_util.js +++ b/ui/file_manager/externs/file_operation_util.js
@@ -12,12 +12,3 @@ /** @enum {string} */ fileOperationUtil.EventRouter.EventType = {}; - -/** - * @typedef {{ - * name: string, - * filesEntry: !Entry, - * infoEntry: !FileEntry - * }} - */ -fileOperationUtil.TrashEntry;
diff --git a/ui/file_manager/file_manager/background/js/BUILD.gn b/ui/file_manager/file_manager/background/js/BUILD.gn index 2ac22a5..b973b74 100644 --- a/ui/file_manager/file_manager/background/js/BUILD.gn +++ b/ui/file_manager/file_manager/background/js/BUILD.gn
@@ -383,6 +383,7 @@ deps = [ ":metadata_proxy", "//ui/file_manager/file_manager/common/js:async_util", + "//ui/file_manager/file_manager/common/js:trash", "//ui/file_manager/file_manager/common/js:util", ] externs_list =
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager.js b/ui/file_manager/file_manager/background/js/file_operation_manager.js index ca3d692..9ee55cbb 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_manager.js +++ b/ui/file_manager/file_manager/background/js/file_operation_manager.js
@@ -531,23 +531,19 @@ /** * Restores files from trash. * - * @param {Array<!fileOperationUtil.TrashEntry>} trashEntries The trash - * entries. + * @param {Array<!TrashEntry>} entries The trash entries. */ - restoreDeleted(trashEntries) { + restoreDeleted(entries) { if (!this.volumeManager_) { volumeManagerFactory.getInstance().then(volumeManager => { this.volumeManager_ = volumeManager; - this.restoreDeleted(trashEntries); + this.restoreDeleted(entries); }); return; } - while (trashEntries.length) { - this.trash_ - .restore( - assert(this.volumeManager_), - /** @type {!TrashEntry} */ (trashEntries.pop())) + while (entries.length) { + this.trash_.restore(assert(this.volumeManager_), entries.pop()) .catch(e => console.error('Error restoring deleted file', e)); } }
diff --git a/ui/file_manager/file_manager/background/js/file_operation_util.js b/ui/file_manager/file_manager/background/js/file_operation_util.js index 97e3784..3ce5e64 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_util.js +++ b/ui/file_manager/file_manager/background/js/file_operation_util.js
@@ -1247,22 +1247,13 @@ /** * @typedef {{ - * name: string, - * filesEntry: !Entry, - * infoEntry: !FileEntry - * }} - */ -fileOperationUtil.TrashEntry; - -/** - * @typedef {{ * entries: Array<Entry>, * taskId: string, * entrySize: Object, * totalBytes: number, * processedBytes: number, * cancelRequested: boolean, - * trashedEntries: Array<!fileOperationUtil.TrashEntry>, + * trashedEntries: Array<!TrashEntry>, * }} */ fileOperationUtil.DeleteTask;
diff --git a/ui/file_manager/file_manager/common/images/icon128.png b/ui/file_manager/file_manager/common/images/icon128.png index a1f75ff1..aa49a39 100644 --- a/ui/file_manager/file_manager/common/images/icon128.png +++ b/ui/file_manager/file_manager/common/images/icon128.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon16.png b/ui/file_manager/file_manager/common/images/icon16.png index c71b1c5..e2017122 100644 --- a/ui/file_manager/file_manager/common/images/icon16.png +++ b/ui/file_manager/file_manager/common/images/icon16.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon192.png b/ui/file_manager/file_manager/common/images/icon192.png index a91ea7d7..c687b69e 100644 --- a/ui/file_manager/file_manager/common/images/icon192.png +++ b/ui/file_manager/file_manager/common/images/icon192.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon256.png b/ui/file_manager/file_manager/common/images/icon256.png index 8ea6dbe9..026a020 100644 --- a/ui/file_manager/file_manager/common/images/icon256.png +++ b/ui/file_manager/file_manager/common/images/icon256.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon32.png b/ui/file_manager/file_manager/common/images/icon32.png index 871427fe..93e5019 100644 --- a/ui/file_manager/file_manager/common/images/icon32.png +++ b/ui/file_manager/file_manager/common/images/icon32.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon48.png b/ui/file_manager/file_manager/common/images/icon48.png index 12ecaf85..ddaaaa50 100644 --- a/ui/file_manager/file_manager/common/images/icon48.png +++ b/ui/file_manager/file_manager/common/images/icon48.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon64.png b/ui/file_manager/file_manager/common/images/icon64.png index 22783cfc1..0e80be2 100644 --- a/ui/file_manager/file_manager/common/images/icon64.png +++ b/ui/file_manager/file_manager/common/images/icon64.png Binary files differ
diff --git a/ui/file_manager/file_manager/common/images/icon96.png b/ui/file_manager/file_manager/common/images/icon96.png index 070057de..92440de 100644 --- a/ui/file_manager/file_manager/common/images/icon96.png +++ b/ui/file_manager/file_manager/common/images/icon96.png Binary files differ
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js index dfd9d64..c8e7162 100644 --- a/ui/file_manager/integration_tests/remote_call.js +++ b/ui/file_manager/integration_tests/remote_call.js
@@ -265,7 +265,7 @@ const elements = await this.callRemoteTestUtil('deepQueryAllElements', appId, [query]); if (elements.length > 0) { - return pending(caller, 'Elements %j is still exists.', elements); + return pending(caller, 'Elements %j still exists.', elements); } return true; });
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc index ba38d82..e5fd0a3 100644 --- a/ui/gfx/mac/io_surface.cc +++ b/ui/gfx/mac/io_surface.cc
@@ -288,11 +288,6 @@ return nullptr; } - // IOSurface clearing causes significant performance regression on about half - // of all devices running Yosemite. https://crbug.com/606850#c22. - if (base::mac::IsOS10_10()) - should_clear = false; - if (should_clear) { // Zero-initialize the IOSurface. Calling IOSurfaceLock/IOSurfaceUnlock // appears to be sufficient. https://crbug.com/584760#c17
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm index fc60478..bc8aeaad 100644 --- a/ui/gfx/platform_font_mac.mm +++ b/ui/gfx/platform_font_mac.mm
@@ -126,63 +126,26 @@ // Converts a Font::Weight value to the corresponding NSFontWeight value. NSFontWeight ToNSFontWeight(Weight weight) { - if (@available(macOS 10.11, *)) { - switch (weight) { - case Weight::THIN: - return NSFontWeightUltraLight; - case Weight::EXTRA_LIGHT: - return NSFontWeightThin; - case Weight::LIGHT: - return NSFontWeightLight; - case Weight::INVALID: - case Weight::NORMAL: - return NSFontWeightRegular; - case Weight::MEDIUM: - return NSFontWeightMedium; - case Weight::SEMIBOLD: - return NSFontWeightSemibold; - case Weight::BOLD: - return NSFontWeightBold; - case Weight::EXTRA_BOLD: - return NSFontWeightHeavy; - case Weight::BLACK: - return NSFontWeightBlack; - } - } else { - // See third_party/blink/renderer/platform/fonts/mac/font_matcher_mac.mm. - uint64_t int_value = 0; - switch (weight) { - case Weight::THIN: - int_value = 0xbfe99999a0000000; // NSFontWeightUltraLight; - break; - case Weight::EXTRA_LIGHT: - int_value = 0xbfe3333340000000; // NSFontWeightThin; - break; - case Weight::LIGHT: - int_value = 0xbfd99999a0000000; // NSFontWeightLight; - break; - case Weight::INVALID: - case Weight::NORMAL: - int_value = 0x0000000000000000; // NSFontWeightRegular; - break; - case Weight::MEDIUM: - int_value = 0x3fcd70a3e0000000; // NSFontWeightMedium; - break; - case Weight::SEMIBOLD: - int_value = 0x3fd3333340000000; // NSFontWeightSemibold; - break; - case Weight::BOLD: - int_value = 0x3fd99999a0000000; // NSFontWeightBold; - break; - case Weight::EXTRA_BOLD: - int_value = 0x3fe1eb8520000000; // NSFontWeightHeavy; - break; - case Weight::BLACK: - int_value = 0x3fe3d70a40000000; // NSFontWeightBlack; - break; - } - - return bit_cast<CGFloat>(int_value); + switch (weight) { + case Weight::THIN: + return NSFontWeightUltraLight; + case Weight::EXTRA_LIGHT: + return NSFontWeightThin; + case Weight::LIGHT: + return NSFontWeightLight; + case Weight::INVALID: + case Weight::NORMAL: + return NSFontWeightRegular; + case Weight::MEDIUM: + return NSFontWeightMedium; + case Weight::SEMIBOLD: + return NSFontWeightSemibold; + case Weight::BOLD: + return NSFontWeightBold; + case Weight::EXTRA_BOLD: + return NSFontWeightHeavy; + case Weight::BLACK: + return NSFontWeightBlack; } } @@ -356,13 +319,8 @@ // versions of the macOS. if (system_font_type_ == SystemFontType::kGeneral) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - // +[NSFont systemFontOfSize:weight:] is declared as available on 10.11+, - // but actually it is there and works on 10.10. NSFont* derived = [NSFont systemFontOfSize:font_spec_.size + size_delta weight:ToNSFontWeight(weight)]; -#pragma clang diagnostic pop NSFontTraitMask italic_trait_mask = (style & Font::ITALIC) ? NSItalicFontMask : NSUnitalicFontMask; derived = [[NSFontManager sharedFontManager] convertFont:derived @@ -559,16 +517,9 @@ // If that doesn't find a font, whip up a system font to stand in for the // specified font. - if (@available(macOS 10.11, *)) { - font = [NSFont systemFontOfSize:font_spec.size - weight:ToNSFontWeight(font_spec.weight)]; - return [font_manager convertFont:font toHaveTrait:traits]; - } else { - font = [NSFont systemFontOfSize:font_spec.size]; - if (font_spec.weight >= Weight::BOLD) - traits |= NSBoldFontMask; - return [font_manager convertFont:font toHaveTrait:traits]; - } + font = [NSFont systemFontOfSize:font_spec.size + weight:ToNSFontWeight(font_spec.weight)]; + return [font_manager convertFont:font toHaveTrait:traits]; } ////////////////////////////////////////////////////////////////////////////////
diff --git a/ui/gfx/platform_font_mac_unittest.mm b/ui/gfx/platform_font_mac_unittest.mm index 0f812e9..ca6e523 100644 --- a/ui/gfx/platform_font_mac_unittest.mm +++ b/ui/gfx/platform_font_mac_unittest.mm
@@ -8,7 +8,6 @@ #include <stddef.h> #import "base/mac/foundation_util.h" -#include "base/mac/mac_util.h" #include "base/mac/scoped_cftyperef.h" #include "base/stl_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -174,16 +173,8 @@ EXPECT_EQ(static_cast<int>(Weight::LIGHT), DerivedIntWeight(Weight::LIGHT)); EXPECT_EQ(static_cast<int>(Weight::NORMAL), DerivedIntWeight(Weight::NORMAL)); EXPECT_EQ(static_cast<int>(Weight::MEDIUM), DerivedIntWeight(Weight::MEDIUM)); - if (base::mac::IsAtMostOS10_10()) { - // If a SEMIBOLD system font is requested, 10.10 will return the bold system - // font, but somehow bearing a weight number of 0.24, which is really a - // medium weight (0.23). - EXPECT_EQ(static_cast<int>(Weight::MEDIUM), - DerivedIntWeight(Weight::SEMIBOLD)); - } else { - EXPECT_EQ(static_cast<int>(Weight::SEMIBOLD), - DerivedIntWeight(Weight::SEMIBOLD)); - } + EXPECT_EQ(static_cast<int>(Weight::SEMIBOLD), + DerivedIntWeight(Weight::SEMIBOLD)); EXPECT_EQ(static_cast<int>(Weight::BOLD), DerivedIntWeight(Weight::BOLD)); EXPECT_EQ(static_cast<int>(Weight::EXTRA_BOLD), DerivedIntWeight(Weight::EXTRA_BOLD));
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index 57b1861..3b51d25 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc
@@ -6043,13 +6043,6 @@ TEST_F(RenderTextTest, Multiline_ZeroWidthChars) { RenderTextHarfBuzz* render_text = GetRenderText(); -#if defined(OS_APPLE) - // Don't use Helvetica Neue on 10.10 - it has a buggy zero-width space that - // actually gets some width. See http://crbug.com/799333. - if (base::mac::IsOS10_10()) - render_text->SetFontList(FontList("Arial, 12px")); -#endif - render_text->SetMultiline(true); render_text->SetWordWrapBehavior(WRAP_LONG_WORDS);
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn index 3b99a1d..eb945083 100644 --- a/ui/gl/BUILD.gn +++ b/ui/gl/BUILD.gn
@@ -512,6 +512,15 @@ if (use_ozone) { deps += [ "//ui/ozone" ] } + + public_configs = [] + + # If the run-time search path isn't set properly when we use ANGLE with its + # Vulkan backend, it may end up finding the system libvulkan.so rather than + # the one built in the output directory + if ((is_linux || is_chromeos) && !is_component_build) { + public_configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ] + } } source_set("run_all_unittests") {
diff --git a/ui/gl/test/gl_image_zero_initialize_test_template.h b/ui/gl/test/gl_image_zero_initialize_test_template.h index 57fd4b0..01996092 100644 --- a/ui/gl/test/gl_image_zero_initialize_test_template.h +++ b/ui/gl/test/gl_image_zero_initialize_test_template.h
@@ -21,13 +21,6 @@ if (this->delegate_.SkipTest()) return; -#if defined(OS_APPLE) - // This functionality is disabled on Yosemite because it is suspected of - // causing performance regressions on old hardware. https://crbug.com/606850. - if (base::mac::IsOS10_10()) - return; -#endif - const gfx::Size image_size(256, 256); GLuint framebuffer =
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc index 72835ffb..7911a1f 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -305,6 +305,7 @@ // Wayland sends locations in DIP so they need to be translated to // physical pixels. + UpdateCursorPositionFromEvent(Event::Clone(*event)); event->AsLocatedEvent()->set_location_f(gfx::ScalePoint( event->AsLocatedEvent()->location_f(), buffer_scale(), buffer_scale())); @@ -500,10 +501,6 @@ uint32_t WaylandWindow::DispatchEventToDelegate( const PlatformEvent& native_event) { - auto* event = static_cast<Event*>(native_event); - if (event->IsLocatedEvent()) - UpdateCursorPositionFromEvent(Event::Clone(*event)); - bool handled = DispatchEventFromNativeUiEvent( native_event, base::BindOnce(&PlatformWindowDelegate::DispatchEvent, base::Unretained(delegate_)));
diff --git a/ui/shell_dialogs/select_file_dialog_mac_unittest.mm b/ui/shell_dialogs/select_file_dialog_mac_unittest.mm index 8d983f5..d6c7e74 100644 --- a/ui/shell_dialogs/select_file_dialog_mac_unittest.mm +++ b/ui/shell_dialogs/select_file_dialog_mac_unittest.mm
@@ -428,10 +428,6 @@ // Verify that multiple file dialogs are corrected handled. TEST_F(SelectFileDialogMacTest, MultipleDialogs) { - // TODO(https://crbug.com/852536): Test fails on 10.10. - if (base::mac::IsOS10_10()) - return; - FileDialogArguments args(GetDefaultArguments()); SelectFileWithParams(args); NSSavePanel* panel1 = GetPanel();
diff --git a/ui/snapshot/snapshot_mac_unittest.mm b/ui/snapshot/snapshot_mac_unittest.mm index a882333..9feeb03 100644 --- a/ui/snapshot/snapshot_mac_unittest.mm +++ b/ui/snapshot/snapshot_mac_unittest.mm
@@ -8,7 +8,6 @@ #include <memory> -#include "base/mac/mac_util.h" #include "base/mac/scoped_nsobject.h" #include "testing/platform_test.h" #import "ui/base/test/cocoa_helper.h" @@ -20,11 +19,8 @@ typedef CocoaTest GrabWindowSnapshotTest; -TEST_F(GrabWindowSnapshotTest, TestGrabWindowSnapshot) { - // TODO(https://crbug.com/685088): This test fails on MacOS 10.11 and above. - if (base::mac::IsAtLeastOS10_11()) - return; - +// TODO(https://crbug.com/685088): This test fails. +TEST_F(GrabWindowSnapshotTest, DISABLED_TestGrabWindowSnapshot) { // Launch a test window so we can take a snapshot. NSRect frame = NSMakeRect(0, 0, 400, 400); NSWindow* window = test_window();
diff --git a/ui/views/cocoa/drag_drop_client_mac_unittest.mm b/ui/views/cocoa/drag_drop_client_mac_unittest.mm index 8fb1b38..3cd6eff 100644 --- a/ui/views/cocoa/drag_drop_client_mac_unittest.mm +++ b/ui/views/cocoa/drag_drop_client_mac_unittest.mm
@@ -45,8 +45,7 @@ @property BOOL animatesToDestination; @property NSInteger numberOfValidItemsForDrop; @property NSDraggingFormation draggingFormation; -@property(readonly) - NSSpringLoadingHighlight springLoadingHighlight API_AVAILABLE(macos(10.11)); +@property(readonly) NSSpringLoadingHighlight springLoadingHighlight; @end
diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.mm b/ui/views/controls/menu/menu_runner_impl_cocoa.mm index 5bcbcb4..08f92a2 100644 --- a/ui/views/controls/menu/menu_runner_impl_cocoa.mm +++ b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
@@ -54,17 +54,6 @@ [[NSMutableAttributedString alloc] initWithString:badge_text attributes:badge_attrs]; - if (base::mac::IsOS10_10()) { - // The system font for 10.10 is Helvetica Neue, and when used for this - // "new tag" the letters look cramped. Track it out so that there's some - // breathing room. There is no tracking attribute, so instead add kerning - // to all but the last character. - [badge_attr_string - addAttribute:NSKernAttributeName - value:@0.4 - range:NSMakeRange(0, [badge_attr_string length] - 1)]; - } - // 2. Calculate the size required. NSSize badge_size = [badge_attr_string size]; @@ -105,28 +94,6 @@ } // namespace -@interface NewTagAttachmentCell : NSTextAttachmentCell -@end - -@implementation NewTagAttachmentCell - -- (instancetype)init { - if (self = [super init]) { - self.image = NewTagImage(); - } - return self; -} - -- (NSPoint)cellBaselineOffset { - return NSMakePoint(0, views::NewBadge::kNewBadgeBaslineOffsetMac); -} - -- (NSSize)cellSize { - return [self.image size]; -} - -@end - @interface MenuControllerDelegate : NSObject <MenuControllerCocoaDelegate> @end @@ -140,13 +107,12 @@ if (!feature_enabled || !model->IsNewFeatureAt(index)) return; - // TODO(avi): When moving to 10.11 as the minimum macOS, switch to using - // NSTextAttachment's |image| and |bounds| properties and avoid the whole - // NSTextAttachmentCell subclassing mishegas. - base::scoped_nsobject<NSTextAttachment> attachment( - [[NSTextAttachment alloc] init]); - attachment.get().attachmentCell = - [[[NewTagAttachmentCell alloc] init] autorelease]; + NSTextAttachment* attachment = + [[[NSTextAttachment alloc] initWithData:nil ofType:nil] autorelease]; + attachment.image = NewTagImage(); + NSSize newTagSize = attachment.image.size; + attachment.bounds = NSMakeRect(0, views::NewBadge::kNewBadgeBaselineOffsetMac, + newTagSize.width, newTagSize.height); // Starting in 10.13, if an attributed string is set as a menu item title, and // NSFontAttributeName is not specified for it, it is automatically rendered
diff --git a/ui/views/controls/menu/new_badge.h b/ui/views/controls/menu/new_badge.h index 89c0602..478c67f 100644 --- a/ui/views/controls/menu/new_badge.h +++ b/ui/views/controls/menu/new_badge.h
@@ -67,7 +67,7 @@ static constexpr int kNewBadgeInternalPaddingTopMac = 1; // The baseline offset of the "new" badge image to the menu text baseline. - static constexpr int kNewBadgeBaslineOffsetMac = -4; + static constexpr int kNewBadgeBaselineOffsetMac = -4; // The corner radius of the rounded rect for the "new" badge. static constexpr int kNewBadgeCornerRadius = 3;
diff --git a/ui/views/view.cc b/ui/views/view.cc index a7fecf7..61991cf 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -362,8 +362,7 @@ } OnBoundsChanged(prev); - if (bounds_ != prev) - NotifyAccessibilityEvent(ax::mojom::Event::kLocationChanged, false); + NotifyAccessibilityEvent(ax::mojom::Event::kLocationChanged, false); if (needs_layout_ || is_size_changed) { needs_layout_ = false;
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm index 7a9ea8e..196458c 100644 --- a/ui/views/widget/native_widget_mac_unittest.mm +++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -433,8 +433,6 @@ // Test minimized states triggered externally, implied visibility and restored // bounds whilst minimized. TEST_F(NativeWidgetMacTest, MiniaturizeExternally) { - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 Widget* widget = new Widget; Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW); widget->Init(std::move(init_params)); @@ -834,10 +832,6 @@ // deminiaturize on the parent window (after attempting to show the child while // the parent was miniaturized). TEST_F(NativeWidgetMacTest, VisibleAfterNativeParentDeminiaturize) { - // Disabled on 10.10 due to flakes. See http://crbug.com/777247. - if (base::mac::IsOS10_10()) - return; - NSWindow* native_parent = MakeBorderlessNativeParent(); [native_parent makeKeyAndOrderFront:nil]; [native_parent miniaturize:nil];
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc index 0824512..c32b7760 100644 --- a/ui/views/widget/widget_unittest.cc +++ b/ui/views/widget/widget_unittest.cc
@@ -1217,11 +1217,6 @@ #else TEST_F(DesktopWidgetTest, GetWindowPlacement) { #endif -#if defined(OS_APPLE) - if (base::mac::IsOS10_10()) - return; // Fails when swarmed. http://crbug.com/660582 -#endif - SKIP_TEST_IF_NOT_OZONE_X11(); WidgetAutoclosePtr widget;
diff --git a/ui/webui/resources/cr_components/BUILD.gn b/ui/webui/resources/cr_components/BUILD.gn index caec6ea3..607d5cb6 100644 --- a/ui/webui/resources/cr_components/BUILD.gn +++ b/ui/webui/resources/cr_components/BUILD.gn
@@ -4,7 +4,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") import("//ui/webui/webui_features.gni") @@ -37,7 +37,7 @@ ] } -preprocess_grit("preprocess_src") { +preprocess_if_expr("preprocess_src") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_src_manifest" @@ -52,7 +52,7 @@ } } -preprocess_grit("preprocess_mojom") { +preprocess_if_expr("preprocess_mojom") { deps = [ "//ui/webui/resources/cr_components/customize_themes:mojom_webui_js" ] in_folder = "$root_gen_dir/mojom-webui/ui/webui/resources/cr_components" @@ -61,7 +61,7 @@ in_files = [ "customize_themes/customize_themes.mojom-webui.js" ] } -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { deps = [ ":polymer3_elements" ] in_folder = target_gen_dir out_folder = "$preprocess_folder" @@ -151,7 +151,7 @@ } } -preprocess_grit("preprocess_polymer2") { +preprocess_if_expr("preprocess_polymer2") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_polymer2_manifest"
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_browser_proxy.js b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_browser_proxy.js index 57e3428e..f4ca727 100644 --- a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_browser_proxy.js +++ b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_browser_proxy.js
@@ -17,6 +17,7 @@ * * @typedef {{ * certProfileId: string, + * certProfileName: string, * isDeviceWide: boolean, * status: string, * stateId: number,
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_details_dialog.html b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_details_dialog.html index fba5360..f5bb6a4 100644 --- a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_details_dialog.html +++ b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_details_dialog.html
@@ -30,7 +30,7 @@ <div slot="body"> <div class="two-line"> <div class="label">[[i18n('certificateProvisioningProfile')]]</div> - <div class="value">[[model.certProfileId]]</div> + <div class="value">[[model.certProfileName]]</div> </div> <div class="button-box"> <div class="two-line flex">
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_entry.html b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_entry.html index c2efcda5f..70f3a562 100644 --- a/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_entry.html +++ b/ui/webui/resources/cr_components/certificate_manager/certificate_provisioning_entry.html
@@ -8,7 +8,7 @@ } </style> <div class="cert-box"> - <div class="flex" tabindex="0">[[model.certProfileId]]</div> + <div class="flex" tabindex="0">[[model.certProfileName]]</div> <cr-icon-button class="icon-more-vert" id="dots" title="[[i18n('moreActions')]]" on-click="onDotsClick_"> </cr-icon-button>
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn index e3c8c8c..1f11568 100644 --- a/ui/webui/resources/cr_elements/BUILD.gn +++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -4,7 +4,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//tools/polymer/html_to_js.gni") import("//tools/polymer/polymer.gni") import("//ui/webui/resources/tools/generate_grd.gni") @@ -35,14 +35,14 @@ ] } -preprocess_grit("preprocess_src") { +preprocess_if_expr("preprocess_src") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_src_manifest" in_files = [ "cr_splitter/cr_splitter.js" ] } -preprocess_grit("preprocess_polymer2") { +preprocess_if_expr("preprocess_polymer2") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_polymer2_manifest" @@ -155,7 +155,7 @@ } } -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { deps = [ ":polymer3_elements" ] in_folder = target_gen_dir out_folder = "$preprocess_folder"
diff --git a/ui/webui/resources/css/BUILD.gn b/ui/webui/resources/css/BUILD.gn index 755e164..b35d51f 100644 --- a/ui/webui/resources/css/BUILD.gn +++ b/ui/webui/resources/css/BUILD.gn
@@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") include_polymer = !is_android && !is_ios @@ -18,7 +18,7 @@ resource_path_prefix = "css" } -preprocess_grit("preprocess_src") { +preprocess_if_expr("preprocess_src") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_src_manifest"
diff --git a/ui/webui/resources/js/BUILD.gn b/ui/webui/resources/js/BUILD.gn index 43a84f0..190efd1 100644 --- a/ui/webui/resources/js/BUILD.gn +++ b/ui/webui/resources/js/BUILD.gn
@@ -4,7 +4,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") import("../tools/js_modulizer.gni") @@ -33,7 +33,7 @@ ] } -preprocess_grit("preprocess_src") { +preprocess_if_expr("preprocess_src") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_src_manifest" @@ -72,7 +72,7 @@ } } -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { deps = [ ":modulize" ] in_folder = target_gen_dir out_folder = "$preprocess_folder"
diff --git a/ui/webui/resources/js/cr/ui/BUILD.gn b/ui/webui/resources/js/cr/ui/BUILD.gn index f0d46fdf..d8fe3d7 100644 --- a/ui/webui/resources/js/cr/ui/BUILD.gn +++ b/ui/webui/resources/js/cr/ui/BUILD.gn
@@ -4,7 +4,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/preprocess_grit.gni") +import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") import("../../../tools/js_modulizer.gni") import("../../cr.gni") @@ -31,7 +31,7 @@ ] } -preprocess_grit("preprocess_src") { +preprocess_if_expr("preprocess_src") { in_folder = "./" out_folder = "$preprocess_folder" out_manifest = "$target_gen_dir/$preprocess_src_manifest" @@ -80,7 +80,7 @@ } } -preprocess_grit("preprocess_generated") { +preprocess_if_expr("preprocess_generated") { deps = [ ":modulize" ] in_folder = target_gen_dir out_folder = "$preprocess_folder"
diff --git a/ui/webui/resources/tools/generate_grd.py b/ui/webui/resources/tools/generate_grd.py index 177f94f..1b01dc7 100644 --- a/ui/webui/resources/tools/generate_grd.py +++ b/ui/webui/resources/tools/generate_grd.py
@@ -5,7 +5,7 @@ # Generates a grit grd file from a list of input manifest files. This is useful # for preventing the need to list JS files in multiple locations, as files can # be listed just once in the BUILD.gn file as inputs for a build rule that knows -# how to output such a manifest (e.g. preprocess_grit). +# how to output such a manifest (e.g. preprocess_if_expr). # # Variables: # manifest-files:
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn index 8e28d9f..5a5cb5e 100644 --- a/weblayer/BUILD.gn +++ b/weblayer/BUILD.gn
@@ -652,6 +652,7 @@ "//components/security_interstitials/core:unsafe_resource", "//components/security_interstitials/core/", "//components/security_state/content/android", + "//components/subresource_filter/android", "//components/translate/content/android", "//components/version_info/android:channel_getter", "//services/resource_coordinator/public/cpp/memory_instrumentation:browser",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS index 3e1706b7..4e0aa99e 100644 --- a/weblayer/browser/DEPS +++ b/weblayer/browser/DEPS
@@ -59,6 +59,7 @@ "+components/ssl_errors", "+components/startup_metric_utils", "+components/strings", + "+components/subresource_filter/android", "+components/subresource_filter/content/browser", "+components/subresource_filter/core/browser", "+components/subresource_filter/core/common",
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/RegisterExternalExperimentIdsTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/RegisterExternalExperimentIdsTest.java index 81a225b..59ba75a 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/RegisterExternalExperimentIdsTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/RegisterExternalExperimentIdsTest.java
@@ -23,12 +23,9 @@ * Assertions for WebLayer.registerExternalExperimentIDs(). */ // The flags are necessary for the following reasons: -// force-enable-metrics-reporting: forces metrics to be enabled. Without this, whether metrics are -// enabled depends upon the android version and system. The test needs metrics to be enabled. // host-resolver-rules: to make 'google.com' redirect to the port created by TestWebServer. // ignore-certificate-errors: TestWebServer doesn't have a real cert. -@CommandLineFlags.Add({"force-enable-metrics-reporting", "host-resolver-rules='MAP * 127.0.0.1'", - "ignore-certificate-errors"}) +@CommandLineFlags.Add({"host-resolver-rules='MAP * 127.0.0.1'", "ignore-certificate-errors"}) @RunWith(WebLayerJUnit4ClassRunner.class) public class RegisterExternalExperimentIdsTest { @Rule
diff --git a/weblayer/browser/android/metrics/metrics_browsertest.cc b/weblayer/browser/android/metrics/metrics_browsertest.cc index 60892c7..d31ff53 100644 --- a/weblayer/browser/android/metrics/metrics_browsertest.cc +++ b/weblayer/browser/android/metrics/metrics_browsertest.cc
@@ -11,11 +11,13 @@ #include "base/test/bind.h" #include "components/metrics/log_decoder.h" #include "components/metrics/metrics_log_uploader.h" +#include "components/metrics/metrics_service.h" #include "components/metrics/metrics_switches.h" #include "content/public/test/browser_test_utils.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" #include "weblayer/browser/android/metrics/metrics_test_helper.h" #include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" +#include "weblayer/browser/browser_list.h" #include "weblayer/browser/profile_impl.h" #include "weblayer/public/navigation_controller.h" #include "weblayer/public/profile.h" @@ -46,7 +48,7 @@ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); command_line->AppendSwitch(metrics::switches::kForceEnableMetricsReporting); - InstallTestGmsBridge(HasUserConsent(), + InstallTestGmsBridge(GetConsentType(), base::BindRepeating(&MetricsBrowserTest::OnLogMetrics, base::Unretained(this))); WebLayerMetricsServiceClient::GetInstance()->SetFastStartupForTesting(true); @@ -80,7 +82,7 @@ size_t GetNumLogs() const { return metrics_logs_.size(); } - virtual bool HasUserConsent() { return true; } + virtual ConsentType GetConsentType() { return ConsentType::kConsent; } private: std::unique_ptr<Profile> profile_; @@ -197,7 +199,7 @@ } class MetricsBrowserTestWithUserOptOut : public MetricsBrowserTest { - bool HasUserConsent() override { return false; } + ConsentType GetConsentType() override { return ConsentType::kNoConsent; } }; IN_PROC_BROWSER_TEST_F(MetricsBrowserTestWithUserOptOut, MetricsNotRecorded) { @@ -205,4 +207,22 @@ ASSERT_EQ(0u, GetNumLogs()); } +class MetricsBrowserTestWithConfigurableConsent : public MetricsBrowserTest { + ConsentType GetConsentType() override { return ConsentType::kDelayConsent; } +}; + +IN_PROC_BROWSER_TEST_F(MetricsBrowserTestWithConfigurableConsent, + IsInForegroundWhenConsentGiven) { + // There should be at least one browser which is resumed. This is the trigger + // for whether the MetricsService is considered in the foreground. + EXPECT_TRUE(BrowserList::GetInstance()->HasAtLeastOneResumedBrowser()); + RunConsentCallback(true); + // RunConsentCallback() should trigger the MetricsService to start. + EXPECT_TRUE(WebLayerMetricsServiceClient::GetInstance() + ->GetMetricsServiceIfStarted()); + EXPECT_TRUE(WebLayerMetricsServiceClient::GetInstance() + ->GetMetricsService() + ->IsInForegroundForTesting()); +} + } // namespace weblayer
diff --git a/weblayer/browser/android/metrics/metrics_test_helper.cc b/weblayer/browser/android/metrics/metrics_test_helper.cc index d41b1eb..02dae4ec 100644 --- a/weblayer/browser/android/metrics/metrics_test_helper.cc +++ b/weblayer/browser/android/metrics/metrics_test_helper.cc
@@ -31,11 +31,11 @@ } // namespace -void InstallTestGmsBridge(bool has_user_consent, +void InstallTestGmsBridge(ConsentType consent_type, const OnLogsMetricsCallback on_log_metrics) { GetOnLogMetricsCallback() = on_log_metrics; Java_MetricsTestHelper_installTestGmsBridge( - base::android::AttachCurrentThread(), has_user_consent); + base::android::AttachCurrentThread(), static_cast<int>(consent_type)); } void RemoveTestGmsBridge() { @@ -44,6 +44,11 @@ GetOnLogMetricsCallback().Reset(); } +void RunConsentCallback(bool has_consent) { + Java_MetricsTestHelper_runConsentCallback( + base::android::AttachCurrentThread(), has_consent); +} + ProfileImpl* CreateProfile(const std::string& name) { DCHECK(!GetProfileByName(name)); JNIEnv* env = base::android::AttachCurrentThread();
diff --git a/weblayer/browser/android/metrics/metrics_test_helper.h b/weblayer/browser/android/metrics/metrics_test_helper.h index ed398ce..2af4af7 100644 --- a/weblayer/browser/android/metrics/metrics_test_helper.h +++ b/weblayer/browser/android/metrics/metrics_test_helper.h
@@ -18,15 +18,29 @@ using OnLogsMetricsCallback = base::RepeatingCallback<void(metrics::ChromeUserMetricsExtension)>; +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.weblayer_private +// GENERATED_JAVA_CLASS_NAME_OVERRIDE: ConsentType +enum class ConsentType { + kConsent, + kNoConsent, + // If this is supplied to InstallTestGmsBridge(), the callback used to + // determine if consent is given is not automatically called. Use + // RunConsentCallback() to apply consent. + kDelayConsent, +}; + // Call this in the SetUp() test harness method to install the test // GmsBridge and to set the metrics user consent state. void InstallTestGmsBridge( - bool has_user_consent, + ConsentType consent_type, const OnLogsMetricsCallback on_log_metrics = OnLogsMetricsCallback()); // Call this in the TearDown() test harness method to remove the GmsBridge. void RemoveTestGmsBridge(); +// See comment for kDelayConsent. +void RunConsentCallback(bool has_consent); + // See Profile::Create()'s comments for the semantics of |name|. ProfileImpl* CreateProfile(const std::string& name);
diff --git a/weblayer/browser/android/metrics/ukm_browsertest.cc b/weblayer/browser/android/metrics/ukm_browsertest.cc index e19898e6..4c82cde 100644 --- a/weblayer/browser/android/metrics/ukm_browsertest.cc +++ b/weblayer/browser/android/metrics/ukm_browsertest.cc
@@ -17,7 +17,8 @@ class UkmBrowserTest : public WebLayerBrowserTest { public: void SetUp() override { - InstallTestGmsBridge(user_consent_); + InstallTestGmsBridge(user_consent_ ? ConsentType::kConsent + : ConsentType::kNoConsent); WebLayerBrowserTest::SetUp(); }
diff --git a/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc b/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc index 59f70bdc..cf70359 100644 --- a/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc +++ b/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc
@@ -15,11 +15,13 @@ #include "components/metrics/metrics_provider.h" #include "components/metrics/metrics_service.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" +#include "components/ukm/ukm_service.h" #include "components/variations/variations_ids_provider.h" #include "components/version_info/android/channel_getter.h" #include "content/public/browser/browser_context.h" #include "google_apis/google_api_keys.h" #include "weblayer/browser/browser_context_impl.h" +#include "weblayer/browser/browser_list.h" #include "weblayer/browser/java/jni/MetricsServiceClient_jni.h" #include "weblayer/browser/system_network_context_manager.h" #include "weblayer/browser/tab_impl.h" @@ -80,9 +82,11 @@ WebLayerMetricsServiceClient::WebLayerMetricsServiceClient() { ProfileImpl::AddProfileObserver(this); + BrowserList::GetInstance()->AddObserver(this); } WebLayerMetricsServiceClient::~WebLayerMetricsServiceClient() { + BrowserList::GetInstance()->RemoveObserver(this); ProfileImpl::RemoveProfileObserver(this); } @@ -141,8 +145,6 @@ std::move(task).Run(); } post_start_tasks_.clear(); - GetMetricsService()->synthetic_trial_registry()->AddSyntheticTrialObserver( - variations::VariationsIdsProvider::GetInstance()); } void WebLayerMetricsServiceClient::OnMetricsNotStarted() { @@ -176,6 +178,42 @@ ->GetSharedURLLoaderFactory(); } +void WebLayerMetricsServiceClient::ApplyConsent(bool user_consent, + bool app_consent) { + // TODO(https://crbug.com/1155163): update this once consent can be + // dynamically changed. + // It is expected this function is called only once, and that prior to this + // function the metrics service has not been started. The reason the metric + // service should not have been started prior to this function is that the + // metrics service is only started if consent is given, and this function is + // responsible for setting consent. + DCHECK(!GetMetricsServiceIfStarted()); + // UkmService is only created if consent is given. + DCHECK(!GetUkmService()); + + SetHaveMetricsConsent(user_consent, app_consent); + ApplyForegroundStateToServices(); +} + +void WebLayerMetricsServiceClient::ApplyForegroundStateToServices() { + const bool is_in_foreground = + BrowserList::GetInstance()->HasAtLeastOneResumedBrowser(); + if (auto* metrics_service = WebLayerMetricsServiceClient::GetInstance() + ->GetMetricsServiceIfStarted()) { + if (is_in_foreground) + metrics_service->OnAppEnterForeground(); + else + metrics_service->OnAppEnterBackground(); + } + + if (auto* ukm_service = GetUkmService()) { + if (is_in_foreground) + ukm_service->OnAppEnterForeground(); + else + ukm_service->OnAppEnterBackground(); + } +} + void WebLayerMetricsServiceClient::ProfileCreated(ProfileImpl* profile) { UpdateUkmService(); } @@ -184,12 +222,21 @@ UpdateUkmService(); } +void WebLayerMetricsServiceClient::OnHasAtLeastOneResumedBrowserStateChanged( + bool new_value) { + ApplyForegroundStateToServices(); +} + +void JNI_ApplyConsentHelper(bool user_consent, bool app_consent) { + WebLayerMetricsServiceClient::GetInstance()->ApplyConsent(user_consent, + app_consent); +} + // static void JNI_MetricsServiceClient_SetHaveMetricsConsent(JNIEnv* env, jboolean user_consent, jboolean app_consent) { - WebLayerMetricsServiceClient::GetInstance()->SetHaveMetricsConsent( - user_consent, app_consent); + JNI_ApplyConsentHelper(user_consent, app_consent); } } // namespace weblayer
diff --git a/weblayer/browser/android/metrics/weblayer_metrics_service_client.h b/weblayer/browser/android/metrics/weblayer_metrics_service_client.h index 2ef44d9..a8475a2 100644 --- a/weblayer/browser/android/metrics/weblayer_metrics_service_client.h +++ b/weblayer/browser/android/metrics/weblayer_metrics_service_client.h
@@ -18,13 +18,15 @@ #include "components/metrics/metrics_service_client.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "weblayer/browser/browser_list_observer.h" #include "weblayer/browser/profile_impl.h" namespace weblayer { class WebLayerMetricsServiceClient : public ::metrics::AndroidMetricsServiceClient, - public ProfileImpl::ProfileObserver { + public ProfileImpl::ProfileObserver, + public BrowserListObserver { friend class base::NoDestructor<WebLayerMetricsServiceClient>; public: @@ -52,10 +54,21 @@ scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override; private: + friend void JNI_ApplyConsentHelper(bool user_consent, bool app_consent); + + // Called once when consent has been determined. + void ApplyConsent(bool user_consent, bool app_consent); + + // Updates the services based on the foreground state. + void ApplyForegroundStateToServices(); + // ProfileImpl::ProfileObserver: void ProfileCreated(ProfileImpl* profile) override; void ProfileDestroyed(ProfileImpl* profile) override; + // BrowserListObserver: + void OnHasAtLeastOneResumedBrowserStateChanged(bool new_value) override; + std::vector<base::OnceClosure> post_start_tasks_; DISALLOW_COPY_AND_ASSIGN(WebLayerMetricsServiceClient);
diff --git a/weblayer/browser/browser_impl.cc b/weblayer/browser/browser_impl.cc index 1a55e71..74e628d 100644 --- a/weblayer/browser/browser_impl.cc +++ b/weblayer/browser/browser_impl.cc
@@ -31,9 +31,6 @@ #include "base/android/jni_array.h" #include "base/android/jni_string.h" #include "base/json/json_writer.h" -#include "components/metrics/metrics_service.h" -#include "components/ukm/ukm_service.h" -#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" #include "weblayer/browser/browser_process.h" #include "weblayer/browser/java/jni/BrowserImpl_jni.h" #endif @@ -46,41 +43,6 @@ namespace weblayer { -namespace { - -#if defined(OS_ANDROID) -void UpdateMetricsService() { - static bool s_foreground = false; - // TODO(sky): convert this to observer. - bool foreground = BrowserList::GetInstance()->HasAtLeastOneResumedBrowser(); - - if (foreground == s_foreground) - return; - - s_foreground = foreground; - - auto* metrics_service = - WebLayerMetricsServiceClient::GetInstance()->GetMetricsService(); - if (metrics_service) { - if (foreground) - metrics_service->OnAppEnterForeground(); - else - metrics_service->OnAppEnterBackground(); - } - - auto* ukm_service = - WebLayerMetricsServiceClient::GetInstance()->GetUkmService(); - if (ukm_service) { - if (foreground) - ukm_service->OnAppEnterForeground(); - else - ukm_service->OnAppEnterBackground(); - } -} -#endif // defined(OS_ANDROID) - -} // namespace - // static constexpr char BrowserImpl::kPersistenceFilePrefix[]; @@ -443,7 +405,6 @@ const bool old_has_at_least_one_active_browser = BrowserList::GetInstance()->HasAtLeastOneResumedBrowser(); fragment_resumed_ = state; - UpdateMetricsService(); if (old_has_at_least_one_active_browser != BrowserList::GetInstance()->HasAtLeastOneResumedBrowser()) { BrowserList::GetInstance()->NotifyHasAtLeastOneResumedBrowserChanged();
diff --git a/weblayer/browser/browser_list_observer.h b/weblayer/browser/browser_list_observer.h index 4d6a7d0..3b17897 100644 --- a/weblayer/browser/browser_list_observer.h +++ b/weblayer/browser/browser_list_observer.h
@@ -17,7 +17,7 @@ #if defined(OS_ANDROID) // Called when the value of BrowserList::HasAtLeastOneResumedBrowser() // changes. - void OnHasAtLeastOneResumedBrowserStateChanged(bool new_value) {} + virtual void OnHasAtLeastOneResumedBrowserStateChanged(bool new_value) {} #endif virtual void OnBrowserCreated(Browser* browser) {}
diff --git a/weblayer/browser/browser_main_parts_impl.cc b/weblayer/browser/browser_main_parts_impl.cc index 1a4376c0..0de1b986 100644 --- a/weblayer/browser/browser_main_parts_impl.cc +++ b/weblayer/browser/browser_main_parts_impl.cc
@@ -49,11 +49,14 @@ #include "components/crash/core/common/crash_key.h" #include "components/javascript_dialogs/android/app_modal_dialog_view_android.h" // nogncheck #include "components/javascript_dialogs/app_modal_dialog_manager.h" // nogncheck +#include "components/metrics/metrics_service.h" +#include "components/variations/variations_ids_provider.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" #include "net/android/network_change_notifier_factory_android.h" #include "net/base/network_change_notifier.h" #include "weblayer/browser/android/metrics/uma_utils.h" +#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" #include "weblayer/browser/java/jni/MojoInterfaceRegistrar_jni.h" #include "weblayer/browser/media/local_presentation_manager_factory.h" #include "weblayer/browser/media/media_router_factory.h" @@ -161,6 +164,18 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( ::switches::kDisableMediaSessionAPI); } + + // WebLayer initializes the MetricsService once consent is determined. + // Determining consent is async and potentially slow. VariationsIdsProvider + // is responsible for updating the X-Client-Data header. To ensure the header + // is always provided, VariationsIdsProvider is registered now. + // + // Chrome registers the VariationsIdsProvider from PreCreateThreads() as well. + auto* metrics_client = WebLayerMetricsServiceClient::GetInstance(); + metrics_client->GetMetricsService() + ->synthetic_trial_registry() + ->AddSyntheticTrialObserver( + variations::VariationsIdsProvider::GetInstance()); #endif return content::RESULT_CODE_NORMAL_EXIT;
diff --git a/weblayer/browser/feature_list_creator.cc b/weblayer/browser/feature_list_creator.cc index 4ff0463..dbd12af 100644 --- a/weblayer/browser/feature_list_creator.cc +++ b/weblayer/browser/feature_list_creator.cc
@@ -16,11 +16,14 @@ #include "content/public/browser/network_service_instance.h" #include "content/public/common/content_switch_dependent_feature_overrides.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" #include "weblayer/browser/system_network_context_manager.h" #include "weblayer/browser/weblayer_variations_service_client.h" #if defined(OS_ANDROID) +#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" +#endif + +#if defined(OS_ANDROID) namespace switches { const char kDisableBackgroundNetworking[] = "disable-background-networking"; } // namespace switches
diff --git a/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc b/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc index dcf6c5f..56424da 100644 --- a/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc +++ b/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc
@@ -38,7 +38,7 @@ public: #if defined(OS_ANDROID) void SetUp() override { - InstallTestGmsBridge(/* user_consent= */ true); + InstallTestGmsBridge(ConsentType::kConsent); WebLayerBrowserTest::SetUp(); }
diff --git a/weblayer/browser/profile_impl.cc b/weblayer/browser/profile_impl.cc index b5d0630f..0895e8f 100644 --- a/weblayer/browser/profile_impl.cc +++ b/weblayer/browser/profile_impl.cc
@@ -32,7 +32,6 @@ #include "services/network/public/mojom/network_context.mojom.h" #include "ui/gfx/image/image.h" #include "ui/gfx/image/image_skia.h" -#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" #include "weblayer/browser/browser_context_impl.h" #include "weblayer/browser/browser_impl.h" #include "weblayer/browser/browser_list.h" @@ -52,6 +51,7 @@ #include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "components/unified_consent/pref_names.h" #include "ui/gfx/android/java_bitmap.h" +#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h" #include "weblayer/browser/browser_process.h" #include "weblayer/browser/java/jni/ProfileImpl_jni.h" #include "weblayer/browser/safe_browsing/safe_browsing_service.h"
diff --git a/weblayer/browser/subresource_filter_browsertest.cc b/weblayer/browser/subresource_filter_browsertest.cc index 6b05c9b..b0f77ef 100644 --- a/weblayer/browser/subresource_filter_browsertest.cc +++ b/weblayer/browser/subresource_filter_browsertest.cc
@@ -22,6 +22,12 @@ #include "weblayer/test/weblayer_browser_test.h" #include "weblayer/test/weblayer_browser_test_utils.h" +#if defined(OS_ANDROID) +#include "components/infobars/android/infobar_android.h" // nogncheck +#include "components/infobars/core/infobar_manager.h" // nogncheck +#include "weblayer/browser/infobar_service.h" +#endif + namespace weblayer { namespace { @@ -37,6 +43,35 @@ return script_resource_was_loaded; } +#if defined(OS_ANDROID) +class TestInfoBarManagerObserver : public infobars::InfoBarManager::Observer { + public: + TestInfoBarManagerObserver() = default; + ~TestInfoBarManagerObserver() override = default; + void OnInfoBarAdded(infobars::InfoBar* infobar) override { + if (on_infobar_added_callback_) + std::move(on_infobar_added_callback_).Run(); + } + + void OnInfoBarRemoved(infobars::InfoBar* infobar, bool animate) override { + if (on_infobar_removed_callback_) + std::move(on_infobar_removed_callback_).Run(); + } + + void set_on_infobar_added_callback(base::OnceClosure callback) { + on_infobar_added_callback_ = std::move(callback); + } + + void set_on_infobar_removed_callback(base::OnceClosure callback) { + on_infobar_removed_callback_ = std::move(callback); + } + + private: + base::OnceClosure on_infobar_added_callback_; + base::OnceClosure on_infobar_removed_callback_; +}; +#endif // if defined(OS_ANDROID) + } // namespace class SubresourceFilterBrowserTest : public WebLayerBrowserTest { @@ -63,6 +98,22 @@ ASSERT_NO_FATAL_FAILURE( test_ruleset_publisher.SetRuleset(test_ruleset_pair.unindexed)); } + + // Configures the database manager to activate on |url| in |web_contents|. + void ActivateSubresourceFilterInWebContentsForURL( + content::WebContents* web_contents, + const GURL& url) { + scoped_refptr<FakeSafeBrowsingDatabaseManager> database_manager = + base::MakeRefCounted<FakeSafeBrowsingDatabaseManager>(); + database_manager->AddBlocklistedUrl( + url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING); + + auto* client_impl = static_cast<SubresourceFilterClientImpl*>( + subresource_filter::ContentSubresourceFilterThrottleManager:: + FromWebContents(web_contents) + ->client()); + client_impl->set_database_manager_for_testing(std::move(database_manager)); + } }; // Tests that the ruleset service is available. @@ -167,16 +218,7 @@ observer.GetPageActivation(test_url); EXPECT_FALSE(page_activation); - // Configure the database manager to activate on this URL. - scoped_refptr<FakeSafeBrowsingDatabaseManager> database_manager = - base::MakeRefCounted<FakeSafeBrowsingDatabaseManager>(); - database_manager->AddBlocklistedUrl( - test_url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING); - auto* client_impl = static_cast<SubresourceFilterClientImpl*>( - subresource_filter::ContentSubresourceFilterThrottleManager:: - FromWebContents(web_contents) - ->client()); - client_impl->set_database_manager_for_testing(database_manager); + ActivateSubresourceFilterInWebContentsForURL(web_contents, test_url); // Verify that the "ad" subframe is loaded if it is not flagged by the // ruleset. @@ -252,4 +294,52 @@ EXPECT_TRUE(WasParsedScriptElementLoaded(web_contents->GetMainFrame())); } +#if defined(OS_ANDROID) +// Test that the ads blocked infobar is presented when visiting a page where the +// subresource filter blocks resources from being loaded and is removed when +// navigating away. +IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, InfoBarPresentation) { + auto* web_contents = static_cast<TabImpl*>(shell()->tab())->web_contents(); + auto* infobar_service = InfoBarService::FromWebContents(web_contents); + + // Configure the subresource filter to activate on the test URL and to block + // its script from loading. + GURL test_url( + embedded_test_server()->GetURL("/frame_with_included_script.html")); + ActivateSubresourceFilterInWebContentsForURL(web_contents, test_url); + ASSERT_NO_FATAL_FAILURE( + SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); + + TestInfoBarManagerObserver infobar_observer; + infobar_service->AddObserver(&infobar_observer); + + base::RunLoop run_loop; + infobar_observer.set_on_infobar_added_callback(run_loop.QuitClosure()); + + EXPECT_EQ(0u, infobar_service->infobar_count()); + + // Navigate such that the script is blocked and verify that the ads blocked + // infobar is presented. + NavigateAndWaitForCompletion(test_url, shell()); + run_loop.Run(); + + EXPECT_EQ(1u, infobar_service->infobar_count()); + auto* infobar = + static_cast<infobars::InfoBarAndroid*>(infobar_service->infobar_at(0)); + EXPECT_TRUE(infobar->HasSetJavaInfoBar()); + EXPECT_EQ(infobar->delegate()->GetIdentifier(), + infobars::InfoBarDelegate::ADS_BLOCKED_INFOBAR_DELEGATE_ANDROID); + + // Navigate away and verify that the infobar is removed. + base::RunLoop run_loop2; + infobar_observer.set_on_infobar_removed_callback(run_loop2.QuitClosure()); + + NavigateAndWaitForCompletion(GURL("about:blank"), shell()); + run_loop2.Run(); + + EXPECT_EQ(0u, infobar_service->infobar_count()); + infobar_service->RemoveObserver(&infobar_observer); +} +#endif + } // namespace weblayer
diff --git a/weblayer/browser/subresource_filter_client_impl.cc b/weblayer/browser/subresource_filter_client_impl.cc index e5ec67f..93ee166 100644 --- a/weblayer/browser/subresource_filter_client_impl.cc +++ b/weblayer/browser/subresource_filter_client_impl.cc
@@ -21,6 +21,8 @@ #if defined(OS_ANDROID) #include "components/safe_browsing/android/remote_database_manager.h" +#include "components/subresource_filter/android/ads_blocked_infobar_delegate.h" +#include "weblayer/browser/infobar_service.h" #endif namespace weblayer { @@ -45,8 +47,14 @@ } // namespace -SubresourceFilterClientImpl::SubresourceFilterClientImpl() - : database_manager_(GetDatabaseManagerFromSafeBrowsingService()) {} +SubresourceFilterClientImpl::SubresourceFilterClientImpl( + content::WebContents* web_contents) + : +#if defined(OS_ANDROID) + web_contents_(web_contents), +#endif + database_manager_(GetDatabaseManagerFromSafeBrowsingService()) { +} SubresourceFilterClientImpl::~SubresourceFilterClientImpl() = default; @@ -58,19 +66,27 @@ subresource_filter::VerifiedRulesetDealer::Handle* dealer = ruleset_service ? ruleset_service->GetRulesetDealer() : nullptr; subresource_filter::ContentSubresourceFilterThrottleManager:: - CreateForWebContents(web_contents, - std::make_unique<SubresourceFilterClientImpl>(), - dealer); + CreateForWebContents( + web_contents, + std::make_unique<SubresourceFilterClientImpl>(web_contents), dealer); } void SubresourceFilterClientImpl::OnReloadRequested() { // TODO(crbug.com/1116095): Bring up this flow on Android when user requests // it via the infobar. - NOTREACHED(); + NOTIMPLEMENTED(); } void SubresourceFilterClientImpl::ShowNotification() { - // TODO(crbug.com/1116095): Show infobar on Android. +#if defined(OS_ANDROID) + // TODO(crbug.com/1116095): Move ChromeSubresourceFilterClient::ShowUI()'s + // interaction with metrics and content settings into code that's shared by + // WebLayer. + InfoBarService* infobar_service = + InfoBarService::FromWebContents(web_contents_); + subresource_filter::AdsBlockedInfobarDelegate::Create( + infobar_service, InfoBarService::GetResourceIdMapper()); +#endif } subresource_filter::mojom::ActivationLevel
diff --git a/weblayer/browser/subresource_filter_client_impl.h b/weblayer/browser/subresource_filter_client_impl.h index 77e02c9..1debbf2 100644 --- a/weblayer/browser/subresource_filter_client_impl.h +++ b/weblayer/browser/subresource_filter_client_impl.h
@@ -8,6 +8,7 @@ #include <memory> #include <utility> +#include "build/build_config.h" #include "components/safe_browsing/core/db/database_manager.h" #include "components/subresource_filter/content/browser/subresource_filter_client.h" #include "url/gurl.h" @@ -27,7 +28,7 @@ class SubresourceFilterClientImpl : public subresource_filter::SubresourceFilterClient { public: - SubresourceFilterClientImpl(); + explicit SubresourceFilterClientImpl(content::WebContents* web_contents); ~SubresourceFilterClientImpl() override; SubresourceFilterClientImpl(const SubresourceFilterClientImpl&) = delete; @@ -61,6 +62,11 @@ } private: + // This member is only used on Android, so it's necessary to ifdef it to avoid + // a compiler error on other platforms. +#if defined(OS_ANDROID) + content::WebContents* web_contents_; +#endif std::unique_ptr<subresource_filter::ContentSubresourceFilterThrottleManager> throttle_manager_; scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager_;
diff --git a/weblayer/grit_resources_allowlist.txt b/weblayer/grit_resources_allowlist.txt index 050a9b3..c154319 100644 --- a/weblayer/grit_resources_allowlist.txt +++ b/weblayer/grit_resources_allowlist.txt
@@ -1,3 +1,4 @@ +IDR_ANDROID_INFOBAR_BLOCKED_POPUPS IDR_SAD_PLUGIN IDR_SAD_WEBVIEW IDR_SSL_ERROR_ASSISTANT_PB
diff --git a/weblayer/grit_strings_allowlist.txt b/weblayer/grit_strings_allowlist.txt index cd2e254..7342c93 100644 --- a/weblayer/grit_strings_allowlist.txt +++ b/weblayer/grit_strings_allowlist.txt
@@ -1,3 +1,8 @@ +IDS_OK +IDS_RELOAD +IDS_BLOCKED_ADS_PROMPT_EXPLANATION +IDS_ALWAYS_ALLOW_ADS +IDS_BLOCKED_ADS_INFOBAR_MESSAGE IDS_ACCESSIBILITY_EVENTS_INFOBAR_TEXT IDS_ACCESSIBILITY_EVENTS_PERMISSION_FRAGMENT IDS_AR_AND_MEDIA_CAPTURE_VIDEO_INFOBAR_TEXT
diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn index 3252520..47c7e09 100644 --- a/weblayer/public/java/BUILD.gn +++ b/weblayer/public/java/BUILD.gn
@@ -99,6 +99,7 @@ "org/chromium/weblayer/UrlBarOptions.java", "org/chromium/weblayer/UserIdentityCallback.java", "org/chromium/weblayer/VerifiesOnO.java", + "org/chromium/weblayer/VerifiesOnR.java", "org/chromium/weblayer/WebLayer.java", "org/chromium/weblayer/WebLayerFileProvider.java", "org/chromium/weblayer/WebMessage.java",
diff --git a/weblayer/public/java/org/chromium/weblayer/Navigation.java b/weblayer/public/java/org/chromium/weblayer/Navigation.java index 4b7cde4..0b668722 100644 --- a/weblayer/public/java/org/chromium/weblayer/Navigation.java +++ b/weblayer/public/java/org/chromium/weblayer/Navigation.java
@@ -173,10 +173,15 @@ * headers. This means the only time the embedder can know if the navigation resulted in an * external intent being launched is in NavigationCallback.onNavigationFailed. * + * @return Whether an intent was launched for the navigation. + * * @since 89 */ public boolean wasIntentLaunched() { ThreadCheck.ensureOnUiThread(); + if (WebLayer.getSupportedMajorVersionInternal() < 89) { + throw new UnsupportedOperationException(); + } try { return mNavigationImpl.wasIntentLaunched(); } catch (RemoteException e) { @@ -192,10 +197,15 @@ * means the only time the embedder can know this status definitively is in * NavigationCallback.onNavigationFailed. * + * @return Whether this navigation resulted in a user decision guarding external intent launch. + * * @since 89 */ public boolean isUserDecidingIntentLaunch() { ThreadCheck.ensureOnUiThread(); + if (WebLayer.getSupportedMajorVersionInternal() < 89) { + throw new UnsupportedOperationException(); + } try { return mNavigationImpl.isUserDecidingIntentLaunch(); } catch (RemoteException e) {
diff --git a/weblayer/public/java/org/chromium/weblayer/Profile.java b/weblayer/public/java/org/chromium/weblayer/Profile.java index eb362b3..3f2176d70 100644 --- a/weblayer/public/java/org/chromium/weblayer/Profile.java +++ b/weblayer/public/java/org/chromium/weblayer/Profile.java
@@ -187,6 +187,13 @@ * * This object is considered destroyed after this method returns. Calling any other method * after will throw exceptions. * * Creating a new profile of the same name before doneCallback runs will throw an exception. + * + * After calling this function, {@link #getAllProfiles()} will not return the Profile, and + * {@link #enumerateAllProfileNames} will not return the profile name. + * + * @param completionCallback Callback that is notified when destruction and deletion of data is + * complete. + * * @since 82 */ public void destroyAndDeleteDataFromDisk(@Nullable Runnable completionCallback) { @@ -201,17 +208,25 @@ /** * This method provides the same functionality as {@link destroyAndDeleteDataFromDisk}, but - * delays until there is no usage of the Profile. If there is no usage of the profile - * destruction is immediate. If there is usage, then destruction happens as soon as possible. - * It's possible cleanup may not happen until WebLayer is restarted. If cleanup does not happen - * until WebLayer is restarted, {@link completionCallback} is not run (because the process was - * restarted). + * delays until there is no usage of the Profile. If there is no usage of the profile, + * destruction and deletion of data on disk is immediate. If there is usage, then destruction + * and deletion of data happens when there is no usage of the Profile. If the process is killed + * before deletion of data on disk occurs, then deletion of data happens when WebLayer is + * restarted. * * While destruction may be delayed, once this function is called, the profile name will not be - * returned from {@link WebLayer#enumerateAllProfileNames}. + * returned from {@link WebLayer#enumerateAllProfileNames}. OTOH, {@link #getAllProfiles()} + * returns this profile until there are no more usages. * - * @param completionCallback Callback this is notified when destruction is complete. This may - * never be called. + * If this function is called multiple times before the Profile is destroyed, then every + * callback supplied is run once destruction and deletion of data is complete. + * + * @param completionCallback Callback that is notified when destruction and deletion of data is + * complete. If the process is killed before all references are removed, the callback is never + * called. + * + * @throws IllegalStateException If the Profile has already been destroyed. You can check for + * that by looking for the profile in {@link #getAllProfiles()}. * * @since 87 */
diff --git a/weblayer/public/java/org/chromium/weblayer/VerifiesOnR.java b/weblayer/public/java/org/chromium/weblayer/VerifiesOnR.java new file mode 100644 index 0000000..9f32261c --- /dev/null +++ b/weblayer/public/java/org/chromium/weblayer/VerifiesOnR.java
@@ -0,0 +1,24 @@ +// 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. + +package org.chromium.weblayer; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * The annotated method or class verifies on R, but not below. + * + * The annotated method (or methods on the annotated class) are guaranteed to not be inlined by R8 + * on builds targeted below R. This prevents class verification errors (which results in a very slow + * retry-verification-at-runtime) from spreading into other classes on these lower versions. + * + * Note: this is the WebLayer client library version of the annotation from + * org.chromium.base.annotations. + */ +@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.CLASS) +/* package */ @interface VerifiesOnR {}
diff --git a/weblayer/public/java/org/chromium/weblayer/WebLayer.java b/weblayer/public/java/org/chromium/weblayer/WebLayer.java index e15189d..3b5b6eda 100644 --- a/weblayer/public/java/org/chromium/weblayer/WebLayer.java +++ b/weblayer/public/java/org/chromium/weblayer/WebLayer.java
@@ -273,11 +273,12 @@ // Use the application context as the supplied context may have a shorter lifetime. mContext = context.getApplicationContext(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R - && context.getAttributionTag() != null) { + && ApiHelperForR.getAttributionTag(context) != null) { // Getting the application context means we lose any attribution. Use the // attribution tag from the supplied context so that embedders have a way to set an // attribution tag. - mContext = mContext.createAttributionContext(context.getAttributionTag()); + mContext = ApiHelperForR.createAttributionContext( + mContext, ApiHelperForR.getAttributionTag(context)); } try { ClassLoader classLoader = getOrCreateRemoteClassLoader(mContext); @@ -835,4 +836,18 @@ } } } + + @VerifiesOnR + @TargetApi(Build.VERSION_CODES.R) + private static final class ApiHelperForR { + /** See {@link Context.getAttributionTag() }. */ + public static String getAttributionTag(Context context) { + return context.getAttributionTag(); + } + + /** See {@link Context.createAttributionContext(String) }. */ + public static Context createAttributionContext(Context context, String tag) { + return context.createAttributionContext(tag); + } + } }
diff --git a/weblayer/public/java/proguard.flags b/weblayer/public/java/proguard.flags index 5621ffa..c319016 100644 --- a/weblayer/public/java/proguard.flags +++ b/weblayer/public/java/proguard.flags
@@ -12,3 +12,14 @@ -keepclassmembers,allowobfuscation class ** { @org.chromium.weblayer.VerifiesOnO <methods>; } + +-keep @interface org.chromium.weblayer.VerifiesOnR +-if @org.chromium.weblayer.VerifiesOnR class * { + *** *(...); +} +-keep,allowobfuscation class <1> { + *** <2>(...); +} +-keepclassmembers,allowobfuscation class ** { + @org.chromium.weblayer.VerifiesOnR <methods>; +}
diff --git a/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_private/MetricsTestHelper.java b/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_private/MetricsTestHelper.java index c89b0e3..a2ede317 100644 --- a/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_private/MetricsTestHelper.java +++ b/weblayer/shell/android/browsertests_apk/src/org/chromium/weblayer_private/MetricsTestHelper.java
@@ -21,10 +21,13 @@ @JNINamespace("weblayer") class MetricsTestHelper { private static class TestGmsBridge extends GmsBridge { - private final boolean mUserConsent; + private final @ConsentType int mConsentType; + private Callback<Boolean> mConsentCallback; + public static TestGmsBridge sInstance; - public TestGmsBridge(boolean userConsent) { - mUserConsent = userConsent; + public TestGmsBridge(@ConsentType int consentType) { + sInstance = this; + mConsentType = consentType; } @Override @@ -40,7 +43,11 @@ @Override public void queryMetricsSetting(Callback<Boolean> callback) { ThreadUtils.assertOnUiThread(); - callback.onResult(mUserConsent); + if (mConsentType == ConsentType.DELAY_CONSENT) { + mConsentCallback = callback; + } else { + callback.onResult(mConsentType == ConsentType.CONSENT); + } } @Override @@ -50,8 +57,15 @@ } @CalledByNative - private static void installTestGmsBridge(boolean userConsent) { - GmsBridge.injectInstance(new TestGmsBridge(userConsent)); + private static void installTestGmsBridge(@ConsentType int consentType) { + GmsBridge.injectInstance(new TestGmsBridge(consentType)); + } + + @CalledByNative + private static void runConsentCallback(boolean hasConsent) { + assert TestGmsBridge.sInstance != null; + assert TestGmsBridge.sInstance.mConsentCallback != null; + TestGmsBridge.sInstance.mConsentCallback.onResult(hasConsent); } @CalledByNative
diff --git a/weblayer/test/BUILD.gn b/weblayer/test/BUILD.gn index 68bea7a..d9d11dd10 100644 --- a/weblayer/test/BUILD.gn +++ b/weblayer/test/BUILD.gn
@@ -42,6 +42,7 @@ "//content/public/test/android:content_java_test_support", "//testing/android/native_test:native_test_java", "//third_party/android_deps:android_support_v4_java", + "//third_party/android_deps:androidx_annotation_annotation_java", "//third_party/android_deps:androidx_core_core_java", "//ui/android:ui_java", "//weblayer/browser/java", @@ -49,6 +50,7 @@ "//weblayer/public/java", "//weblayer/public/javatestutil:test_java", ] + srcjar_deps = [ ":generated_enums" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] } @@ -70,6 +72,10 @@ deps += [ "//v8:v8_external_startup_data_assets" ] } } + + java_cpp_enum("generated_enums") { + sources = [ "//weblayer/browser/android/metrics/metrics_test_helper.h" ] + } } test("weblayer_browsertests") {