diff --git a/DEPS b/DEPS index f1ea07ac22cc..ad5ba0e24818 100644 --- a/DEPS +++ b/DEPS @@ -41,7 +41,7 @@ gclient_gn_args = [ vars = { - "buildspec_platforms": "linux64, mac64, win, win64", + "buildspec_platforms": "linux64, mac64, win, win64, android", # Variable that can be used to support multiple build scenarios, like having # Chromium specific targets in a client project's GN file or sync dependencies # conditionally etc. @@ -184,7 +184,7 @@ vars = { # 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': '141284ce828b13c08e0eccbf359fcce42e655a43', + 'v8_revision': '819e18461e9daf907437a521d90663e827c40e05', # 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. @@ -251,7 +251,7 @@ vars = { # 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': 'b4bb41b298b006fc07d6e7a8722fa720bc5a864c', + 'devtools_frontend_revision': '930c3d2ed8d25469f889f8a101f86f8c4c65d458', # 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. @@ -1530,7 +1530,7 @@ deps = { # Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d5f6bfae4831dfde6dc5b1eb7dde6fe130b99fe4', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@1a0102f7bf9454cdaed893fb4a213e9490af434a', 'condition': 'checkout_src_internal', }, diff --git a/ash/accelerators/debug_commands.cc b/ash/accelerators/debug_commands.cc index a35ba5d720c0..f298c08b5ac5 100644 --- a/ash/accelerators/debug_commands.cc +++ b/ash/accelerators/debug_commands.cc @@ -122,7 +122,7 @@ void HandlePrintViewHierarchy() { void HandlePrintWindowHierarchy() { std::ostringstream out; - PrintWindowHierarchy(&out); + PrintWindowHierarchy(&out, /*scrub_data=*/false); LOG(ERROR) << out.str(); } diff --git a/ash/debug.cc b/ash/debug.cc index 31bc7d41575c..8941a69f6ad9 100644 --- a/ash/debug.cc +++ b/ash/debug.cc @@ -52,6 +52,7 @@ void PrintWindowHierarchy(const aura::Window* active_window, const aura::Window* focused_window, aura::Window* window, int indent, + bool scrub_data, std::ostringstream* out) { std::string indent_str(indent, ' '); std::string name(window->GetName()); @@ -80,9 +81,13 @@ void PrintWindowHierarchy(const aura::Window* active_window, std::string* tree_id = window->GetProperty(ui::kChildAXTreeID); if (tree_id) *out << " ax_tree_id=" << *tree_id; - base::string16 title(window->GetTitle()); - if (!title.empty()) - *out << " title=" << title; + + if (!scrub_data) { + base::string16 title(window->GetTitle()); + if (!title.empty()) + *out << " title=" << title; + } + int app_type = window->GetProperty(aura::client::kAppType); *out << " app_type=" << app_type; std::string* pkg_name = window->GetProperty(ash::kArcPackageNameKey); @@ -90,17 +95,20 @@ void PrintWindowHierarchy(const aura::Window* active_window, *out << " pkg_name=" << *pkg_name; *out << '\n'; - for (aura::Window* child : window->children()) - PrintWindowHierarchy(active_window, focused_window, child, indent + 3, out); + for (aura::Window* child : window->children()) { + PrintWindowHierarchy(active_window, focused_window, child, indent + 3, + scrub_data, out); + } } -void PrintWindowHierarchy(std::ostringstream* out) { +void PrintWindowHierarchy(std::ostringstream* out, bool scrub_data) { aura::Window* active_window = window_util::GetActiveWindow(); aura::Window* focused_window = window_util::GetFocusedWindow(); aura::Window::Windows roots = Shell::Get()->GetAllRootWindows(); for (size_t i = 0; i < roots.size(); ++i) { *out << "RootWindow " << i << ":\n"; - PrintWindowHierarchy(active_window, focused_window, roots[i], 0, out); + PrintWindowHierarchy(active_window, focused_window, roots[i], 0, scrub_data, + out); } } diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc index 8b946df90ed6..864a2701bf0f 100644 --- a/ash/public/cpp/ash_features.cc +++ b/ash/public/cpp/ash_features.cc @@ -4,15 +4,33 @@ #include "ash/public/cpp/ash_features.h" +#include + #include "ash/public/cpp/ash_switches.h" #include "base/command_line.h" #include "base/feature_list.h" +#include "base/strings/string_split.h" +#include "base/system/sys_info.h" #include "build/build_config.h" #include "chromeos/constants/chromeos_switches.h" namespace ash { namespace features { +namespace { + +bool ShouldHideShelfButtonsForBoard() { + std::vector board = + base::SplitString(base::SysInfo::GetLsbReleaseBoard(), "-", + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + if (board.empty()) + return false; + return board[0] == "kukui" || board[0] == "eve" || board[0] == "nocturne" || + board[0] == "hatch"; +} + +} // namespace + const base::Feature kAllowAmbientEQ{"AllowAmbientEQ", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -122,7 +140,7 @@ const base::Feature kDragFromShelfToHomeOrOverview{ "DragFromShelfToHomeOrOverview", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kHideShelfControlsInTabletMode{ - "HideShelfControlsInTabletMode", base::FEATURE_ENABLED_BY_DEFAULT}; + "HideShelfControlsInTabletMode", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kSystemTrayMicGainSetting{ "SystemTrayMicGainSetting", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -237,8 +255,15 @@ bool IsReduceDisplayNotificationsEnabled() { } bool IsHideShelfControlsInTabletModeEnabled() { - return base::FeatureList::IsEnabled(kHideShelfControlsInTabletMode) && - IsDragFromShelfToHomeOrOverviewEnabled(); + if (!IsDragFromShelfToHomeOrOverviewEnabled()) + return false; + + // Enable shelf navigation buttons by default on select number of boards. + static const bool hide_shelf_buttons = ShouldHideShelfButtonsForBoard(); + if (hide_shelf_buttons) + return true; + + return base::FeatureList::IsEnabled(kHideShelfControlsInTabletMode); } bool IsDisplayChangeModalEnabled() { @@ -246,6 +271,8 @@ bool IsDisplayChangeModalEnabled() { } bool AreContextualNudgesEnabled() { + if (!IsHideShelfControlsInTabletModeEnabled()) + return false; return base::FeatureList::IsEnabled(kContextualNudges); } diff --git a/ash/public/cpp/debug_utils.h b/ash/public/cpp/debug_utils.h index e972b25735c7..be99226791e2 100644 --- a/ash/public/cpp/debug_utils.h +++ b/ash/public/cpp/debug_utils.h @@ -18,8 +18,9 @@ ASH_EXPORT void PrintLayerHierarchy(std::ostringstream* out); // Prints current active window's view hierarchy to |out|. ASH_EXPORT void PrintViewHierarchy(std::ostringstream* out); -// Prints all windows hierarchy to |out|. -ASH_EXPORT void PrintWindowHierarchy(std::ostringstream* out); +// Prints all windows hierarchy to |out|. If |scrub_data| is true, we +// may skip some data fields that are not very important for debugging. +ASH_EXPORT void PrintWindowHierarchy(std::ostringstream* out, bool scrub_data); } // namespace debug } // namespace ash diff --git a/ash/shelf/contextual_tooltip.cc b/ash/shelf/contextual_tooltip.cc index 0d30bf832bf3..5b9930827099 100644 --- a/ash/shelf/contextual_tooltip.cc +++ b/ash/shelf/contextual_tooltip.cc @@ -111,8 +111,7 @@ ContextualNudgeStatusTracker* GetStatusTracker(TooltipType type) { } // namespace void RegisterProfilePrefs(PrefRegistrySimple* registry) { - if (features::AreContextualNudgesEnabled()) - registry->RegisterDictionaryPref(prefs::kContextualTooltips); + registry->RegisterDictionaryPref(prefs::kContextualTooltips); } bool ShouldShowNudge(PrefService* prefs, diff --git a/ash/shelf/contextual_tooltip_unittest.cc b/ash/shelf/contextual_tooltip_unittest.cc index 0abfe6354d1a..bdc41dce5bab 100644 --- a/ash/shelf/contextual_tooltip_unittest.cc +++ b/ash/shelf/contextual_tooltip_unittest.cc @@ -29,8 +29,10 @@ class ContextualTooltipTest : public AshTestBase, public: ContextualTooltipTest() { if (GetParam()) { - scoped_feature_list_.InitAndEnableFeature( - ash::features::kContextualNudges); + scoped_feature_list_.InitWithFeatures( + {ash::features::kContextualNudges, + ash::features::kHideShelfControlsInTabletMode}, + {}); } else { scoped_feature_list_.InitAndDisableFeature( diff --git a/ash/shelf/drag_handle.cc b/ash/shelf/drag_handle.cc index 3475f311e3cc..73862cd3b53f 100644 --- a/ash/shelf/drag_handle.cc +++ b/ash/shelf/drag_handle.cc @@ -111,6 +111,9 @@ bool DragHandle::MaybeShowDragHandleNudge() { if (!show_drag_handle_nudge_timer_.IsRunning()) overview_observer_.RemoveAll(); + if (!features::AreContextualNudgesEnabled()) + return false; + // Do not show drag handle nudge if it is already shown or drag handle is not // visible. if (gesture_nudge_target_visibility() || @@ -128,6 +131,9 @@ bool DragHandle::MaybeShowDragHandleNudge() { } void DragHandle::ShowDragHandleNudge() { + if (!features::AreContextualNudgesEnabled()) + return; + DCHECK(!gesture_nudge_target_visibility_); PrefService* pref = Shell::Get()->session_controller()->GetLastActiveUserPrefService(); diff --git a/ash/shelf/home_to_overview_nudge_controller_unittest.cc b/ash/shelf/home_to_overview_nudge_controller_unittest.cc index 752f67d709c8..4af00685c89d 100644 --- a/ash/shelf/home_to_overview_nudge_controller_unittest.cc +++ b/ash/shelf/home_to_overview_nudge_controller_unittest.cc @@ -81,7 +81,10 @@ class HomeToOverviewNudgeControllerWithNudgesDisabledTest : public AshTestBase { class HomeToOverviewNudgeControllerTest : public AshTestBase { public: HomeToOverviewNudgeControllerTest() { - scoped_feature_list_.InitAndEnableFeature(ash::features::kContextualNudges); + scoped_feature_list_.InitWithFeatures( + {ash::features::kContextualNudges, + ash::features::kHideShelfControlsInTabletMode}, + {}); } ~HomeToOverviewNudgeControllerTest() override = default; diff --git a/ash/shelf/scrollable_shelf_view_unittest.cc b/ash/shelf/scrollable_shelf_view_unittest.cc index 4f5ef6792d9e..0cfd20aeff87 100644 --- a/ash/shelf/scrollable_shelf_view_unittest.cc +++ b/ash/shelf/scrollable_shelf_view_unittest.cc @@ -939,7 +939,7 @@ class ScrollableShelfViewWithAppScalingTest : public ScrollableShelfViewTest { // Hotseat widget's width is a constant. Then |kAppCount| is in the range // of [1, (hotseat width) / (shelf button + button spacing) + 1]. So we can // get |kAppCount| in that range manually - static constexpr int kAppCount = 9; + static constexpr int kAppCount = 8; private: base::test::ScopedFeatureList scoped_feature_list_; diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc index ce597ac6f2ad..018e5dfbdea6 100644 --- a/ash/shelf/shelf_button.cc +++ b/ash/shelf/shelf_button.cc @@ -73,4 +73,15 @@ std::unique_ptr ShelfButton::CreateInkDrop() { return std::move(ink_drop); } +void ShelfButton::OnLayerTransformed(const gfx::Transform& old_transform, + ui::PropertyChangeReason reason) { + views::Button::OnLayerTransformed(old_transform, reason); + + // Notify the ink drop that we have transformed so it can adapt accordingly. + // TODO(crbug.com/1097044): This should probably be moved lower to ink drop or + // views code, but those may assume bounds changes. + if (HasInkDrop()) + GetInkDrop()->HostTransformChanged(GetTransform()); +} + } // namespace ash diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h index 6edb344d9f02..06b301d0f40f 100644 --- a/ash/shelf/shelf_button.h +++ b/ash/shelf/shelf_button.h @@ -24,6 +24,8 @@ class ASH_EXPORT ShelfButton : public views::Button { void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void NotifyClick(const ui::Event& event) override; std::unique_ptr CreateInkDrop() override; + void OnLayerTransformed(const gfx::Transform& old_transform, + ui::PropertyChangeReason reason) override; Shelf* shelf() { return shelf_; } const Shelf* shelf() const { return shelf_; } diff --git a/ash/shelf/shelf_drag_handle_unittest.cc b/ash/shelf/shelf_drag_handle_unittest.cc index 6cc08024d443..a1715eb3e7b2 100644 --- a/ash/shelf/shelf_drag_handle_unittest.cc +++ b/ash/shelf/shelf_drag_handle_unittest.cc @@ -38,7 +38,10 @@ ShelfLayoutManager* GetShelfLayoutManager() { class DragHandleContextualNudgeTest : public ShelfLayoutManagerTestBase { public: DragHandleContextualNudgeTest() { - scoped_feature_list_.InitAndEnableFeature(ash::features::kContextualNudges); + scoped_feature_list_.InitWithFeatures( + {ash::features::kContextualNudges, + ash::features::kHideShelfControlsInTabletMode}, + {}); } ~DragHandleContextualNudgeTest() override = default; diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc index 1a89f2c10359..e9222decc984 100644 --- a/ash/shelf/shelf_view_unittest.cc +++ b/ash/shelf/shelf_view_unittest.cc @@ -85,6 +85,7 @@ #include "ui/views/animation/bounds_animator.h" #include "ui/views/animation/ink_drop_impl.h" #include "ui/views/animation/test/ink_drop_host_view_test_api.h" +#include "ui/views/animation/test/ink_drop_impl_test_api.h" #include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/view_model.h" #include "ui/views/widget/widget.h" @@ -1907,6 +1908,9 @@ class InkDropSpy : public views::InkDrop { void HostSizeChanged(const gfx::Size& new_size) override { ink_drop_->HostSizeChanged(new_size); } + void HostTransformChanged(const gfx::Transform& new_transform) override { + ink_drop_->HostTransformChanged(new_transform); + } views::InkDropState GetTargetInkDropState() const override { return ink_drop_->GetTargetInkDropState(); } @@ -1978,6 +1982,8 @@ class ListMenuShelfItemDelegate : public ShelfItemDelegate { class ShelfViewInkDropTest : public ShelfViewTest { public: ShelfViewInkDropTest() = default; + ShelfViewInkDropTest(const ShelfViewInkDropTest&) = delete; + ShelfViewInkDropTest& operator=(const ShelfViewInkDropTest&) = delete; ~ShelfViewInkDropTest() override = default; protected: @@ -1995,9 +2001,12 @@ class ShelfViewInkDropTest : public ShelfViewTest { void InitBrowserButtonInkDrop() { browser_button_ = test_api_->GetButton(0); + auto ink_drop_impl = std::make_unique( + browser_button_, browser_button_->size()); + browser_button_ink_drop_impl_ = ink_drop_impl.get(); + auto browser_button_ink_drop = - std::make_unique(std::make_unique( - browser_button_, browser_button_->size())); + std::make_unique(std::move(ink_drop_impl)); browser_button_ink_drop_ = browser_button_ink_drop.get(); views::test::InkDropHostViewTestApi(browser_button_) .SetInkDrop(std::move(browser_button_ink_drop)); @@ -2007,9 +2016,7 @@ class ShelfViewInkDropTest : public ShelfViewTest { InkDropSpy* home_button_ink_drop_ = nullptr; ShelfAppButton* browser_button_ = nullptr; InkDropSpy* browser_button_ink_drop_ = nullptr; - - private: - DISALLOW_COPY_AND_ASSIGN(ShelfViewInkDropTest); + views::InkDropImpl* browser_button_ink_drop_impl_ = nullptr; }; // Tests that changing visibility of the app list transitions home button's @@ -2402,6 +2409,26 @@ TEST_F(ShelfViewInkDropTest, DismissingMenuWithDoubleClickDoesntShowInkDrop) { browser_button_ink_drop_->GetTargetInkDropState()); } +// Tests that the shelf ink drop transforms when the host transforms. Regression +// test for https://crbug.com/1097044. +TEST_F(ShelfViewInkDropTest, ShelfButtonTransformed) { + InitBrowserButtonInkDrop(); + ASSERT_TRUE(browser_button_ink_drop_impl_); + auto ink_drop_impl_test_api = + std::make_unique( + browser_button_ink_drop_impl_); + + views::Button* button = browser_button_; + gfx::Transform transform; + transform.Translate(10, 0); + button->SetTransform(transform); + EXPECT_EQ(transform, ink_drop_impl_test_api->GetRootLayer()->transform()); + + button->SetTransform(gfx::Transform()); + EXPECT_EQ(gfx::Transform(), + ink_drop_impl_test_api->GetRootLayer()->transform()); +} + class ShelfViewFocusTest : public ShelfViewTest { public: ShelfViewFocusTest() = default; diff --git a/ash/shortcut_viewer/strings/ash_components_strings_pt-BR.xtb b/ash/shortcut_viewer/strings/ash_components_strings_pt-BR.xtb index 772dd9156a94..f1c0d578efbb 100644 --- a/ash/shortcut_viewer/strings/ash_components_strings_pt-BR.xtb +++ b/ash/shortcut_viewer/strings/ash_components_strings_pt-BR.xtb @@ -23,7 +23,7 @@ Shift Adicionar www. e .com à entrada na barra de endereço e depois abrir a página -Remover a área de trabalho atual +Remover o espaço de trabalho atual e depois ou Ir para a próxima guia Ir para a última guia da janela @@ -44,7 +44,7 @@ Diminuir zoom da tela Ativar ou desativar o ChromeVox (feedback falado) Abrir o Google Assistente -Ativar a área de trabalho à esquerda +Ativar o espaço de trabalho à esquerda Alt Rolar a página da Web para baixo Redefinir nível de zoom na página @@ -52,7 +52,7 @@ e depois ou Atualizar a página atual Colocar o foco na barra de endereço de pesquisa -Criar uma nova área de trabalho +Criar um novo espaço de trabalho Diminuir zoom na página Pressione e clique em um link Ancorar uma janela à direita @@ -106,7 +106,7 @@ Fazer uma captura de tela parcial Mostrar ferramentas da stylus Mover para o fim da próxima palavra -Ativar a área de trabalho à direita +Ativar o espaço de trabalho à direita Abrir o link em uma nova janela Mostrar gerenciador de favoritos Ir para a parte superior da página @@ -122,7 +122,7 @@ Pesquisar na página atual Pressione e clique em um link Abrir a página da Web em uma nova guia -Mover a janela ativa para a área de trabalho à direita +Mover a janela ativa para o espaço de trabalho à direita ou Abrir o link na guia Escurecer teclado (apenas para teclados retroiluminados) @@ -198,7 +198,7 @@ Selecionar palavra ou letra anterior Ver suas notificações Tecla de tela cheia -Mover a janela ativa para a área de trabalho à esquerda +Mover a janela ativa para o espaço de trabalho à esquerda Página para baixo Alternar para o usuário anterior Selecionar o conteúdo na barra de endereço diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 3f5c6417c54d..9b5e7d5da183 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb @@ -129,7 +129,7 @@ Mostra la contrasenya Confirma la resolució Notificacions -Prem per canviar el disseny del teclat. +Prem per canviar la disposició del teclat. Tecles permanents BLOQ MAJ està activat. Activat diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index 8c4c2ffba2fb..daf78b978782 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb @@ -129,7 +129,7 @@ Mostrar contraseña Confirmar la resolución Notificaciones -Presiona para cambiar de diseño de teclado. +Presiona para cambiar la configuración del teclado. Teclas especiales BLOQ MAYÚS está activado. diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 637799530f14..396fd6dfd49e 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb @@ -604,7 +604,7 @@ ‏با دیکته کردن، صدایتان به Google ارسال می‌شود تا بتوانید در هر فیلد نوشتاری تایپ صوتی انجام دهید. تنظیمات تنظیمات شبکه -میان‌بر نمایش ابزارک اعلان گزینه‌های ورودی در قفسه تغییر کرده است. لطفاً به‌جای از استفاده کنید. +میان‌بر نمایش حبابک گزینه‌های ورودی در قفسه تغییر کرده است. لطفاً به‌جای از استفاده کنید. میز فعال شد سیم‌کارت وجود ندارد ‏Wi-Fi روشن است. diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index 0301bb7becfa..652b238144d2 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb @@ -647,7 +647,7 @@ Todos os usuarios deben pechar sesión para poder continuar. Definir un recordatorio Ampliando a pantalla Cambiar fonte -O dispositivo non é compatible cunha resolución de ( Hz). A resolución cambiouse a (). Para conservar este cambio, fai clic en Confirmar. A configuración anterior restaurarase en . +O dispositivo non é compatible cunha resolución de ( Hz). A resolución cambiouse a ( Hz). Para conservar este cambio, fai clic en Confirmar. A configuración anterior restaurarase en . Nivel de batería: por cento. H+ O Asistente de Google non fala este idioma. diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 0ded2ec5149c..cbe9aca73f06 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb @@ -55,7 +55,7 @@ {NUM_APPS,plural, =1{Mostrar configurações de notificação. As notificações estão desativadas para um app}one{Mostrar configurações de notificação. As notificações estão desativadas para # app}other{Mostrar configurações de notificação. As notificações estão desativadas para # apps}} DISPENSAR Cursor grande do mouse -Área de trabalho 2 +Espaço de trabalho 2 Clique para ver mais opções Alternar Bluetooth. acessar todas as suas atividades nesta sessão; @@ -97,7 +97,7 @@ Retrato Brilho do teclado Sem conexão com a rede -Nova área +Novo espaço Carregador de baixa potência Lupa em área fixa Reinicie para atualizar o Adobe Flash Player @@ -182,7 +182,7 @@ Mover cursor (Bluetooth) Reiniciar para atualizar -Área de trabalho 1 +Espaço de trabalho 1 Dados do celular Orientação Só é possível ter até contas em login múltiplo. @@ -194,7 +194,7 @@ O som está ativado. Alterná-lo desativará o som. Mais Nenhuma rede móvel disponível -A janela foi movida da área de trabalho para a +A janela foi movida do espaço de trabalho para o O que você pode fazer? Não protegida Visitante @@ -223,7 +223,7 @@ Alterar fuso horário Deslize para cima e mantenha a tela pressionada para ver os apps abertos Bateria carregada -Área de trabalho criada +Espaço de trabalho criado Display em braille conectado. O menu foi movido para o canto superior direito da tela. Entrada @@ -297,7 +297,7 @@ O dispositivo pode conter apps que não foram verificados pelo Google. Ethernet Dispositvos não pareados -Área de trabalho ativa. +Espaço de trabalho ativo. Comentários O dispositivo Bluetooth "" deseja permissão para realizar o pareamento. até completar @@ -345,7 +345,7 @@ Sair Configurações de acessibilidade Desativada -Área de trabalho 4 +Espaço de trabalho 4 Adicionar 1 min Fim Verificando @@ -464,7 +464,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Senha conceder aos sites, apps e extensões permissão para usar serviços de localização, microfone, câmera ou outros recursos do dispositivo; Ativado -Área de trabalho 3 +Espaço de trabalho 3 Pesquisa+Shift+H Veja informações relacionadas à sua seleção Seu teclado removível precisa de uma atualização crítica @@ -475,7 +475,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Conectado, % de bateria Aplicado pelo seu administrador O acompanhamento de desempenho está ativado -Área de trabalho removida e mesclada com a +Espaço de trabalho removido e integrado ao Carregando dispositivos USB-C conectados Reproduzir Não foi possível espelhar os displays porque não foram encontradas resoluções suportadas. Em vez disso, foi ativada a área de trabalho estendida. @@ -598,7 +598,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Criar nota Avançar por letra Este e seu smartphone serão conectados automaticamente -Não é possível remover a última área de trabalho. +Não é possível remover o último espaço de trabalho. Menu de opções para Seu pai/mãe bloqueou o dispositivo Alterar @@ -606,7 +606,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Configurações Configurações de rede O atalho para mostrar o balão de menu de opções de entrada na estante foi alterado. Use em vez de . -Área de trabalho ativada +Espaço de trabalho ativado Chip ausente O Wi-Fi está ligado. Exibir configurações de escala diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 7fc4a44f9557..f42af2d443cb 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb @@ -218,7 +218,7 @@ Control-Shift-Space , , Cường độ tín hiệu Đánh dấu con trỏ chuột -Tài khoản được quản lý bởi +Người quản lý tài khoản: Thay đổi lại thành "" (yêu cầu khởi động lại) Thay đổi múi giờ Vuốt lên và giữ để xem các ứng dụng đang mở diff --git a/ash/system/gesture_education/gesture_education_notification_controller.cc b/ash/system/gesture_education/gesture_education_notification_controller.cc index 3e8bb4fc01a0..ce559c971759 100644 --- a/ash/system/gesture_education/gesture_education_notification_controller.cc +++ b/ash/system/gesture_education/gesture_education_notification_controller.cc @@ -4,6 +4,7 @@ #include "ash/system/gesture_education/gesture_education_notification_controller.h" +#include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/notification_utils.h" #include "ash/public/cpp/shelf_config.h" @@ -40,7 +41,8 @@ GestureEducationNotificationController:: void GestureEducationNotificationController::MaybeShowNotification() { bool is_user_session_blocked = Shell::Get()->session_controller()->IsUserSessionBlocked(); - if (TabletModeController::Get()->InTabletMode() && !is_user_session_blocked && + if (features::IsHideShelfControlsInTabletModeEnabled() && + TabletModeController::Get()->InTabletMode() && !is_user_session_blocked && (active_user_prefs_ && !active_user_prefs_->GetBoolean( prefs::kGestureEducationNotificationShown)) && !ShelfConfig::Get()->ShelfControlsForcedShownForAccessibility()) { diff --git a/ash/system/gesture_education/gesture_education_notification_controller_unittest.cc b/ash/system/gesture_education/gesture_education_notification_controller_unittest.cc index de9d239976d8..7930db03a4c2 100644 --- a/ash/system/gesture_education/gesture_education_notification_controller_unittest.cc +++ b/ash/system/gesture_education/gesture_education_notification_controller_unittest.cc @@ -4,10 +4,12 @@ #include "ash/system/gesture_education/gesture_education_notification_controller.h" +#include "ash/public/cpp/ash_features.h" #include "ash/session/session_controller_impl.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h" +#include "base/test/scoped_feature_list.h" #include "ui/message_center/message_center.h" #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_types.h" @@ -16,7 +18,10 @@ namespace ash { class GestureEducationNotificationControllerTest : public AshTestBase { public: - GestureEducationNotificationControllerTest() = default; + GestureEducationNotificationControllerTest() { + scoped_feature_list_.InitWithFeatures( + {ash::features::kHideShelfControlsInTabletMode}, {}); + } ~GestureEducationNotificationControllerTest() override = default; // AshTestBase: @@ -67,6 +72,8 @@ class GestureEducationNotificationControllerTest : public AshTestBase { private: std::unique_ptr controller_; std::unique_ptr test_api_; + + base::test::ScopedFeatureList scoped_feature_list_; }; TEST_F(GestureEducationNotificationControllerTest, Notification) { diff --git a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc index e14cecd6c68c..95954e82f1db 100644 --- a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc +++ b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc @@ -43,7 +43,10 @@ class BackGestureContextualNudgeControllerTest : public NoSessionAshTestBase { } NoSessionAshTestBase::SetUp(std::move(delegate)); - scoped_feature_list_.InitAndEnableFeature(features::kContextualNudges); + scoped_feature_list_.InitWithFeatures( + {ash::features::kContextualNudges, + ash::features::kHideShelfControlsInTabletMode}, + {}); nudge_controller_ = std::make_unique(); diff --git a/chrome/VERSION b/chrome/VERSION index a38b5b4de3a0..515911f9e99b 100644 --- a/chrome/VERSION +++ b/chrome/VERSION @@ -1,4 +1,4 @@ MAJOR=84 MINOR=0 BUILD=4147 -PATCH=68 +PATCH=89 diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sq.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sq.xtb index 26ac4d805850..a4369bb8a18c 100644 --- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sq.xtb +++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_sq.xtb @@ -1,7 +1,7 @@ -Bli bileta filmash me vetëm pak trokitje +Bli bileta kinemaje \n me vetëm pak trokitje Dëshiron të hapësh lidhjen e jashtme? Mungon informacion Për të të ndihmuar të përfundosh detyrat, Google do të marrë URL-të dhe përmbajtjet e sajteve ku ti përdor "Asistentin", si dhe informacionet që dërgon nëpërmjet "Asistentit". Këto informacione mund të ruhen në "Llogarinë tënde të Google". "Asistentin" mund ta çaktivizosh te cilësimet e Chrome. Mëso më shumë diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryIntegrationTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryIntegrationTest.java index 7e06fd42182a..226ebb1ae2d7 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryIntegrationTest.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryIntegrationTest.java @@ -141,8 +141,10 @@ public void testDisplaysEmptyStateMessageWithoutSavedPasswords() throws TimeoutE @Test @SmallTest - @EnableFeatures(ChromeFeatureList.RECOVER_FROM_NEVER_SAVE_ANDROID) - public void testEnablesUnblacklistingToggle() throws TimeoutException { + @EnableFeatures({ChromeFeatureList.RECOVER_FROM_NEVER_SAVE_ANDROID, + ChromeFeatureList.AUTOFILL_KEYBOARD_ACCESSORY}) + public void + testEnablesUnblacklistingToggle() throws TimeoutException { mHelper.loadTestPage(false); mHelper.cacheCredentials(new String[0], new String[0], true); diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index f5629aabf364..024338262cf2 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java @@ -343,14 +343,6 @@ public FeedSurfaceCoordinator(Activity activity, SnackbarManager snackbarManager mMediator.onHomepagePromoStateChange(); } - // Native should already have been loaded because of FeedSurfaceMediator. - if (ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_V2)) { - // TODO(jianli): Temporary: simulate opening the feed V2 surface. This should probably - // move to FeedSurfaceMediator. - mFeedStreamSurface = new FeedStreamSurface(tabModelSelector, tabProvider, mActivity); - mFeedStreamSurface.surfaceOpened(); - } - mUserEducationHelper = new UserEducationHelper(mActivity, mHandler); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index c35d53ca79a7..19c058b70c0a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java @@ -1068,6 +1068,11 @@ protected void initDeferredStartupForActivity() { } recordDisplayDimensions(); + int playServicesVersion = ChromeVersionInfo.getPlayServicesApkVersionNumber(this); + RecordHistogram.recordBooleanHistogram( + "Android.PlayServices.Installed", playServicesVersion > 0); + RecordHistogram.recordSparseHistogram( + "Android.PlayServices.Version", playServicesVersion); }); DeferredStartupHandler.getInstance().addDeferredTask(() -> { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java index 1d4be4cad31b..5598b30d4979 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeVersionInfo.java @@ -111,7 +111,13 @@ public static String getGmsInfo() { "SDK=%s; Installed=%s; Access=%s", sdkVersion, installedGmsVersion, accessType); } - private static long getPlayServicesApkVersionNumber(Context context) { + /** + * + * @param context A Context with which to retrieve the PackageManager. + * @return The version code for the Google Play Services installed on the device or 0 if the + * package is not found. + */ + public static int getPlayServicesApkVersionNumber(Context context) { try { return context.getPackageManager() .getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0) diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/CookieControlsViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/CookieControlsViewTest.java index 8c5d9d18ce8f..624bb2ed7e79 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/CookieControlsViewTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/CookieControlsViewTest.java @@ -26,6 +26,7 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.FlakyTest; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.preferences.Pref; @@ -95,6 +96,7 @@ public void tearDown() { */ @Test @MediumTest + @FlakyTest(message = "https://crbug.com/1062645") public void testHiddenOnBlankPage() { setThirdPartyCookieBlocking(true); onView(withId(org.chromium.chrome.R.id.location_bar_status_icon)).perform(click()); @@ -107,6 +109,7 @@ public void testHiddenOnBlankPage() { */ @Test @MediumTest + @FlakyTest(message = "https://crbug.com/1062645") public void testHiddenWhenDisabled() { setThirdPartyCookieBlocking(false); loadUrlAndOpenPageInfo(mTestServer.getURLWithHostName("foo.com", mPath)); @@ -119,6 +122,7 @@ public void testHiddenWhenDisabled() { */ @Test @MediumTest + @FlakyTest(message = "https://crbug.com/1062645") public void testShow() { setThirdPartyCookieBlocking(true); loadUrlAndOpenPageInfo(mTestServer.getURLWithHostName("foo.com", mPath)); @@ -131,6 +135,7 @@ public void testShow() { */ @Test @MediumTest + @FlakyTest(message = "https://crbug.com/1062645") public void testUpdate() { Assert.assertEquals(0, getTotalPageActionHistogramCount()); diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 7facaa7ac507..b8d7e9d8acf3 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb @@ -3529,7 +3529,7 @@ Cihazda Family Link tətbiqini quraşdırmaqla bu hesabın ayarlarını idarə e Başqa bir şəbəkə seçə bilərsiniz. Gizli panelləri bağlayın Qlobal - istəyir: + bunu etmək istəyir: Foto və ya videonu yadda saxlamayın Həmçinin, mövcud datanı bu cihazdan silin Daxil etdiyiniz parol server tərəfindən rədd edildi. Səbəblər bunlar ola bilər: Parol çox qısadır. Parol rəqəm və ya simvollardan ibarət olmalıdır. Parol əvvəlki paroldan fərqli olmalıdır. diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 6d4f49fd7c4e..b00cac95adc6 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb @@ -3536,7 +3536,7 @@ Таксама можна выбраць іншую сетку. Закрыць укладкі інкогніта Глабальнае -Сайт запытвае наступныя дазволы + запытвае наступныя дазволы Адхіліць фота ці відэа Таксама выдаліць існуючыя даныя з гэтай прылады Уведзены пароль адхілены серверам. У ліку магчымых прычын: Пароль занадта кароткі. Пароль павінен змяшчаць лічбы або сімвалы. Пароль павінен адрознівацца ад папярэдніх пароляў. diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index d7a0d7ec1bb4..515331ba815b 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb @@ -1029,7 +1029,7 @@ Pots gestionar la configuració d'aquest compte instal·lant l'aplicació Family Pantalla d'inici de sessió Canvia a la gravadora de vídeo Configuració d'accessibilitat -Pregunta quan un lloc web vulgui descobrir dispositius Bluetooth propers (opció recomanada) +Pregunta'm quan un lloc web vulgui descobrir dispositius Bluetooth propers (opció recomanada) Botons de navegació en mode de tauleta Inicia com un usuari normal. Si l'has d'executar com a arrel per fer-ne desenvolupament, torna a executar-lo amb la marca que indica que no és zona de proves. Voleu instal·lar ? @@ -2595,7 +2595,7 @@ Pots gestionar la configuració d'aquest compte instal·lant l'aplicació Family De&sa el vídeo com a... Sistemes de fitxers El fitxer pot ser perillós. Vols enviar-lo a la Protecció avançada de Google perquè l'analitzi? Prem Maj+F6 per anar a l'àrea de la barra de baixades. -Comprova el disseny del teclat i torna-ho a provar. +Comprova la disposició del teclat i torna-ho a provar. El registre de la impressora s'ha cancel·lat. Per comprovar si hi ha actualitzacions, feu servir Ethernet, Wi-Fi o dades mòbils. En suprimir carpetes, es deixen de compartir, però no se'n suprimeixen els fitxers. @@ -2990,7 +2990,7 @@ Pots gestionar la configuració d'aquest compte instal·lant l'aplicació Family Vols cancel·lar la sincronització? No s'ha pogut connectar Configura un PIN -Pregunta quan un lloc web vulgui obrir i col·locar finestres a les pantalles +Pregunta'm quan un lloc web vulgui obrir i col·locar finestres a les pantalles S'està instal·lant l'actualització del sistema operatiu El vostre dispositiu no es pot connectar a Internet mitjançant . Trieu una altra xarxa. Més informació Novetats de Chromebook @@ -4427,7 +4427,7 @@ Assegureu-vos que no es pugui accedir a informació sensible. Llegir i modificar les dades dels llocs web i Ara pots gestionar els teus Comptes de Google des d'un sol lloc. És possible que tots els permisos (inclosos els d'accés) que hagis concedit a aplicacions, llocs web i extensions de Chrome i Google Play s'apliquin a tots els comptes en què tinguis la sessió iniciada. Més informació Bloqueig de la SIM mòbil -Emeteu el contingut de +Emet No s'ha pogut obtenir el perfil. &Edita... Il·lustració de l'error d'inscripció diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 34c6e6a6ac76..486e2fb460a6 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb @@ -2703,7 +2703,7 @@ Zpráva serveru: Nové &anonymní okno Jste připraveni začít používat zařízení . Nebyla nalezena žádná zařízení. Otevřete článek centra nápovědy na nové kartě. -Spravovat váš účet Google +Spravovat účet Google Eliptická křivka SECG secp384r1 (neboli NIST P-384) Zadejte platnou adresu URL Vždy povolit hostiteli nastavovat soubory cookie diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 1294f3bb66f7..f9d130cef877 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb @@ -169,7 +169,7 @@ In einem Inkognitofenster können Sie surfen, ohne dass Ihr Browserverlauf gespeichert wird Sie können die Verknüpfungen personalisieren Fingerabdrücke eingerichtet -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. Diese Datei kann nicht sicher heruntergeladen werden Neue Hintergrund-App hinzugefügt Fingerabdruck entfernen @@ -444,7 +444,7 @@ Der ausgewählte Drucker ist entweder nicht verfügbar oder nicht ordnungsgemäß installiert. Überprüfen Sie den Drucker oder wählen Sie einen anderen Drucker aus. Seit der letzten Eingabe Ihres Passwortes wurde eine andere Tastatur angeschlossen. Möglicherweise versucht jemand, darüber Ihre Tastatureingaben zu erfassen. JavaScript-Konsole -Einstellungen für Anzeigegerät öffnen +Bildschirmeinstellungen öffnen WLAN bei Inaktivität eingeschaltet lassen (Gast) WLAN-Aktivierung @@ -1361,7 +1361,7 @@ Wenn Sie die Family Link App auf Ihrem Gerät installieren, können Sie die Eins Komponente wird heruntergeladen. Durchschnitt bilden AutoFill -Nutzungs- und Diagnosedaten +Nutzungsdaten & Fehlerberichte Neu Berechtigung anfordern Weiß @@ -1558,7 +1558,7 @@ Servernachricht: Android Messages Bitte warten... Diese Seite anpassen -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen Verbindung hinzufügen Bluetooth aktivieren Wenn Sie im Web surfen, sollen aufgerufene Seiten schnell geladen werden. Nehmen Sie sich jetzt einen Moment Zeit, um Ihre Erweiterungen zu prüfen. @@ -1956,7 +1956,7 @@ Servernachricht: Mit den Schaltflächen im Tablet-Modus zum Launcher, zurück und zwischen Apps wechseln. Lupe Ihr Fingerabdruck wurde immer noch nicht erkannt. Bitte geben Sie Ihr Passwort ein. -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen Hoppla! Das System konnte die Richtlinie für Ihr Gerät nicht abrufen. weiterhin Zugriff auf Kamera und Mikrofon gestatten Entsperren Sie Ihr Profil, bevor Sie eine Person entfernen. @@ -2561,7 +2561,7 @@ Möchten Sie starten? Die Dokumente werden zur Druckvorbereitung an Google gesendet. Sie können Ihre Drucker und Ihren Druckverlauf im Google Cloud Print-Dashboard aufrufen, bearbeiten und verwalten. Virtuelle Maschine wird heruntergeladen &Lesezeichenleiste anzeigen -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen Exportieren Der Zugriff auf diese Ressource wurde vom Server nicht zugelassen. Spracheingabe @@ -2720,7 +2720,7 @@ Möchten Sie starten? Netzwerk von , , Signalstärke bei  %, Verbinden Soll diese App beim Einschalten des Geräts automatisch gestartet werden? Entfernen Sie zum Fortfahren den Sicherheitsschlüssel von Ihrem Gerät, stecken Sie ihn noch einmal ein und tippen Sie darauf -Anzeigen... +Maximieren... DNS-Suche fehlgeschlagen &Hilfe Auf Dokumentenscanner zugreifen, die per USB angeschlossen sind oder sich im lokalen Netzwerk befinden @@ -3139,7 +3139,7 @@ Möchten Sie starten? LEAP Speichern Erweiterungs-Website öffnen -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. Noch nicht aktualisiert WLAN aktivieren Nicht mehr anzeigen @@ -3269,7 +3269,7 @@ Möchten Sie starten? Die Einstellungen für die Elternaufsicht lassen sich in der Family Link App anpassen In die Zwischenablage kopiert Internet -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. {NUM_EXTENSIONS,plural, =1{Zum Ansehen der Erweiterung klicken}other{Zum Ansehen dieser Erweiterungen klicken}} Bitte führen einen Powerwash auf dem Gerät durch und versuchen Sie es noch einmal. Passwort eingeben @@ -3786,7 +3786,7 @@ Möchten Sie starten? Aus Aktivieren Ihr Gerät wird auf Kanal aktualisiert () -Neue Eingabestift-Tools in der Ablage einblenden +Eingabestift-Tools in der Ablage einblenden Debugging-Funktionen aktivieren Kostenpflichtige Verbindung nutzen DHCP-Suche fehlgeschlagen @@ -4029,7 +4029,7 @@ Möchten Sie starten? Zertifikate für die Authentifizierung angeben &Normal Kerberos-Einstellungen -Alle anzeigen... +Alle maximieren... Durch das Entfernen des betreuten Nutzers werden alle mit ihm verknüpften Dateien und lokalen Daten endgültig gelöscht. Besuchte Websites und Einstellungen des betreuten Nutzers kann der Manager möglicherweise weiterhin unter einsehen. Weitere Informationen Passwörter in Chrome importieren @@ -4445,7 +4445,7 @@ Möchten Sie starten? UI-Dienst Internet Printing Protocol (IPP) Mehr erfahren -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen Verbunden, Akkustand bei  % Zertifikate nicht geladen Verknüpfung kann nicht entfernt werden @@ -4542,7 +4542,7 @@ Möchten Sie starten? Zum Fortfahren Speicherplatz freigeben Zurzeit können einige Ihrer Karten nur auf diesem Gerät verwendet werden Schriftfarbe -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. App aktiviert Updater im Ruhemodus Andere Tabs schließen @@ -4749,7 +4749,7 @@ Möchten Sie starten? Eingabe Verknüpfung entfernt {NUM_TABS,plural, =1{Tab zu Gruppe hinzufügen}other{Tabs zu Gruppe hinzufügen}} -Zugriff auf E-Mail-Adresse zulassen +Ihre E-Mail-Adresse abrufen Die Passwörter stimmen nicht überein Wenn Sie Smart Lock für die Anmeldung in Ihrem Google-Konto verwenden möchten, gehen Sie zu "Einstellungen" > "Verbundene Geräte" > "Mein Smartphone" > "Smart Lock". Bitte versuchen Sie es später noch einmal @@ -4823,7 +4823,7 @@ Möchten Sie starten? Wenn Ihr Kind in der Schule kein Chromebook verwendet oder wenn Sie alle Aufgaben Ihres Kindes zu Hause lieber über Family Link verwalten möchten, klicken Sie unten auf die Schaltfläche "Weiter", um diesem Profil ein Konto einer Bildungseinrichtung hinzuzufügen. wird heruntergeladen... {NUM_PAGES,plural, =1{Seite verlassen}other{Seiten verlassen}} -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. Apps finden Erweiterungsdrucker Geben Sie Ihre aktuelle PIN ein, um sie zu ändern. Falls Sie Ihre PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen und dann eine neue PIN erstellen. @@ -5284,7 +5284,7 @@ Möchten Sie starten? &Gegen den Uhrzeigersinn drehen Kein Interesse Status -Google-Suche und Google Assistant +Suche und Assistant immer Zugriff auf Ihre Kamera gestatten Pop-ups wurden auf dieser Seite blockiert. streamen @@ -5420,7 +5420,7 @@ Möchten Sie starten? Erwartete ID: "", tatsächliche ID: "" Verknüpfungen verwalten Ihre gespeicherten Drucker -Einstellungen für Tastaturgerät öffnen +Tastatureinstellungen öffnen Die Datei enthielt mehrere Zertifikate, von denen einige nicht importiert wurden: Nie Touchpad-Beschleunigung @@ -5901,7 +5901,7 @@ Speichern Sie Ihre Schlüsseldatei an einem sicheren Ort. Sie benötigen die Dat Automatische Updates einrichten 1 Sekunde Keine Benachrichtigungen anzeigen -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- sowie Geräte- und App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen Video aufnehmen Benutzerdefinierte Dateien Eigenschaftsformat: @@ -5936,7 +5936,7 @@ Speichern Sie Ihre Schlüsseldatei an einem sicheren Ort. Sie benötigen die Dat Systemupdate verfügbar. Download wird vorbereitet... Nach schädlicher Software wird gesucht...  – Port -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. 2 Sekunden Schriftgrad vergrößern könnte schädlich sein. Soll sie zum Scannen an das erweiterte Sicherheitsprogramm von Google gesendet werden? @@ -6004,7 +6004,7 @@ Speichern Sie Ihre Schlüsseldatei an einem sicheren Ort. Sie benötigen die Dat Fehler beim Download von Suche nach einem Mobilfunknetz läuft. Weitere Informationen Zeitüberschreitung bei der Initialisierung der Attribute für die Installationszeit. -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen Wenn Sie dieses Symbol sehen, können Sie Ihren Fingerabdruck zur Identifizierung oder zur Autorisierung eines Kaufs verwenden. Fingerabdruck hinzugefügt &In Ordner anzeigen @@ -6187,7 +6187,7 @@ Speichern Sie Ihre Schlüsseldatei an einem sicheren Ort. Sie benötigen die Dat Einige Einstellungen wurden zurückgesetzt Neue Cookie-Einstellungen werden nach erneutem Laden der Seite wirksam Drahtlos -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Der Inhaber kann festlegen, ob Diagnose- und Nutzungsdaten von diesem Gerät an Google gesendet werden. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in Ihrem Google-Konto gespeichert. Neue Geräte Daten verwalten, die synchronisiert werden Optionen für Schalterzugriff @@ -6374,15 +6374,15 @@ Speichern Sie Ihre Schlüsseldatei an einem sicheren Ort. Sie benötigen die Dat Ein anderes Programm auf Ihrem Computer hat ein Design hinzugefügt, das sich möglicherweise auf die Funktionsweise von Chrome auswirkt. Du hast das Zeitlimit erreicht, das deine Eltern für festgelegt haben. Morgen kannst du die App wieder lang nutzen. Nach Bluetooth-Geräten wird gesucht… -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Sie können uns helfen, Android für Ihr Kind zu verbessern, indem Sie zulassen, dass Diagnose- und Gerätedaten sowie App-Nutzungsdaten automatisch an Google gesendet werden. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn die Einstellung "Zusätzliche Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. Nachfragen, wenn eine Website auf Bluetooth-Geräte zugreifen möchte -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Diese Einstellung wird vom Inhaber erzwungen. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" aktiviert ist, werden diese Daten eventuell in Ihrem Google-Konto gespeichert. Weitere Informationen – Bluetooth-Gerät verbunden Nutzername auf Anmeldebildschirm Linux (Beta) auf Ihrem einrichten Der Vorgang kann einige Minuten dauern. Linux-Container wird gestartet. Die Website kann Ihren Bildschirm freigeben -Sie haben die Möglichkeit, Nutzungs- und Diagnosedaten zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen +Sie haben die Möglichkeit, Nutzungsdaten & Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- sowie Geräte- und App-Nutzungsdaten an Google. Ihr Kind wird mithilfe dieser Daten nicht identifiziert, sie helfen jedoch beispielsweise dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google, beispielsweise Android-Entwickler, nützlich. Wenn zusätzlich die Einstellung "Web- & App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten in seinem Google-Konto gespeichert. Weitere Informationen L2TP/IPSec + vorinstallierter Schlüssel -Suche Alle Offlinedaten werden gelöscht diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 4ad3ca3dbed0..5e00541b8995 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb @@ -27,7 +27,7 @@ Μεγέθυνση Φόρτωση προεπισκόπησης Ελέγξτε τους νέους όρους. -Ελευθερώστε χώρο στον δίσκο, για την εκκίνηση εφαρμογών Android. +Απελευθερώστε χώρο στον δίσκο, για την εκκίνηση εφαρμογών Android. Πρόσβαση στις σειριακές συσκευές Ενεργοποίηση του adb για δημιουργία εικόνων εφαρμογών Απενεργοποίηση @@ -2308,7 +2308,7 @@ Χαμηλότερος Μετά από 24 ώρες, ο διαχειριστής σας θα εκτελέσει ενημέρωση για μία μόνο φορά που θα έχει ως αποτέλεσμα τη διαγραφή των τοπικών δεδομένων σας κατά την επόμενη επανεκκίνηση της συσκευής σας. Αποθηκεύστε τυχόν απαραίτητα τοπικά δεδομένα στο cloud μέσα στις επόμενες 24 ώρες. Περισσότερες ενέργειες, αποθηκευμένος λογαριασμός για τον χρήστη στον τομέα -Ελευθερώστε χώρο στον δίσκο, διαφορετικά η συσκευή θα σταματήσει να ανταποκρίνεται. +Απελευθερώστε χώρο στον δίσκο, διαφορετικά η συσκευή θα σταματήσει να ανταποκρίνεται. Για ενεργοποίηση, κάντε επαναφορά στον συγχρονισμό, ώστε να καταργηθεί η φράση πρόσβασης συγχρονισμού Εμφάνιση PIN Παρουσιάστηκε ένα πρόβλημα με το ARC++. @@ -3245,7 +3245,7 @@ Η υπηρεσία τοποθεσίας της Google χρησιμοποιεί πηγές όπως Wi-Fi, δίκτυα κινητής τηλεφωνίας και αισθητήρες, για να συμβάλει στην εκτίμηση της τοποθεσίας της συσκευής σας. Ρυθμίσεις απορρήτου Όνομα διακομιστή SSL πιστοποιητικού Netscape -Ελευθερώστε χώρο στον δίσκο, διαφορετικά τα δεδομένα επιλογής ενδέχεται να διαγραφούν αυτόματα +Απελευθερώστε χώρο στον δίσκο, διαφορετικά τα δεδομένα επιλογής ενδέχεται να διαγραφούν αυτόματα Θα γίνει παράβλεψη του τηλεφώνου Σύνθετες ρυθμίσεις για Θέμα @@ -4322,7 +4322,7 @@ Ρυθμός επανάληψης Σάρωση Bluetooth Το μικρόφωνο έχει απενεργοποιηθεί στις προτιμήσεις συστήματος Mac. -Ελευθερώστε χώρο 512 MB τουλάχιστον, διαφορετικά η συσκευή σας θα σταματήσει να ανταποκρίνεται. Για να ελευθερώσετε χώρο, διαγράψτε αρχεία από τον αποθηκευτικό χώρο της συσκευής. +Απελευθερώστε χώρο 512 MB τουλάχιστον, διαφορετικά η συσκευή σας θα σταματήσει να ανταποκρίνεται. Για να ελευθερώσετε χώρο, διαγράψτε αρχεία από τον αποθηκευτικό χώρο της συσκευής. Ο τομέας απαιτεί να συνδεθείτε άμεσα σε Wi-Fi και να κατεβάσετε μια ενημέρωση. Η ενημέρωση θα κατεβεί αυτόματα όταν συνδεθείτε στο διαδίκτυο. Επιλογές Μη διαθέσιμη εντολή. Πατήστε control-N για να ανοίξετε ένα νέο παράθυρο. @@ -4349,7 +4349,7 @@ Υπογραφή για πάντα Microsoft Περιήγηση επισκέπτη Εναλλαγή κύριου κουμπιού ποντικιού -Απαιτούνται τουλάχιστον ελεύθερου αποθηκευτικού χώρου για την αναβάθμιση των Linux. Ελευθερώστε χώρο στη συσκευή σας και δοκιμάστε ξανά. +Απαιτούνται τουλάχιστον ελεύθερου αποθηκευτικού χώρου για την αναβάθμιση των Linux. Απελευθερώστε χώρο στη συσκευή σας και δοκιμάστε ξανά. Χρήση ασφαλούς DNS Ο έλεγχος ασφαλείας ολοκληρώθηκε. Μετονομασία φακέλου @@ -4544,7 +4544,7 @@ Άνοιγμα μεγιστοποιημένης εφαρμογής Συμβάλετε στη βελτίωση της ασφάλειας του Chrome Η επέκταση "" θέλει να εκτυπώσει το αρχείο με τον εκτυπωτή . -Ελευθερώστε χώρο για να συνεχίσετε +Απελευθερώστε χώρο για να συνεχίσετε Αυτήν τη στιγμή, έχετε ορισμένες κάρτες που μπορούν να χρησιμοποιηθούν μόνο σε αυτήν τη συσκευή Χρώμα κειμένου Αποστολή δεδομένων χρήσης και διαγνωστικών. Επί του παρόντος, αυτή η συσκευή στέλνει αυτόματα διαγνωστικά δεδομένα, δεδομένα συσκευής και χρήσης εφαρμογών στην Google. Αυτά τα δεδομένα δεν θα χρησιμοποιηθούν για την ταυτοποίηση του παιδιού σας, ενώ θα βοηθήσουν στη βελτίωση σταθερότητας του συστήματος και των εφαρμογών, καθώς και στην παροχή άλλων βελτιώσεων. Επίσης, ορισμένα συγκεντρωτικά δεδομένα θα συμβάλλουν στη βελτίωση των εφαρμογών Google και θα χρησιμοποιηθούν από συνεργάτες της Google, όπως τους προγραμματιστές Android, προκειμένου να βελτιώσουν τις εφαρμογές και τα προϊόντα τους. Αυτή η ρύθμιση επιβάλλεται από τον κάτοχο. Εάν είναι ενεργή η πρόσθετη Δραστηριότητα ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google. diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index badd0fa2e6a0..9b47061dc61f 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb @@ -205,7 +205,7 @@ Hay una restauración de Linux en curso Error de extensión Tus aplicaciones y ajustes se sincronizarán en todos los dispositivos Chrome OS en los que hayas iniciado sesión con tu cuenta de Google. Para ver las opciones de sincronización del navegador, ve a la configuración de Chrome. -¿Quieres quitar la sugerencia del portapapeles? +¿Quitar la sugerencia del portapapeles? se ha bloqueado porque está obsoleto Falta una llave de apertura: Esta acción borrará de datos almacenados por sitios web y aplicaciones instaladas @@ -502,7 +502,7 @@ ¿Analizar archivo antes de abrirlo? Contraseña caducada Reiniciar y continuar -Los datos de tu hijo en Classroom estarán protegidos. Más información +Los datos de tu hijo/a en Classroom estarán protegidos. Más información Te permite configurar la frecuencia de repetición del teclado, la predicción de palabras y otros ajustes Inhabilitar Asistente de Google ¿Has cambiado esta contraseña en ? @@ -715,7 +715,7 @@ No se ha podido obtener el token de autenticación. Cierra la sesión y vuelve a iniciarla para intentarlo de nuevo. Asignación de interruptores a acciones Iniciar sesión como -¿Quieres eliminar el certificado ""? +¿Eliminar el certificado ""? Red de , , conectar Cambiar el tamaño de disco de Linux Espacio en disco @@ -869,7 +869,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Debes iniciar sesión en Chrome para registrar nuevos dispositivos Vas a habilitar las funciones de depuración de Chrome OS, que configurarán el daemon sshd y habilitará el arranque desde unidades USB. tus rasgos físicos, como tu altura -¿Quieres eliminar el certificado de servidor ""? +¿Eliminar el certificado de servidor ""? Iniciar sesión automáticamente Versión: Borrar tipos @@ -1299,7 +1299,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Desarrollar aplicaciones de Android Conéctate a una red Wi-Fi para empezar Mostrar opciones de entrada en la estantería -¿Quieres eliminar ""? +¿Eliminar ""? no ha podido completar la instalación, pero se seguirá ejecutando desde la imagen de disco. FIDO Historial de impresión @@ -2312,7 +2312,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Para activar esta opción, restablece la sincronización para eliminar tu frase de contraseña de sincronización Mostrar PINs Ha habido un problema con ARC++. -Activar Asistente de Google. +Activar Asistente de Google Se ha inhabilitado porque contiene software malicioso. Administrador de descargas Vídeo de la cámara o un archivo @@ -2543,7 +2543,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Almacenamiento permanente Inhabilitado Estos componentes se comparten con otros usuarios de este dispositivo. Eliminar un componente podría afectar a otros usuarios. -¿Quieres eliminar el certificado de CA ""? +¿Eliminar el certificado de CA ""? 20x Idiomas Arrastra una pantalla para moverla @@ -2694,7 +2694,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Volver a analizar Tu padre o madre ha bloqueado . Pídele permiso para usar esta aplicación. *.jpeg, *.jpg, *.png -Subtítulos instantáneos +Subtítulos automáticos Ay&uda Márgenes Usa un número PIN en lugar de una contraseña para desbloquear el dispositivo. Para crear el PIN más tarde, ve a Configuración. @@ -3276,7 +3276,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami {NUM_EXTENSIONS,plural, =1{Haz clic para ver la extensión}other{Haz clic para ver las extensiones}} Realiza un powerwash e inténtalo de nuevo. Escribe tu contraseña -¿Quieres eliminar el certificado ? +¿Eliminar el certificado ? Error al importar el certificado Resaltar el símbolo de intercalación del texto No se ha encontrado ningún dispositivo. @@ -5010,7 +5010,7 @@ Exponente público ( bits): Accede cuando quieras a tus contraseñas con tu cuenta de Google Inhabilitar Instalar aplicaciones automáticamente -¿Quieres quitar la contraseña? +¿Quitar la contraseña? Abriendo en ahora Al seleccionar esta impresora, concedes permiso a la siguiente extensión para acceder a tu impresora: Portal: @@ -6002,7 +6002,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear Enviar información del sistema Gráficos de fondo La pestaña en segundo plano está usando la cámara -¿Quieres eliminar todos los datos y aplicaciones de Linux de la carpeta Archivos de Linux del ? +¿Eliminar todos los datos y aplicaciones de Linux de la carpeta Archivos de Linux del ? Copiar enlace Escuchando las actividades de extensión... No se ha podido descargar @@ -6212,7 +6212,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear Opción de configuración no admitida: Durante la carga Iniciando... -Subtítulos instantáneos +Subtítulos automáticos Orientación de la pantalla Memoria de JavaScript Ocultar detalles @@ -6357,7 +6357,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear Añadir accesos directos a las siguientes ubicaciones: Configurando Linux Estás usando una marca de función no admitida (), lo que afectará a la estabilidad y la seguridad. -¿Quieres eliminar la sugerencia? +¿Eliminar la sugerencia? &Opciones Salir Volver a iniciar sesión diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 35191fc87dec..4b84050fee17 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb @@ -910,7 +910,7 @@ Selle konto seadete haldamiseks installige oma seadmesse Family Link. Saatsime Linuxi Androidi rakenduse arendamine Viga jagatava üksuse ühendamisel. Jagatavat üksust võrgust ei leitud. Vormindamine on lõpetatud -Ülekande vaheleht +Vahelehe ülekandmine Otsige sihtkohti Kas lisada „”? Sisestati vale vahelehe register. @@ -4427,7 +4427,7 @@ kasutades juhtpaneeli funktsiooni . Andmete lugemine ja muutmine veebisaidil ja Nüüd võite kõiki oma Google’i kontosid ühes kohas hallata. Juurdepääs ja load, mille olete andnud rakendustele, veebisaitidele ning laiendustele Chrome’is ja Google Plays, ei pruugi rakenduda kõikidele kontodele, kuhu olete sisse loginud. Lisateave Mobiilsidevõrgu SIM-kaardi lukk -Kanna üle host +Ülekandmine: Profiili ei õnnestunud hankida. &Muuda ... Registreerimisvea illustratsioon diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 731ecde7848b..e10cb7b6a691 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb @@ -6016,7 +6016,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr Réessayer Favoris ou signets Une erreur est survenue lors de la récupération des paramètres des politiques sur le serveur : . -Une fois votre configuré, appuyez sur le bouton de l'Assistant Google, ou dites « Ok Google » pour obtenir de l'aide à tout moment. Pour effectuer des modifications, ouvrez les paramètres de l'Assistant Google. +Une fois votre configuré, appuyez sur le bouton Assistant, ou dites « Ok Google » pour obtenir de l'aide à tout moment. Pour effectuer des modifications, ouvrez les paramètres de l'Assistant Google. Terminé veut : Numéro de port diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 293a39e66016..002761a842f5 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb @@ -846,7 +846,7 @@ Instala a aplicación Family Link no teu dispositivo e poderás xestionar a conf Non hai ningún ficheiro de rexistro local. {NUM_EXTENSIONS,plural, =1{Fai clic para instalar a extensión}other{Fai clic para instalar estas extensións}}  % de batería -Permite activar ou desactivar as funcións de tocar e facer clic ou tocar e arrastrar +Permite activar ou desactivar as funcións de tocar para facer clic ou tocar e arrastrar Ocultar este plugin Tamaño medio (recomendado) Utilizar a aceleración de hardware cando estea dispoñible @@ -2549,7 +2549,7 @@ Instala a aplicación Family Link no teu dispositivo e poderás xestionar a conf Para mover unha pantalla, arrástraa Configurando Destacar enfoque do teclado -Activar a función Tocar para facer clic +Activar a función de tocar para facer clic Abrir en pestana nova Continuar onde o deixaches Mantén premida a icona do menú de aplicacións para falar co teu Asistente de Google. @@ -4518,7 +4518,7 @@ Instala a aplicación Family Link no teu dispositivo e poderás xestionar a conf Preguntar cando un sitio queira utilizar mensaxes exclusivas do sistema para acceder aos dispositivos MIDI (recomendado) Idioma da páxina que se quere traducir Emitir contido do escritorio -Tocar e facer clic no panel táctil +Tocar para facer clic do panel táctil Precisas iniciar sesión en Chrome para ver os teus dispositivos Copiar &enderezo de correo electrónico &Inspeccionar elementos diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 4018a4cfd167..44118fb87909 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb @@ -3536,7 +3536,7 @@ Postavkama računa možete upravljati tako da instalirate aplikaciju Family Link Također možete odabrati neku drugu mrežu. Zatvori anonimne kartice Globalno - želi + traži Odbaci fotografiju ili videozapis Također uklonite postojeće podatke s uređaja Poslužitelj je odbio zaporku koju ste unijeli. Mogući su razlozi sljedeći: zaporka je prekratka. Zaporka mora sadržavati brojeve ili simbole. Zaporka mora biti različita od prethodnih zaporki. diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 01451a22b230..abf884adf8e6 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb @@ -3539,7 +3539,7 @@ Դուք կարող եք նաև այլ ցանց ընտրել: Փակել ինկոգնիտո ներդիրները Համընդհանուր - կայքը ցանկանում է՝ +․ անհրաժեշտ է հետևյալ թույլտվությունը՝ Հեռացնել լուսանկարը կամ տեսանյութը Սարքից հեռացնել ընթացիկ տվյալները Ձեր մուտքագրած գաղտնաբառը չի ընդունվում սերվերի կողմից: Հնարավոր պատճառներն են՝ գաղտնաբառը չափազանց կարճ է, գաղտնաբառը պետք է պարունակի թվեր կամ նշաններ, գաղտնաբառը պետք է տարբեր լինի նախորդ գաղտնաբառերից: diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 736fe60c5f3e..6b62825aa620 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb @@ -340,7 +340,7 @@ Компьютериңиздеги жана каралган вебсайттардагы бардык дайын-даректериңизди окуп жана өзгөртүңүз. Басып чыгаруу Программаны акыркы жолу жаңыртуу -Издөө жана башка Google кызматтарын жекелештирүү үчүн, Google көрүлгөн вебсайттарыңызды колдонушу мүмкүн. Сиз же ата-энеңиз аны myaccount.google.com/activitycontrols/search дарегине өтүп, өзгөртүп алсаңыздар болот +Издөө жана башка Google кызматтарын жекелештирүү үчүн, Google көрүлгөн вебсайттарыңызды колдонушу мүмкүн. Ата-энең же өзүң аны myaccount.google.com/activitycontrols/search дарегине өтүп, өзгөртүп алсаңар болот Издөө каражаттарын башкаруу Мүмкүнчүлүк алууга уруксат суроо Бул сиздин баштоо бетиңизди, жаңы өтмөк бетин, издөө каражатын жана кадалган өтмөктөрдү баштапкы абалга келтирет.Ушуну менен бардык кеңейтүүлөр жана кукилер сыяктуу убактылуу дайындар өчүрүлөт. Сиз сактаган веб-баракчалардын даректери, таржымалыңыз жана сакталган сырсөздөрүңүз жок кылынбайт. @@ -1135,7 +1135,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу Өтмөк жабылып калганда эмне кылып жаттыңыз эле? Wi-Fi'ды өчүрүү Google Жардамчы жүктөлбөй койду. Интернет байланышыңызды текшерип туруп, кайталап көрүңүз. -Linux (бета) үчүн бир калыптагы диск өлчөмүн калтыргыңыз келгени аныкпы? +Linux (бета) үчүн бир калыптагы диск өлчөмүн калтырасызбы? Linux'ту (бета-версиясы) жаңыртуу талап кылынат Бетти автожаңылоо үчүн URL'ге сурам параметрлерин кошуңуз: chrome://network/?refresh=<sec> , diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 2215ad447647..d079fb7eb279 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb @@ -809,7 +809,7 @@ & Шинэ цонхон дахь нээлттэй аудио Сүлжээний хаягийн тохиргоог харуулах Файлыг скан хийх -Хурдан хариу үйлдлийн код +QR код ПИН-г таахад хялбар байж болзошгүй Татаж авах ажиллагаа хэт удаан байсан бөгөөд үүнийг сүлжээнээс зогсоосон байна. Өргөтгөсөн бодит орчин @@ -2949,7 +2949,7 @@ Таныг энэ хуудсыг харахад дараах күүкийг тохируулсан Андройд Мессежийг таны утаснаас таны Chromebook-д мессеж илгээхийг зөвшөөрдөг Танд эдгээр байгууллагаас таныг тодорхойлох сертификат байна -Утасныхаа тохирох баталгаажуулалтын аппаар хурдан хариу үйлдлийн кодыг скан хийх. +Утасныхаа тохирох баталгаажуулалтын аппаар QR кодыг скан хийх. -ийн нууц үг Play Store Сүлжээний нэрийн серверийг тохируулах @@ -3852,7 +3852,7 @@ -т нэвтрэнэ үү. Багасгах Таны -г энэ шинэчлэлтийн дараа дахин эхлүүлэх болно. Программ хангамж болон аюулгүй байдлын цаашдын шинэчлэлтийг автоматаар суулгана. -Хурдан хариу үйлдлийн кодыг скан хийх +QR кодыг скан хийх ID-ыг мэдээлэх Файл задлах боломжгүй байна Монитор @@ -3957,7 +3957,7 @@ Сонгосон жагсаалтаас хасах дээрх зөвлөгөөнүүд болон шинэчлэлтүүд Хэлж бичүүлэх -Энэ зурагт хурдан хариу үйлдлийн код үүсгэх +Энэ зурагт QR код үүсгэх Товчлол нэмэх Микрофон, аудионы түвшинг шалгана уу. "" HID төхөөрөмжид холбогдох хүсэлтэй байна @@ -4410,7 +4410,7 @@ Google Play-г нээх Цонхнуудыг баруун тийш нь хаах Нууц үгээ хадгална уу -Энэ зурагт хурдан хариу үйлдлийн код үүсгэх +Энэ зурагт QR код үүсгэх Файлыг задлах боломжгүй байна: Энэ төхөөрөмжид нэмэх хяналт бүхий хэрэглэгчийг сонгох. Синк хийсэн өгөгдлийг Google Хяналтын самбарт удирдах @@ -4587,7 +4587,7 @@ Экспорт хийсэн файлыг харах боломжтой хүн бүрд таны нууц үг харагдана. Хэрэглэгч: Удирдлаганд байдаг өргөтгөлүүд -Энэ хуудсанд хурдан хариу үйлдлийн код үүсгэх +Энэ хуудсанд QR код үүсгэх Тогтмол цонхоор нээ Үйл ажиллагааг устгах -г нээж чадсангүй @@ -4940,7 +4940,7 @@ Мониторын хэмжээ Сайт нэмэх Хайх өгөгдөл -Хурдан хариу үйлдлийн код үүсгэгч +QR код үүсгэгч -д нээж чадсангүй. Системийнхээ админтай холбогдоно уу. Этернэт EAP: Эхлэх цаг @@ -5751,7 +5751,7 @@ И-мэйл хаягийг хуулбарлах Удирдамж олдсонгүй. Шалгаж дууслаа -Энэ хуудсанд хурдан хариу үйлдлийн код үүсгэх +Энэ хуудсанд QR код үүсгэх Энэ өргөтгөлд таны зочилдог вэб сайтын бүх өгөгдлийг унших болон өөрчлөхийг зөвшөөрнө үү: Серверүүд ажиллах боломжгүй байна. Пянз diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 71e5dea575e3..66e689c417a7 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb @@ -3668,7 +3668,7 @@ सर्भरबाट नीति ल्याउने क्रममा त्रुटि भयो। सेलुलर रोमिङ केन्द्र -Linux को स्तरवृद्धि गर्नुले अत्याधिक मात्रामा तपाईंको ब्याट्रीको खपत हुन्छ। कृपया आफ्नो यन्त्र कुनै चार्जरमा जोडी फेरि प्रयास गर्नुहोस्। +Linux को स्तरवृद्धि गर्नुले अत्यधिक मात्रामा तपाईंको ब्याट्रीको खपत हुन्छ। कृपया आफ्नो यन्त्र कुनै चार्जरमा जोडी फेरि प्रयास गर्नुहोस्। &खोज इन्जिनहरूलाई सम्पादन गर्नुहोस्... यसमा सिंक गर्दै पहुँचसम्बन्धी विकल्पहरू सधैँ देखाइयोस् diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index de623961b04d..780fd2e06924 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb @@ -563,7 +563,7 @@ Editar arquivo Apenas a sessão anônima atual Sites que nunca podem usar cookies -Desativar o "Modo ambiente" +Desativar o Modo ambiente Remover esta pessoa Nunca se preocupe com suas senhas A "confirmação de segurança" foi executada em @@ -688,7 +688,7 @@ Tem certeza de que quer ativar o modo de demonstração? Aperte Ctrl e clique para executar o plug-in Grupo : -Ativar o "Modo ambiente" +Ativar o Modo ambiente Esta página tem controle total de dispositivos MIDI. Girar no &sentido horário Encontrar software nocivo @@ -1856,7 +1856,8 @@ Para gerenciar as configurações dessa conta, instale o app Family Link no seu Reabrir guia fechada Download concluído: . PIN incorreto. Você tem tentativas restantes. -Permitir acesso aos URLs do arquivo +Permitir acesso a URLs de arquivo + "" quer remover essa extensão. Não foi possível enviar sua solicitação a para acessar este site. Tente novamente. A confirmação de segurança foi executada há pouco tempo @@ -1953,7 +1954,7 @@ Para gerenciar as configurações dessa conta, instale o app Family Link no seu Desconecta você da maioria dos sites. Você permanecerá conectado à sua Conta do Google para que seus dados sincronizados possam ser excluídos. Cancelar a configuração da conta? Esta é uma conta para as crianças gerenciada por . -Marcador +Etiqueta Smartphone Android Remover este usuário As portas HDMI and USB-C não podem ser usadas para vídeo ao mesmo tempo. Use uma porta de vídeo diferente. @@ -3151,7 +3152,7 @@ Para gerenciar as configurações dessa conta, instale o app Family Link no seu Adicionar extensão Limpar cópia Formas geométricas -Desativar o "Modo ambiente" +Desativar o Modo ambiente Não permitir que nenhum site faça download de vários arquivos automaticamente Selecionar tudo Você poderá usá-lo amanhã por . @@ -4222,7 +4223,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Nova janela anônima Instalar atualizações e apps Você perguntou ao seu responsável se pode visitar este site -Escolher fonte do "Modo ambiente" +Escolher fonte do Modo ambiente Conecte-se à internet pelo smartphone Permita ou bloqueie no seu computador. Google Assistente @@ -5134,7 +5135,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Registrando dispositivo… Ativar a Play Store Conectando-se a "" -"Modo ambiente" +Modo ambiente Adicione uma conta escolar ou gerencie contas de criança aqui. Saiba mais Falha do sistema ao salvar a configuração do dispositivo. Carregando. @@ -5368,7 +5369,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis Visualizar conta Tipo de provedor O dispositivo foi bloqueado -Ativar o "Modo ambiente" +Ativar o Modo ambiente Destinos recentes Duplicar Mouse Bluetooth pareado diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 060d415b4602..d8db88801a13 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb @@ -3533,7 +3533,7 @@ Cilësimet e kësaj llogarie mund t'i menaxhosh duke instaluar aplikacionin Fami Mund të zgjedhësh po ashtu një rrjet tjetër. Mbyll skedat e fshehta Globale - dëshiron që + dëshiron Hiq fotografinë dhe videon Hiq gjithashtu edhe të dhënat ekzistuese nga kjo pajisje Fjalëkalimi që fute u refuzua nga serveri. Arsyet e mundshme përfshijnë: fjalëkalimi është tepër i shkurtër. Fjalëkalimi duhet të përfshijë numra ose simbole. Fjalëkalimi duhet të jetë i ndryshëm nga fjalëkalimet e mëparshme. diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 5fa174ff6a9e..b447b08e2f1a 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb @@ -3535,7 +3535,7 @@ 您也可以選取其他網絡。 關閉無痕式分頁 通用 - 要求下列權限: +要求以下權限: 捨棄相片或影片 並從此裝置移除現有的資料 伺服器已拒絕您輸入的密碼。原因可能包括:密碼太短、密碼必須包含數字或符號、新舊密碼必須有所不同。 diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 87730ea47fe9..632d7b80eb58 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -231,6 +231,7 @@ #include "components/permissions/quota_permission_context_impl.h" #include "components/policy/content/policy_blacklist_navigation_throttle.h" #include "components/policy/content/policy_blacklist_service.h" +#include "components/policy/core/common/policy_pref_names.h" #include "components/policy/core/common/policy_service.h" #include "components/policy/policy_constants.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -350,6 +351,7 @@ #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" +#include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" #include "third_party/blink/public/mojom/site_engagement/site_engagement.mojom.h" #include "third_party/blink/public/mojom/user_agent/user_agent_metadata.mojom.h" @@ -2309,6 +2311,16 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( prefs->GetBoolean(prefs::kAppCacheForceEnabled)) { command_line->AppendSwitch(switches::kAppCacheForceEnabled); } + + // The UserAgentClientHint feature is typically managed via a + // base::Feature, but it has a managed policy override. The override is + // communicated to blink via a custom command-line flag. + PrefService* local_state = g_browser_process->local_state(); + if (!local_state->GetBoolean( + policy::policy_prefs::kUserAgentClientHintsEnabled)) { + command_line->AppendSwitch( + blink::switches::kUserAgentClientHintDisable); + } } if (IsAutoReloadEnabled()) diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 6234a1e4dc69..b748814c49f2 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn @@ -2861,6 +2861,7 @@ source_set("unit_tests") { "base/file_flusher_unittest.cc", "bluetooth/debug_logs_manager_unittest.cc", "cert_provisioning/cert_provisioning_invalidator_unittest.cc", + "cert_provisioning/cert_provisioning_platform_keys_helpers_unittest.cc", "cert_provisioning/cert_provisioning_scheduler_unittest.cc", "cert_provisioning/cert_provisioning_test_helpers.cc", "cert_provisioning/cert_provisioning_test_helpers.h", diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager.cc b/chrome/browser/chromeos/arc/session/arc_session_manager.cc index c99cd28a9cfb..f95b3d578e82 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.cc @@ -153,6 +153,32 @@ bool ShouldLaunchPlayStoreApp(Profile* profile, return true; } +// Defines the conditions that require UI to present eventual error conditions +// to the end user. +// +// Don't show UI for ARC Kiosk because the only one UI in kiosk mode must +// be the kiosk app. In case of error the UI will be useless as well, because +// in typical use case there will be no one nearby the kiosk device, who can +// do some action to solve the problem be means of UI. +// Same considerations apply for MGS sessions in Demo Mode. +// All other managed sessions will be attended by a user and require an error +// UI. +bool ShouldUseErrorDialog() { + if (!g_ui_enabled) + return false; + + if (IsArcOptInVerificationDisabled()) + return false; + + if (IsArcKioskMode()) + return false; + + if (chromeos::DemoSession::IsDeviceInDemoMode()) + return false; + + return true; +} + void ResetStabilityMetrics() { // TODO(shaochuan): Make this an event observable by StabilityMetricsManager // and eliminate this null check. @@ -525,13 +551,7 @@ void ArcSessionManager::Initialize() { // ARC support Chrome app is rarely used (only opt-in and re-auth flow). // So, it may be better to initialize it lazily. // TODO(hidehiko): Revisit to think about lazy initialization. - // - // Don't show UI for ARC Kiosk because the only one UI in kiosk mode must - // be the kiosk app. In case of error the UI will be useless as well, because - // in typical use case there will be no one nearby the kiosk device, who can - // do some action to solve the problem be means of UI. - if (g_ui_enabled && !IsArcOptInVerificationDisabled() && - !IsRobotOrOfflineDemoAccountMode()) { + if (ShouldUseErrorDialog()) { DCHECK(!support_host_); support_host_ = std::make_unique(profile_); support_host_->SetErrorDelegate(this); @@ -1007,11 +1027,6 @@ void ArcSessionManager::OnAndroidManagementChecked( switch (result) { case policy::AndroidManagementClient::Result::UNMANAGED: VLOG(1) << "Starting ARC for first sign in."; - sign_in_start_time_ = base::TimeTicks::Now(); - arc_sign_in_timer_.Start( - FROM_HERE, GetArcSignInTimeout(), - base::BindOnce(&ArcSessionManager::OnArcSignInTimeout, - weak_ptr_factory_.GetWeakPtr())); StartArc(); // Since opt-in is an explicit user (or admin) action, relax the // cgroups restriction now. @@ -1078,6 +1093,8 @@ void ArcSessionManager::StartArc() { << state_; state_ = State::ACTIVE; + MaybeStartTimer(); + // ARC must be started only if no pending data removal request exists. DCHECK(!profile_->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); @@ -1197,6 +1214,22 @@ void ArcSessionManager::MaybeReenableArc() { RequestEnableImpl(); } +// Starts a timer to check if provisioning takes too loong. +// The timer will not be set if this device was previously provisioned +// successfully. +void ArcSessionManager::MaybeStartTimer() { + if (IsArcProvisioned(profile_)) { + return; + } + + VLOG(1) << "Setup provisioning timer"; + sign_in_start_time_ = base::TimeTicks::Now(); + arc_sign_in_timer_.Start( + FROM_HERE, GetArcSignInTimeout(), + base::BindOnce(&ArcSessionManager::OnArcSignInTimeout, + weak_ptr_factory_.GetWeakPtr())); +} + void ArcSessionManager::OnWindowClosed() { CancelAuthCode(); } diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager.h b/chrome/browser/chromeos/arc/session/arc_session_manager.h index 20abfeae0e7d..454f0eb64701 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager.h +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.h @@ -374,6 +374,11 @@ class ArcSessionManager : public ArcSessionRunner::Observer, // is fixed. void MaybeReenableArc(); + // Starts a timer to check if provisioning takes too long. + // The timer will not be set if this device was previously provisioned + // successfully. + void MaybeStartTimer(); + // Requests the support host (if it exists) to show the error, and notifies // the observers. void ShowArcSupportHostError(ArcSupportHost::Error error, diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc index 013b2c97205e..02d143a8c178 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc @@ -325,9 +325,10 @@ TEST_F(ArcSessionManagerTest, BaseWorkflow) { arc_session_manager()->OnTermsOfServiceNegotiatedForTesting(true); ASSERT_EQ(ArcSessionManager::State::CHECKING_ANDROID_MANAGEMENT, arc_session_manager()->state()); + EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); arc_session_manager()->StartArcForTesting(); - EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); + EXPECT_FALSE(arc_session_manager()->sign_in_start_time().is_null()); EXPECT_FALSE(arc_session_manager()->arc_start_time().is_null()); ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); @@ -509,7 +510,9 @@ TEST_F(ArcSessionManagerTest, Provisioning_Success) { arc_session_manager()->OnTermsOfServiceNegotiatedForTesting(true); ASSERT_EQ(ArcSessionManager::State::CHECKING_ANDROID_MANAGEMENT, arc_session_manager()->state()); + EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); arc_session_manager()->StartArcForTesting(); + EXPECT_FALSE(arc_session_manager()->sign_in_start_time().is_null()); EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); // Here, provisining is not yet completed, so kArcSignedIn should be false. @@ -521,7 +524,6 @@ TEST_F(ArcSessionManagerTest, Provisioning_Success) { arc_session_manager()->OnProvisioningFinished(ProvisioningResult::SUCCESS); EXPECT_TRUE(prefs->GetBoolean(prefs::kArcSignedIn)); EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); - EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); EXPECT_TRUE(arc_session_manager()->IsPlaystoreLaunchRequestedForTesting()); } diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers.cc b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers.cc index 8e7d60fbccff..2e5bd40a6966 100644 --- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers.cc +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers.cc @@ -85,13 +85,12 @@ void CertProvisioningCertsWithIdsGetter::CollectOneResult( return; } - if (!error_message.empty()) { - std::move(callback_).Run(/*existing_cert_ids=*/{}, error_message); - return; + if (error_message.empty()) { + // TODO(crbug.com/1101103): Currently results with errors are just ignored. + // Fix when PlatformKeysService API is changed. + certs_with_ids_[cert_id] = cert; } - certs_with_ids_[cert_id] = cert; - --wait_counter_; if (wait_counter_ != 0) { return; diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers_unittest.cc b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers_unittest.cc new file mode 100644 index 000000000000..acae740eaa4f --- /dev/null +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_platform_keys_helpers_unittest.cc @@ -0,0 +1,181 @@ +// 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/cert_provisioning/cert_provisioning_platform_keys_helpers.h" + +#include +#include + +#include "base/bind.h" +#include "base/containers/flat_set.h" +#include "base/run_loop.h" +#include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_common.h" +#include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h" +#include "chrome/browser/chromeos/platform_keys/mock_platform_keys_service.h" +#include "chrome/browser/chromeos/platform_keys/platform_keys_service_factory.h" +#include "content/public/test/browser_task_environment.h" +#include "net/cert/x509_certificate.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::ElementsAre; +using ::testing::ElementsAreArray; +using ::testing::Key; + +namespace chromeos { +namespace cert_provisioning { +namespace { + +template +base::flat_set GetKeys(const MapType& map) { + base::flat_set keys; + for (const auto& pair : map) { + keys.insert(pair.first); + } + return keys; +} + +class CallbackObserver { + public: + using CertMap = std::map>; + + GetCertsWithIdsCallback GetCallback() { + return base::BindOnce(&CallbackObserver::Callback, base::Unretained(this)); + } + + const CertMap& GetMap() { return cert_map_; } + const std::string GetError() { return error_message_; } + + void WaitForCallback() { loop_.Run(); } + + protected: + void Callback(CertMap certs_with_ids, const std::string& error_message) { + cert_map_ = std::move(certs_with_ids); + error_message_ = error_message; + loop_.Quit(); + } + + base::RunLoop loop_; + CertMap cert_map_; + std::string error_message_; +}; + +class CertProvisioningCertsWithIdsGetterTest : public ::testing::Test { + public: + CertProvisioningCertsWithIdsGetterTest() + : certificate_helper_(&platform_keys_service_) {} + CertProvisioningCertsWithIdsGetterTest( + const CertProvisioningCertsWithIdsGetterTest&) = delete; + CertProvisioningCertsWithIdsGetterTest& operator=( + const CertProvisioningCertsWithIdsGetterTest&) = delete; + ~CertProvisioningCertsWithIdsGetterTest() override = default; + + protected: + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + ProfileHelperForTesting profile_helper_; + platform_keys::MockPlatformKeysService platform_keys_service_; + CertificateHelperForTesting certificate_helper_; +}; + +TEST_F(CertProvisioningCertsWithIdsGetterTest, NoCertificates) { + CertScope cert_scope = CertScope::kDevice; + + CertProvisioningCertsWithIdsGetter cert_getter; + + CallbackObserver callback_observer; + cert_getter.GetCertsWithIds(cert_scope, &platform_keys_service_, + callback_observer.GetCallback()); + callback_observer.WaitForCallback(); + + EXPECT_TRUE(callback_observer.GetMap().empty()); + EXPECT_TRUE(callback_observer.GetError().empty()); +} + +TEST_F(CertProvisioningCertsWithIdsGetterTest, SingleCertificateWithId) { + CertScope cert_scope = CertScope::kDevice; + const char kCertProfileId[] = "cert_profile_id_1"; + + certificate_helper_.AddCert(cert_scope, kCertProfileId); + + CertProvisioningCertsWithIdsGetter cert_getter; + + CallbackObserver callback_observer; + cert_getter.GetCertsWithIds(cert_scope, &platform_keys_service_, + callback_observer.GetCallback()); + callback_observer.WaitForCallback(); + + EXPECT_THAT(GetKeys(callback_observer.GetMap()), ElementsAre(kCertProfileId)); + EXPECT_TRUE(callback_observer.GetError().empty()); +} + +TEST_F(CertProvisioningCertsWithIdsGetterTest, ManyCertificatesWithId) { + CertScope cert_scope = CertScope::kDevice; + std::vector ids{"cert_profile_id_0", "cert_profile_id_1", + "cert_profile_id_2"}; + + for (const auto& id : ids) { + certificate_helper_.AddCert(cert_scope, id); + } + + CertProvisioningCertsWithIdsGetter cert_getter; + + CallbackObserver callback_observer; + cert_getter.GetCertsWithIds(cert_scope, &platform_keys_service_, + callback_observer.GetCallback()); + callback_observer.WaitForCallback(); + + EXPECT_THAT(GetKeys(callback_observer.GetMap()), ElementsAreArray(ids)); + EXPECT_TRUE(callback_observer.GetError().empty()); +} + +TEST_F(CertProvisioningCertsWithIdsGetterTest, ManyCertificatesWithoutId) { + CertScope cert_scope = CertScope::kDevice; + size_t cert_count = 4; + std::vector ids{"cert_profile_id_0", "cert_profile_id_1", + "cert_profile_id_2"}; + for (size_t i = 0; i < cert_count; ++i) { + certificate_helper_.AddCert(cert_scope, /*cert_profile_id=*/"", + /*error_message=*/"no id"); + } + + CertProvisioningCertsWithIdsGetter cert_getter; + + CallbackObserver callback_observer; + cert_getter.GetCertsWithIds(cert_scope, &platform_keys_service_, + callback_observer.GetCallback()); + callback_observer.WaitForCallback(); + + EXPECT_TRUE(callback_observer.GetMap().empty()); + EXPECT_TRUE(callback_observer.GetError().empty()); +} + +TEST_F(CertProvisioningCertsWithIdsGetterTest, CertificatesWithAndWithoutIds) { + CertScope cert_scope = CertScope::kDevice; + + size_t cert_without_id_count = 4; + for (size_t i = 0; i < cert_without_id_count; ++i) { + certificate_helper_.AddCert(cert_scope, /*cert_profile_id=*/"", + /*error_message=*/"no id"); + } + + std::vector ids{"cert_profile_id_0", "cert_profile_id_1", + "cert_profile_id_2"}; + for (const auto& id : ids) { + certificate_helper_.AddCert(cert_scope, id); + } + + CertProvisioningCertsWithIdsGetter cert_getter; + + CallbackObserver callback_observer; + cert_getter.GetCertsWithIds(cert_scope, &platform_keys_service_, + callback_observer.GetCallback()); + callback_observer.WaitForCallback(); + + EXPECT_THAT(GetKeys(callback_observer.GetMap()), ElementsAreArray(ids)); + EXPECT_TRUE(callback_observer.GetError().empty()); +} + +} // namespace +} // namespace cert_provisioning +} // namespace chromeos diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc index 6a3d5d949066..ad2dd86d661d 100644 --- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.cc @@ -4,13 +4,95 @@ #include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h" +#include "base/test/gmock_callback_support.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/test/base/testing_browser_process.h" +#include "net/test/cert_builder.h" #include "testing/gtest/include/gtest/gtest.h" +using base::test::RunOnceCallback; +using testing::_; +using testing::Invoke; + namespace chromeos { namespace cert_provisioning { +//================ CertificateHelperForTesting ================================= + +// Generated by chrome/test/data/policy/test_certs/create_test_certs.sh +const char kFakeCertificate[] = R"(-----BEGIN CERTIFICATE----- +MIIDJzCCAg+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxyb290 +X2NhX2NlcnQwHhcNMjAwMjI1MTUyNTU2WhcNMzAwMjIyMTUyNTU2WjAUMRIwEAYD +VQQDDAkxMjcuMC4wLjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDW +druvpaJovmyWzIcjtsSk/lp319+zNPSYGLzJzTeEmnFoDf/b89ft6xR1NIahmvVd +UHGOMlzgDKnNkqWw+pgpn6U8dk+leWnwlUefzDz7OY8qXfX29Vh0m/kATQc64lnp +rX19fEi2DOgH6heCQDSaHI/KAnAXccwl8kdGuTEnvdzbdHqQq8pPGpEqzC/NOjk7 +kDNkUt0J74ZVMm4+jhVOgZ35mFLtC+xjfycBgbnt8yfPOzmOMwXTjYDPNaIy32AZ +t66oIToteoW5Ilg+j5Mto3unBDHrw8rml3+W/nwHuOPEIgBqLQFfWtXpuX8CbcS6 +SFNK4hxCJOvlzUbgTpsrAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW +BBRDEl1/2pL5LtKnpIly+XCj3N6MwDAfBgNVHSMEGDAWgBQrwVEnUQZlX850A2N+ +URfS8BxoyzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0RBAgw +BocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAXZd+Ul7GUFZPLSiTZ618hUI2UdO0 +7rtPwBw3TephWuyEeHht+WhzA3sRL3nprEiJqIg5w/Tlfz4dsObpSU3vKmDhLzAx +HJrN5vKdbEj9wyuhYSRJwvJka1ZOgPzhQcDQOp1SqonNxLx/sSMDR2UIDMBGzrkQ +sDkn58N5eWm+hZADOAKROHR47j85VcsmYGK7z2x479YzsyWyOm0dbACXv7/HvFkz +56KvgxRaPZQzQUg5yuXa21IjQz07wyWSYnHpm2duAbYFl6CTR9Rlj5vpRkKsQP1W +mMhGDBfgEskdbM+0agsZrJupoQMBUbD5gflcJlW3kwlboi3dTtiGixfYWw== +-----END CERTIFICATE-----)"; + +CertificateHelperForTesting::CertificateHelperForTesting( + platform_keys::MockPlatformKeysService* platform_keys_service) + : platform_keys_service_(platform_keys_service) { + template_cert_ = CreateSingleCertificateFromBytes(kFakeCertificate, + sizeof(kFakeCertificate)); + DCHECK(template_cert_); + EXPECT_CALL(*platform_keys_service_, GetCertificates) + .WillRepeatedly( + Invoke(this, &CertificateHelperForTesting::GetCertificates)); +} + +CertificateHelperForTesting::~CertificateHelperForTesting() = default; + +void CertificateHelperForTesting::GetCertificates( + const std::string& token_id, + const platform_keys::GetCertificatesCallback& callback) { + auto result = std::make_unique(); + *result = cert_list_; + std::move(callback).Run(std::move(result), ""); +} + +void CertificateHelperForTesting::AddCert( + CertScope cert_scope, + const CertProfileId& cert_profile_id) { + AddCert(cert_scope, cert_profile_id, /*error_message=*/""); +} + +void CertificateHelperForTesting::AddCert(CertScope cert_scope, + const CertProfileId& cert_profile_id, + const std::string& error_message) { + net::CertBuilder cert_builder(template_cert_->cert_buffer(), + /*issuer=*/nullptr); + auto cert = cert_builder.GetX509Certificate(); + + EXPECT_CALL( + *platform_keys_service_, + GetAttributeForKey( + GetPlatformKeysTokenId(cert_scope), + platform_keys::GetSubjectPublicKeyInfo(cert), + platform_keys::KeyAttributeType::CertificateProvisioningId, _)) + .WillRepeatedly(RunOnceCallback<3>(cert_profile_id, error_message)); + + cert_list_.push_back(cert); +} + +void CertificateHelperForTesting::ClearCerts() { + cert_list_.clear(); +} + +const net::CertificateList& CertificateHelperForTesting::GetCerts() const { + return cert_list_; +} + //================ ProfileHelperForTesting ===================================== namespace { diff --git a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h index a009ffce4723..11596d18acdd 100644 --- a/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h +++ b/chrome/browser/chromeos/cert_provisioning/cert_provisioning_test_helpers.h @@ -5,7 +5,9 @@ #ifndef CHROME_BROWSER_CHROMEOS_CERT_PROVISIONING_CERT_PROVISIONING_TEST_HELPERS_H_ #define CHROME_BROWSER_CHROMEOS_CERT_PROVISIONING_CERT_PROVISIONING_TEST_HELPERS_H_ +#include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_common.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" +#include "chrome/browser/chromeos/platform_keys/mock_platform_keys_service.h" #include "chrome/test/base/testing_profile_manager.h" #include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "testing/gmock/include/gmock/gmock.h" @@ -13,6 +15,32 @@ namespace chromeos { namespace cert_provisioning { +//================ CertificateHelperForTesting ================================= + +// Redirects PlatformKeysService::GetCertificate calls to itself. Allows to add +// certificate to a fake storage with assigned CertProfileId-s. +struct CertificateHelperForTesting { + public: + explicit CertificateHelperForTesting( + platform_keys::MockPlatformKeysService* platform_keys_service); + ~CertificateHelperForTesting(); + + void AddCert(CertScope cert_scope, const CertProfileId& cert_profile_id); + void AddCert(CertScope cert_scope, + const CertProfileId& cert_profile_id, + const std::string& error_message); + void ClearCerts(); + const net::CertificateList& GetCerts() const; + + private: + void GetCertificates(const std::string& token_id, + const platform_keys::GetCertificatesCallback& callback); + + platform_keys::MockPlatformKeysService* platform_keys_service_ = nullptr; + scoped_refptr template_cert_; + net::CertificateList cert_list_; +}; + //================ ProfileHelperForTesting ===================================== class ProfileHelperForTesting { diff --git a/chrome/browser/chromeos/crostini/crostini_disk.cc b/chrome/browser/chromeos/crostini/crostini_disk.cc index 38c29e886ad9..261567b91e56 100644 --- a/chrome/browser/chromeos/crostini/crostini_disk.cc +++ b/chrome/browser/chromeos/crostini/crostini_disk.cc @@ -13,6 +13,7 @@ #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/task/thread_pool.h" +#include "chrome/browser/chromeos/crostini/crostini_features.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/crostini/crostini_simple_types.h" #include "chrome/browser/chromeos/crostini/crostini_types.mojom.h" @@ -51,6 +52,11 @@ void GetDiskInfo(OnceDiskInfoCallback callback, Profile* profile, std::string vm_name, bool full_info) { + if (!CrostiniFeatures::Get()->IsEnabled(profile)) { + std::move(callback).Run(nullptr); + VLOG(1) << "Crostini not enabled. Nothing to do."; + return; + } if (full_info) { base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, {base::MayBlock()}, @@ -65,9 +71,20 @@ void GetDiskInfo(OnceDiskInfoCallback callback, // error conditions in |OnCrostiniSufficientlyRunning|. constexpr int64_t kFakeAvailableDiskBytes = kDiskHeadroomBytes + kRecommendedDiskSizeBytes; - CrostiniManager::GetForProfile(profile)->EnsureConciergeRunning( - base::BindOnce(&OnCrostiniSufficientlyRunning, std::move(callback), - profile, std::move(vm_name), kFakeAvailableDiskBytes)); + + CrostiniManager::GetForProfile(profile)->StartConcierge(base::BindOnce( + [](OnceDiskInfoCallback callback, Profile* profile, std::string vm_name, + bool success) { + if (!success) { + LOG(ERROR) << "Failed to start concierge"; + std::move(callback).Run(nullptr); + return; + } + OnCrostiniSufficientlyRunning( + std::move(callback), profile, std::move(vm_name), + kFakeAvailableDiskBytes, CrostiniResult::SUCCESS); + }, + std::move(callback), profile, std::move(vm_name))); } } @@ -94,8 +111,7 @@ void OnCrostiniSufficientlyRunning(OnceDiskInfoCallback callback, int64_t free_space, CrostiniResult result) { if (result != CrostiniResult::SUCCESS) { - LOG(ERROR) << "Failed to start concierge or start VM: error " - << static_cast(result); + LOG(ERROR) << "Start VM: error " << static_cast(result); std::move(callback).Run(nullptr); } else { vm_tools::concierge::ListVmDisksRequest request; diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc index 8237a2500fcc..1c7e9aa5022e 100644 --- a/chrome/browser/chromeos/crostini/crostini_manager.cc +++ b/chrome/browser/chromeos/crostini/crostini_manager.cc @@ -1699,24 +1699,6 @@ class AbortOnVmStartObserver : public CrostiniManager::RestartObserver { base::WeakPtr crostini_manager_; }; -// Watches the Crostini restarter until the Concierge started phase, then aborts -// the sequence. -class AbortOnConciergeStartObserver : public CrostiniManager::RestartObserver { - public: - explicit AbortOnConciergeStartObserver( - base::WeakPtr crostini_manager) - : crostini_manager_(crostini_manager) {} - - void OnConciergeStarted(bool success) override { - if (crostini_manager_) { - crostini_manager_->AbortRestartCrostini(restart_id(), base::DoNothing()); - } - } - - private: - base::WeakPtr crostini_manager_; -}; - } // namespace void CrostiniManager::UpgradeContainer(const ContainerId& key, @@ -1815,31 +1797,6 @@ void CrostiniManager::EnsureVmRunning(const ContainerId& key, } } -void CrostiniManager::EnsureConciergeRunning(CrostiniResultCallback callback) { - CrostiniResultCallback inner_callback = base::BindOnce( - [](CrostiniResultCallback final_callback, CrostiniResult result) { - if (result == CrostiniResult::SUCCESS || - result == CrostiniResult::RESTART_ABORTED) { - // RESTART_ABORTED is expected when we successfully abort after - // launching the VM, turn it into a success since that's what we were - // asked for. - std::move(final_callback).Run(CrostiniResult::SUCCESS); - } else { - std::move(final_callback).Run(result); - } - }, - std::move(callback)); - - if (!IsVmRunning(kCrostiniDefaultVmName)) { - RestartCrostini( - kCrostiniDefaultVmName, kCrostiniDefaultContainerName, - std::move(inner_callback), - new AbortOnConciergeStartObserver(weak_ptr_factory_.GetWeakPtr())); - } else { - std::move(inner_callback).Run(CrostiniResult::SUCCESS); - } -} - void CrostiniManager::CancelUpgradeContainer(const ContainerId& key, CrostiniResultCallback callback) { const auto& vm_name = key.vm_name; diff --git a/chrome/browser/chromeos/crostini/crostini_manager.h b/chrome/browser/chromeos/crostini/crostini_manager.h index 2d9b3987103a..1beb0731c5b5 100644 --- a/chrome/browser/chromeos/crostini/crostini_manager.h +++ b/chrome/browser/chromeos/crostini/crostini_manager.h @@ -632,7 +632,6 @@ class CrostiniManager : public KeyedService, bool ShouldPromptContainerUpgrade(const ContainerId& container_id) const; void UpgradePromptShown(const ContainerId& container_id); void EnsureVmRunning(const ContainerId& key, CrostiniResultCallback callback); - void EnsureConciergeRunning(CrostiniResultCallback callback); bool IsUncleanStartup() const; void SetUncleanStartupForTesting(bool is_unclean_startup); void RemoveUncleanSshfsMounts(); diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index f979e8c859ce..253cef3fbd18 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc @@ -1199,8 +1199,11 @@ void ExistingUserController::OnProfilePrepared(Profile* profile, chromeos::UserContext user_context = UserContext(*chromeos::ProfileHelper::Get()->GetUserByProfile(profile)); auto* profile_connector = profile->GetProfilePolicyConnector(); - user_manager::known_user::SetIsManaged(user_context.GetAccountId(), - profile_connector->IsManaged()); + bool is_enterprise_managed = + profile_connector->IsManaged() && + user_context.GetUserType() != user_manager::USER_TYPE_CHILD; + user_manager::known_user::SetIsEnterpriseManaged(user_context.GetAccountId(), + is_enterprise_managed); // Inform |auth_status_consumer_| about successful login. // TODO(nkostylev): Pass UserContext back crbug.com/424550 diff --git a/chrome/browser/chromeos/login/login_ui_browsertest.cc b/chrome/browser/chromeos/login/login_ui_browsertest.cc index c37d32c3c922..3370f11bf883 100644 --- a/chrome/browser/chromeos/login/login_ui_browsertest.cc +++ b/chrome/browser/chromeos/login/login_ui_browsertest.cc @@ -20,6 +20,7 @@ #include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" +#include "chrome/browser/supervised_user/logged_in_user_mixin.h" #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.h" #include "chrome/common/pref_names.h" @@ -370,4 +371,40 @@ IN_PROC_BROWSER_TEST_F(UserManagementDisclosureTest, managed_user.account_id)); } +class UserManagementDisclosureChildTest + : public MixinBasedInProcessBrowserTest { + public: + ~UserManagementDisclosureChildTest() override = default; + + protected: + LoggedInUserMixin logged_in_user_mixin_{ + &mixin_host_, LoggedInUserMixin::LogInType::kChild, + embedded_test_server(), this, false /*should_launch_browser*/}; +}; + +// Check if the user management disclosure is hidden on the lock screen after +// having logged a child account into a session and having locked the screen. +IN_PROC_BROWSER_TEST_F(UserManagementDisclosureChildTest, + PRE_EnterpriseIconVisibleChildUser) { + logged_in_user_mixin_.LogInUser(false /*issue_any_scope_token*/, + true /*wait_for_active_session*/, + true /*request_policy_update*/); + ScreenLockerTester screen_locker_tester; + screen_locker_tester.Lock(); + EXPECT_FALSE(ash::LoginScreenTestApi::IsManagedIconShown( + logged_in_user_mixin_.GetAccountId())); + EXPECT_FALSE(ash::LoginScreenTestApi::IsManagedMessageInMenuShown( + logged_in_user_mixin_.GetAccountId())); +} + +// Check if the user management disclosure is shown on the login screen for a +// child account. +IN_PROC_BROWSER_TEST_F(UserManagementDisclosureChildTest, + EnterpriseIconVisibleChildUser) { + EXPECT_FALSE(ash::LoginScreenTestApi::IsManagedIconShown( + logged_in_user_mixin_.GetAccountId())); + EXPECT_FALSE(ash::LoginScreenTestApi::IsManagedMessageInMenuShown( + logged_in_user_mixin_.GetAccountId())); +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index 36aa346b4b20..d3d1bfdf786b 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc @@ -931,7 +931,8 @@ UserSelectionScreen::UpdateAndReturnUserListForAsh() { user_info.can_remove = CanRemoveUser(user); user_info.fingerprint_state = GetInitialFingerprintState(user); user_info.show_pin_pad_for_password = false; - if (user_manager::known_user::GetIsManaged(user->GetAccountId()) && + if (user_manager::known_user::GetIsEnterpriseManaged( + user->GetAccountId()) && user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) { user_info.user_enterprise_domain = gaia::ExtractDomainName(user->display_email()); diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 3537706a5886..c535d8006c7e 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc @@ -757,6 +757,16 @@ bool UserSessionManager::RespectLocalePreference( prefs->GetString(prefs::kApplicationLocaleBackup); pref_locale = pref_app_locale; + + // In Demo Mode, each sessions uses a new empty User Profile, so we need to + // rely on the local state set in the browser process. + if (chromeos::DemoSession::IsDeviceInDemoMode() && pref_app_locale.empty()) { + const std::string local_state_locale = + g_browser_process->local_state()->GetString( + language::prefs::kApplicationLocale); + pref_locale = local_state_locale; + } + if (pref_locale.empty()) pref_locale = pref_bkup_locale; diff --git a/chrome/browser/chromeos/login/session/user_session_manager_test.cc b/chrome/browser/chromeos/login/session/user_session_manager_test.cc index 8b8500fbcd7b..149f84d963db 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager_test.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager_test.cc @@ -5,10 +5,20 @@ #include "chrome/browser/chromeos/login/session/user_session_manager.h" #include "base/macros.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/login/demo_mode/demo_session.h" +#include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/prefs/browser_prefs.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 "chromeos/dbus/session_manager/fake_session_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h" #include "chromeos/login/auth/key.h" #include "chromeos/login/auth/user_context.h" +#include "components/language/core/browser/pref_names.h" +#include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/user_manager/fake_user_manager.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/browser/network_service_instance.h" @@ -34,7 +44,9 @@ class TestUserSessionManager : public UserSessionManager { class UserSessionManagerTest : public testing::Test { public: - UserSessionManagerTest() { + UserSessionManagerTest() + : profile_manager_(std::make_unique( + TestingBrowserProcess::GetGlobal())) { static_assert( static_cast( UserSessionManager::PasswordConsumingService::kCount) == 2, @@ -44,7 +56,10 @@ class UserSessionManagerTest : public testing::Test { user_session_manager_ = std::make_unique(); } + void SetUp() override { ASSERT_TRUE(profile_manager_->SetUp()); } + ~UserSessionManagerTest() override { + profile_manager_->DeleteAllTestingProfiles(); user_session_manager_.reset(); SessionManagerClient::Shutdown(); } @@ -66,6 +81,28 @@ class UserSessionManagerTest : public testing::Test { return user_session_manager_->user_context().GetPasswordKey()->GetSecret(); } + // Creates a dummy user with a testing profile and logs in. + TestingProfile* LoginTestUser() { + const AccountId account_id( + AccountId::FromUserEmailGaiaId("demo@test.com", "demo_user")); + FakeChromeUserManager* user_manager = + static_cast(user_manager::UserManager::Get()); + test_user_ = user_manager->AddPublicAccountUser(account_id); + + auto prefs = + std::make_unique(); + RegisterUserProfilePrefs(prefs->registry()); + TestingProfile* profile = profile_manager_->CreateTestingProfile( + "test-profile", std::move(prefs), base::ASCIIToUTF16("Test profile"), + 1 /* avatar_id */, std::string() /* supervised_user_id */, + TestingProfile::TestingFactories()); + chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting( + test_user_, profile); + + user_manager->LoginUser(account_id); + return profile; + } + std::unique_ptr user_session_manager_; // Allows UserSessionManager to request the NetworkConnectionTracker in its @@ -75,6 +112,9 @@ class UserSessionManagerTest : public testing::Test { user_manager::ScopedUserManager scoped_user_manager_{ std::make_unique()}; + std::unique_ptr profile_manager_; + user_manager::User* test_user_; + private: DISALLOW_COPY_AND_ASSIGN(UserSessionManagerTest); }; @@ -137,4 +177,77 @@ TEST_F(UserSessionManagerTest, PasswordConsumerService_NoSave_Save) { EXPECT_TRUE(GetUserSessionManagerLoginPassword().empty()); } +TEST_F(UserSessionManagerTest, RespectLocale_WithProfileLocale) { + TestingProfile* profile = LoginTestUser(); + + profile->GetPrefs()->SetString(language::prefs::kApplicationLocale, "fr-CA"); + g_browser_process->SetApplicationLocale("fr"); + + // Local state locale should be ignored. + TestingBrowserProcess::GetGlobal()->local_state()->SetString( + language::prefs::kApplicationLocale, "es"); + + user_session_manager_->RespectLocalePreference(profile, test_user_, + base::NullCallback()); + + EXPECT_TRUE(profile->requested_locale().has_value()); + EXPECT_EQ("fr-CA", profile->requested_locale().value()); +} + +TEST_F(UserSessionManagerTest, RespectLocale_WithoutProfileLocale) { + TestingProfile* profile = LoginTestUser(); + + g_browser_process->SetApplicationLocale("fr"); + + // Local state locale should be ignored. + TestingBrowserProcess::GetGlobal()->local_state()->SetString( + language::prefs::kApplicationLocale, "es"); + + user_session_manager_->RespectLocalePreference(profile, test_user_, + base::NullCallback()); + + EXPECT_TRUE(profile->requested_locale().has_value()); + EXPECT_EQ("fr", profile->requested_locale().value()); +} + +TEST_F(UserSessionManagerTest, RespectLocale_Demo_WithProfileLocale) { + TestingProfile* profile = LoginTestUser(); + // Enable Demo Mode. + chromeos::DemoSession::SetDemoConfigForTesting( + chromeos::DemoSession::DemoModeConfig::kOnline); + + profile->GetPrefs()->SetString(language::prefs::kApplicationLocale, "fr-CA"); + g_browser_process->SetApplicationLocale("fr"); + + // Local state locale should be ignored. + TestingBrowserProcess::GetGlobal()->local_state()->SetString( + language::prefs::kApplicationLocale, "es"); + + user_session_manager_->RespectLocalePreference(profile, test_user_, + base::NullCallback()); + + EXPECT_TRUE(profile->requested_locale().has_value()); + EXPECT_EQ("fr-CA", profile->requested_locale().value()); +} + +TEST_F(UserSessionManagerTest, RespectLocale_Demo_WithoutProfileLocale) { + TestingProfile* profile = LoginTestUser(); + // Enable Demo Mode. + chromeos::DemoSession::SetDemoConfigForTesting( + chromeos::DemoSession::DemoModeConfig::kOnline); + + g_browser_process->SetApplicationLocale("fr"); + + // Because it's Demo Mode and the profile pref local is empty, local state + // locale should not be ignored. + TestingBrowserProcess::GetGlobal()->local_state()->SetString( + language::prefs::kApplicationLocale, "fr-CA"); + + user_session_manager_->RespectLocalePreference(profile, test_user_, + base::NullCallback()); + + EXPECT_TRUE(profile->requested_locale().has_value()); + EXPECT_EQ("fr-CA", profile->requested_locale().value()); +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.cc b/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.cc index ab58f494aa39..23a0c1d5d0f8 100644 --- a/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.cc +++ b/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.cc @@ -18,7 +18,7 @@ void UiHierarchyLogSource::Fetch(SysLogsSourceCallback callback) { { std::ostringstream out; - ash::debug::PrintWindowHierarchy(&out); + ash::debug::PrintWindowHierarchy(&out, scrub_data_); response->emplace("UI Hierarchy: Windows", out.str()); } diff --git a/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.h b/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.h index 7a57ef66cd34..163893dc4d84 100644 --- a/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.h +++ b/chrome/browser/chromeos/system_logs/ui_hierarchy_log_source.h @@ -12,7 +12,8 @@ namespace system_logs { class UiHierarchyLogSource : public SystemLogsSource { public: - UiHierarchyLogSource() : SystemLogsSource("UiHierarchy") {} + explicit UiHierarchyLogSource(bool scrub_data) + : SystemLogsSource("UiHierarchy"), scrub_data_(scrub_data) {} UiHierarchyLogSource(const UiHierarchyLogSource&) = delete; UiHierarchyLogSource& operator=(const UiHierarchyLogSource&) = delete; ~UiHierarchyLogSource() override = default; @@ -20,6 +21,8 @@ class UiHierarchyLogSource : public SystemLogsSource { private: // Overridden from SystemLogsSource: void Fetch(SysLogsSourceCallback callback) override; + + const bool scrub_data_; }; } // namespace system_logs diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/browser/client_hints/client_hints_browsertest.cc index 55b94f282542..b1a87a57ca2a 100644 --- a/chrome/browser/client_hints/client_hints_browsertest.cc +++ b/chrome/browser/client_hints/client_hints_browsertest.cc @@ -18,6 +18,7 @@ #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/metrics/subprocess_metrics_provider.h" +#include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" @@ -27,6 +28,9 @@ #include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/pref_names.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/policy/policy_constants.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_entry.h" @@ -48,6 +52,7 @@ #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" #include "third_party/blink/public/common/client_hints/client_hints.h" +#include "third_party/blink/public/common/switches.h" namespace { @@ -141,7 +146,7 @@ bool IsSimilarToIntABNF(const std::string& header_value) { } // namespace -class ClientHintsBrowserTest : public InProcessBrowserTest, +class ClientHintsBrowserTest : public policy::PolicyTest, public testing::WithParamInterface { public: ClientHintsBrowserTest() @@ -2050,6 +2055,28 @@ IN_PROC_BROWSER_TEST_F(ClientHintsBrowserTest, count_client_hints_headers_seen()); } +class ClientHintsEnterprisePolicyTest : public ClientHintsBrowserTest { + void SetUpInProcessBrowserTestFixture() override { + policy::PolicyTest::SetUpInProcessBrowserTestFixture(); + policy::PolicyMap policies; + SetPolicy(&policies, policy::key::kUserAgentClientHintsEnabled, + std::make_unique(false)); + provider_.UpdateChromePolicy(policies); + } +}; + +// Makes sure that no client hints are sent by default when the +// "UserAgentClientHintsEnabled" enterprise polickly is set to +// false +IN_PROC_BROWSER_TEST_F(ClientHintsEnterprisePolicyTest, + ClientHintsEnterprisePolicy) { + const GURL gurl = accept_ch_without_lifetime_url(); + ui_test_utils::NavigateToURL(browser(), gurl); + // These would normally be one each + EXPECT_EQ(0u, count_user_agent_hint_headers_seen()); + EXPECT_EQ(0u, count_ua_mobile_client_hints_headers_seen()); +} + class ClientHintsWebHoldbackBrowserTest : public ClientHintsBrowserTest { public: ClientHintsWebHoldbackBrowserTest() : ClientHintsBrowserTest() { diff --git a/chrome/browser/client_hints/client_hints_factory.cc b/chrome/browser/client_hints/client_hints_factory.cc index 6e3f78e5c522..8088f0885cd1 100644 --- a/chrome/browser/client_hints/client_hints_factory.cc +++ b/chrome/browser/client_hints/client_hints_factory.cc @@ -10,6 +10,8 @@ #include "chrome/browser/profiles/incognito_helpers.h" #include "components/client_hints/browser/client_hints.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" namespace { @@ -40,10 +42,11 @@ ClientHintsFactory::~ClientHintsFactory() = default; KeyedService* ClientHintsFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { + PrefService* local_state = g_browser_process->local_state(); return new client_hints::ClientHints( context, g_browser_process->network_quality_tracker(), HostContentSettingsMapFactory::GetForProfile(context), - GetUserAgentMetadata()); + GetUserAgentMetadata(), local_state); } content::BrowserContext* ClientHintsFactory::GetBrowserContextToUse( diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc index eaaf696f0c32..68327bb525c6 100644 --- a/chrome/browser/extensions/api/identity/identity_apitest.cc +++ b/chrome/browser/extensions/api/identity/identity_apitest.cc @@ -313,6 +313,7 @@ class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { auto_login_access_token_(true), login_ui_result_(true), scope_ui_result_(true), + scope_ui_async_(false), scope_ui_failure_(GaiaWebAuthFlow::WINDOW_CLOSED), login_ui_shown_(false), scope_ui_shown_(false) {} @@ -336,6 +337,14 @@ class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { std::make_unique(result_type, this)); } + // Sets scope UI to not complete immediately. Call + // CompleteOAuthApprovalDialog() or CompleteRemoteConsentDialog() after + // |on_scope_ui_shown| is invoked to unblock execution. + void set_scope_ui_async(base::OnceClosure on_scope_ui_shown) { + scope_ui_async_ = true; + on_scope_ui_shown_ = std::move(on_scope_ui_shown); + } + void set_scope_ui_failure(GaiaWebAuthFlow::Failure failure) { scope_ui_result_ = false; scope_ui_failure_ = failure; @@ -442,7 +451,13 @@ class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { void ShowOAuthApprovalDialog(const IssueAdviceInfo& issue_advice) override { scope_ui_shown_ = true; + if (!scope_ui_async_) + CompleteOAuthApprovalDialog(); + else + std::move(on_scope_ui_shown_).Run(); + } + void CompleteOAuthApprovalDialog() { if (scope_ui_result_) { OnGaiaFlowCompleted(kAccessToken, "3600"); } else if (scope_ui_failure_ == GaiaWebAuthFlow::SERVICE_AUTH_ERROR) { @@ -456,6 +471,13 @@ class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { void ShowRemoteConsentDialog( const RemoteConsentResolutionData& resolution_data) override { scope_ui_shown_ = true; + if (!scope_ui_async_) + CompleteRemoteConsentDialog(); + else + std::move(on_scope_ui_shown_).Run(); + } + + void CompleteRemoteConsentDialog() { if (scope_ui_result_) { OnGaiaRemoteConsentFlowApproved("fake_consent_result", remote_consent_gaia_id_); @@ -483,6 +505,8 @@ class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { bool auto_login_access_token_; bool login_ui_result_; bool scope_ui_result_; + bool scope_ui_async_; + base::OnceClosure on_scope_ui_shown_; GaiaWebAuthFlow::Failure scope_ui_failure_; GoogleServiceAuthError scope_ui_service_error_; std::string scope_ui_oauth_error_; @@ -867,6 +891,10 @@ class GetAuthTokenFunctionTest return ext; } + CoreAccountInfo GetPrimaryAccountInfo() { + return identity_test_env()->identity_manager()->GetPrimaryAccountInfo(); + } + CoreAccountId GetPrimaryAccountId() { return identity_test_env()->identity_manager()->GetPrimaryAccountId(); } @@ -2179,6 +2207,126 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, } } +// Tests two concurrent remote consent flows. Both of them should succeed. +// The second flow starts while the first one is blocked on an interactive mint +// token flow. This is a regression test for https://crbug.com/1091423. +IN_PROC_BROWSER_TEST_F( + GetAuthTokenFunctionTest, + RemoteConsentMultipleActiveRequests_BlockedOnInteractive) { + SignIn("primary@example.com"); + CoreAccountInfo account = GetPrimaryAccountInfo(); + const extensions::Extension* extension = CreateExtension(CLIENT_ID | SCOPES); + + scoped_refptr func1(new FakeGetAuthTokenFunction()); + func1->set_extension(extension); + func1->push_mint_token_result( + TestOAuth2MintTokenFlow::REMOTE_CONSENT_SUCCESS); + func1->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); + func1->set_remote_consent_gaia_id(account.gaia); + base::RunLoop scope_ui_shown_loop; + func1->set_scope_ui_async(scope_ui_shown_loop.QuitClosure()); + + scoped_refptr func2(new FakeGetAuthTokenFunction()); + func2->set_extension(extension); + func2->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); + func2->set_remote_consent_gaia_id(account.gaia); + + AsyncFunctionRunner func1_runner; + func1_runner.RunFunctionAsync(func1.get(), "[{\"interactive\": true}]", + browser()->profile()); + + AsyncFunctionRunner func2_runner; + func2_runner.RunFunctionAsync(func2.get(), "[{\"interactive\": true}]", + browser()->profile()); + + // Allows func2 to put a task in the queue. + base::RunLoop().RunUntilIdle(); + + scope_ui_shown_loop.Run(); + func1->CompleteRemoteConsentDialog(); + + std::unique_ptr value1( + func1_runner.WaitForSingleResult(func1.get())); + ASSERT_NE(value1, nullptr); + EXPECT_EQ(base::Value(kAccessToken), *value1); + + std::unique_ptr value2( + func2_runner.WaitForSingleResult(func2.get())); + ASSERT_NE(value2, nullptr); + EXPECT_EQ(base::Value(kAccessToken), *value2); + + // Only one consent ui should be shown. + int total_scope_ui_shown = func1->scope_ui_shown() + func2->scope_ui_shown(); + EXPECT_EQ(1, total_scope_ui_shown); + + EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, + GetCachedToken(account.account_id).status()); +} + +// Tests two concurrent remote consent flows. Both of them should succeed. +// The second flow starts while the first one is blocked on a non-interactive +// mint token flow. This is a regression test for https://crbug.com/1091423. +IN_PROC_BROWSER_TEST_F( + GetAuthTokenFunctionTest, + RemoteConsentMultipleActiveRequests_BlockedOnNoninteractive) { + SignIn("primary@example.com"); + CoreAccountInfo account = GetPrimaryAccountInfo(); + const extensions::Extension* extension = CreateExtension(CLIENT_ID | SCOPES); + + scoped_refptr func1(new FakeGetAuthTokenFunction()); + func1->set_extension(extension); + func1->push_mint_token_result( + TestOAuth2MintTokenFlow::REMOTE_CONSENT_SUCCESS); + func1->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); + func1->set_remote_consent_gaia_id(account.gaia); + func1->set_auto_login_access_token(false); + + scoped_refptr func2(new FakeGetAuthTokenFunction()); + func2->set_extension(extension); + func2->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); + func2->set_remote_consent_gaia_id(account.gaia); + base::RunLoop scope_ui_shown_loop; + func2->set_scope_ui_async(scope_ui_shown_loop.QuitClosure()); + + base::RunLoop access_token_run_loop; + on_access_token_requested_ = access_token_run_loop.QuitClosure(); + AsyncFunctionRunner func1_runner; + func1_runner.RunFunctionAsync(func1.get(), "[{\"interactive\": true}]", + browser()->profile()); + + AsyncFunctionRunner func2_runner; + func2_runner.RunFunctionAsync(func2.get(), "[{\"interactive\": true}]", + browser()->profile()); + + // Allows func2 to put a task in the queue. + base::RunLoop().RunUntilIdle(); + + access_token_run_loop.Run(); + // Let subsequent requests pass automatically. + func1->set_auto_login_access_token(true); + IssueLoginAccessTokenForAccount(account.account_id); + + scope_ui_shown_loop.Run(); + func2->CompleteRemoteConsentDialog(); + + std::unique_ptr value1( + func1_runner.WaitForSingleResult(func1.get())); + ASSERT_NE(value1, nullptr); + EXPECT_EQ(base::Value(kAccessToken), *value1); + + std::unique_ptr value2( + func2_runner.WaitForSingleResult(func2.get())); + ASSERT_NE(value2, nullptr); + EXPECT_EQ(base::Value(kAccessToken), *value2); + + // Only one consent ui should be shown. + int total_scope_ui_shown = func1->scope_ui_shown() + func2->scope_ui_shown(); + EXPECT_EQ(1, total_scope_ui_shown); + + EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, + GetCachedToken(account.account_id).status()); +} + // The signin flow is simply not used on ChromeOS. #if !defined(OS_CHROMEOS) IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc index 046a707689af..39a89fd15be0 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc @@ -397,8 +397,7 @@ void IdentityGetAuthTokenFunction::StartMintTokenFlow( CompleteFunctionWithError(identity_constants::kNoGrant); return; } - // TODO(https://crbug.com/1026237): figure out whether this can be ignored - // when running the remote consent approval. + if (!id_api->mint_queue()->empty( IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, token_key_)) { // Another call is going through a consent UI. @@ -488,7 +487,6 @@ void IdentityGetAuthTokenFunction::StartMintToken( case IdentityTokenCacheValue::CACHE_STATUS_REMOTE_CONSENT_APPROVED: consent_result_ = cache_entry.consent_result(); - should_prompt_for_scopes_ = false; should_prompt_for_signin_ = false; gaia_mint_token_mode_ = OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE; StartTokenKeyAccountAccessTokenRequest(); @@ -511,7 +509,6 @@ void IdentityGetAuthTokenFunction::StartMintToken( break; case IdentityTokenCacheValue::CACHE_STATUS_REMOTE_CONSENT_APPROVED: consent_result_ = cache_entry.consent_result(); - should_prompt_for_scopes_ = false; should_prompt_for_signin_ = false; gaia_mint_token_mode_ = OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE; StartTokenKeyAccountAccessTokenRequest(); @@ -743,11 +740,11 @@ void IdentityGetAuthTokenFunction::OnGaiaRemoteConsentFlowApproved( "identity", "OnGaiaRemoteConsentFlowApproved", this, "gaia_id", gaia_id); DCHECK(!consent_result.empty()); - CompleteMintTokenFlow(); base::Optional account = IdentityManagerFactory::GetForProfile(GetProfile()) ->FindExtendedAccountInfoForAccountWithRefreshTokenByGaiaId(gaia_id); if (!account) { + CompleteMintTokenFlow(); CompleteFunctionWithError(identity_constants::kUserNotSignedIn); return; } @@ -757,6 +754,7 @@ void IdentityGetAuthTokenFunction::OnGaiaRemoteConsentFlowApproved( IdentityManagerFactory::GetForProfile(GetProfile()) ->GetPrimaryAccountId(); if (primary_account_id != account->account_id) { + CompleteMintTokenFlow(); CompleteFunctionWithError(identity_constants::kUserNonPrimary); return; } @@ -765,13 +763,17 @@ void IdentityGetAuthTokenFunction::OnGaiaRemoteConsentFlowApproved( IdentityAPI* id_api = IdentityAPI::GetFactoryInstance()->Get(GetProfile()); id_api->SetGaiaIdForExtension(token_key_.extension_id, gaia_id); - token_key_.account_id = account->account_id; - consent_result_ = consent_result; - should_prompt_for_scopes_ = false; - should_prompt_for_signin_ = false; + // It's important to update the cache before calling CompleteMintTokenFlow() + // as this call may start a new request synchronously and query the cache. + ExtensionTokenKey new_token_key(token_key_); + new_token_key.account_id = account->account_id; id_api->SetCachedToken( - token_key_, + new_token_key, IdentityTokenCacheValue::CreateRemoteConsentApproved(consent_result)); + CompleteMintTokenFlow(); + token_key_ = new_token_key; + consent_result_ = consent_result; + should_prompt_for_signin_ = false; StartMintTokenFlow(IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE); } diff --git a/chrome/browser/feedback/system_logs/about_system_logs_fetcher.cc b/chrome/browser/feedback/system_logs/about_system_logs_fetcher.cc index 153f67f19d37..4978ace14873 100644 --- a/chrome/browser/feedback/system_logs/about_system_logs_fetcher.cc +++ b/chrome/browser/feedback/system_logs/about_system_logs_fetcher.cc @@ -35,11 +35,11 @@ SystemLogsFetcher* BuildAboutSystemLogsFetcher() { fetcher->AddSource(std::make_unique()); fetcher->AddSource(std::make_unique()); fetcher->AddSource(std::make_unique()); - fetcher->AddSource(std::make_unique()); // Debug Daemon data source - currently only this data source supports // the scrub_data parameter. fetcher->AddSource(std::make_unique(scrub_data)); + fetcher->AddSource(std::make_unique(scrub_data)); #endif return fetcher; diff --git a/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc b/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc index 4b3228649eda..7fb83ee7f31e 100644 --- a/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc +++ b/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc @@ -40,12 +40,12 @@ SystemLogsFetcher* BuildChromeSystemLogsFetcher() { fetcher->AddSource(std::make_unique()); fetcher->AddSource(std::make_unique()); fetcher->AddSource(std::make_unique()); - fetcher->AddSource(std::make_unique()); // Debug Daemon data source - currently only this data source supports // the scrub_data parameter, but the others still get scrubbed by // SystemLogsFetcher. fetcher->AddSource(std::make_unique(scrub_data)); + fetcher->AddSource(std::make_unique(scrub_data)); #endif return fetcher; diff --git a/chrome/browser/media/history/media_history_keyed_service.cc b/chrome/browser/media/history/media_history_keyed_service.cc index 59762a9b5748..94a7ef00e475 100644 --- a/chrome/browser/media/history/media_history_keyed_service.cc +++ b/chrome/browser/media/history/media_history_keyed_service.cc @@ -157,8 +157,10 @@ void MediaHistoryKeyedService::OnURLsDeleted( const auto& origin_count = deletion_info.deleted_urls_origin_map().find(origin.GetURL()); - if (origin_count->second.first > 0) + if (origin_count == deletion_info.deleted_urls_origin_map().end() || + origin_count->second.first > 0) { continue; + } deleted_origins.insert(origin); } diff --git a/chrome/browser/media/history/media_history_keyed_service_unittest.cc b/chrome/browser/media/history/media_history_keyed_service_unittest.cc index c66d8518b3b5..c8fc0ea25c14 100644 --- a/chrome/browser/media/history/media_history_keyed_service_unittest.cc +++ b/chrome/browser/media/history/media_history_keyed_service_unittest.cc @@ -1040,4 +1040,17 @@ TEST_P(MediaHistoryKeyedServiceTest, CleanUpDatabaseWhenURLIsDeleted) { } } +TEST_P(MediaHistoryKeyedServiceTest, SecurityRegressionTest) { + history::URLRows urls_to_delete = { + history::URLRow(GURL("https://www.google.com/test1A"))}; + history::DeletionInfo deletion_info = + history::DeletionInfo::ForUrls(urls_to_delete, std::set()); + deletion_info.set_deleted_urls_origin_map({ + {GURL("https://www.google.com/test1B"), {0, base::Time::Now()}}, + {GURL("https://www.google.com/test1C"), {0, base::Time::Now()}}, + }); + + service()->OnURLsDeleted(nullptr, deletion_info); +} + } // namespace media_history diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index 312b2ac7925d..d471c953b1a8 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc @@ -1288,6 +1288,9 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] = { { key::kAppCacheForceEnabled, prefs::kAppCacheForceEnabled, base::Value::Type::BOOLEAN }, + { key::kUserAgentClientHintsEnabled, + policy::policy_prefs::kUserAgentClientHintsEnabled, + base::Value::Type::BOOLEAN }, }; // clang-format on diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 1d4b7d30a584..1f9c08bc8e42 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc @@ -691,6 +691,16 @@ void RegisterLocalState(PrefRegistrySimple* registry) { update_client::RegisterPrefs(registry); variations::VariationsService::RegisterPrefs(registry); + // Individual preferences. If you have multiple preferences that should + // clearly be grouped together, please group them together into a helper + // function called above. Please keep this list alphabetized. + registry->RegisterBooleanPref( + policy::policy_prefs::kUserAgentClientHintsEnabled, true); + + // Below this point is for platform-specific and compile-time conditional + // calls. Please follow the helper-function-first-then-direct-calls pattern + // established above, and keep things alphabetized. + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) BackgroundModeManager::RegisterPrefs(registry); #endif diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb index 3ea996c71cb9..2222194afa98 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb @@ -223,7 +223,7 @@ Nenhum ponto de referência ARIA a seguir Marcado Ir para o próximo item focalizável -Insira um rótulo personalizado +Insira uma etiqueta personalizada Nenhuma célula à esquerda {COUNT,plural, =1{+#}one{+#}other{+#}} Encontrar na página do ChromeVox @@ -303,7 +303,7 @@ : Item semelhante anterior Nenhuma tabela a seguir -Salvar rótulo +Salvar etiqueta desmarcado retrato Slide @@ -813,7 +813,7 @@ Dizer "maiúsculo" depois da letra Para interromper temporariamente a fala do ChromeVox, pressione a tecla Control. Amarelo-dourado-claro -Descartar rótulo +Descartar etiqueta Atalhos úteis do Chrome Preto ponto diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb index 304f045a6ed1..47b52f2a034e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb @@ -51,7 +51,7 @@ 切換按鈕 淺天藍 用四指輕觸即可進入 ChromeVox 選單 -已取消選取「」選單項目圓形按鈕 +未選取「」選單項目圓形按鈕 日曬色 個,共 字元和字詞語音回應 diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index 3d6708c2deab..6d4d61d86408 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb @@ -403,7 +403,7 @@ Pouze vy uvidíte, na co se kamera zaměřuje. Web snímky z kamery neuvidí.Žádné záložky Přesunout do… Zjednodušený režim -Spravovat váš účet Google +Spravovat účet Google Stránky v jazyce od teď budou překládány do jazyka Zjednodušenou stránku poskytuje Google. Klepnutím načtete originál. Zavřít kartu diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index ad40b71a7951..38f827afb679 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb @@ -471,7 +471,7 @@ Wenn Sie diese Einstellung ändern möchten, setzen Sie Nicht unterstützte Anzahl von Chrome-Instanzen Discover von Google Zahlungs-Apps -Statistiken zurücksetzen +Statistiken wieder auf Null setzen Aktualisierung anhalten Hilfe aufrufen, während nach Geräten gesucht wird… {FILE_COUNT,plural, =1{# Seite}other{# Seiten}} diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 315c1715c78b..e43b7b181b1c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb @@ -906,7 +906,7 @@ Διαθέσιμο εκτός σύνδεσης Άνοιγμα σελίδας "Ιστορικό" -Ελευθερώστε χώρο +Απελευθερώστε χώρο Δεν υπάρχει τίποτα να δείτε εδώ…ακόμη Κωδικοί πρόσβασης Chrome Όνομα χρήστη diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index a8853aea1e16..86879eb2787d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb @@ -709,7 +709,7 @@ Por exemplo, algúns sitios web poden responder a esta solicitude mostrándoche Cargando… A descarga aínda está en curso pestanas pechadas -Discover, de Google: desactivado +Discover (de Google): desactivado Descargar imaxe Autocompletar datos do formulario Continuar explorando contido sen conexión diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index 7b2a2e5ceccc..bd4f9cc9460c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb @@ -148,7 +148,7 @@ URL-ийг хуул Үлдсэн сайт () Утаснаасаа ямар нэгэн зүйл өөр төхөөрөмжтэй хуваалцахын тулд хоёр төхөөрөмжийн аль алины Chrome-н тохиргоонд синк хийхийг асаана уу -Хурдан хариу үйлдлийн код +QR код Хуваалцаж байна -р үргэлжлүүлэх Синк болон Google-н үйлчилгээ @@ -233,7 +233,7 @@ Хаягууд Хуудас хэл дээр биш байна уу? Таб хуваалцах төхөөрөмжийн жагсаалтыг бүрэн өндрөөр нээлээ. -Ойролцоо байгаа хүмүүстэй хуваалцахын тулд тэдэнд энэ хурдан хариу үйлдлийн кодыг скан хийхийг зөвшөөрнө үү +Ойролцоо байгаа хүмүүстэй хуваалцахын тулд тэдэнд энэ QR кодыг скан хийхийг зөвшөөрнө үү Google мэдэгдлийн платформ Нэр буруу байна Google сан @@ -366,7 +366,7 @@ Чухал биш сан Офлайн нүүр {HOURS,plural, =1{# цаг}other{# цаг}} -Хурдан хариу үйлдлийн кодыг нээхийн тулд товшино уу +QR кодыг нээхийн тулд товшино уу Дараагийн бичлэг Сепиа Сонголт дэлгэцийн дээд хэсэгт байна @@ -562,7 +562,7 @@ Tаны Google бүртгэл history.google.comИ-мэйл хаяг -д арга хэмжээ үүсгэнэ үү Томруулах үйлдлээс урьдчилан сэргийлэхийн тулд вэбсайтны хүсэлтийг хүчингүй болгох -Хурдан хариу үйлдлийн кодыг татаж чадсангүй +QR кодыг татаж чадсангүй Өө. Энэ хуудсыг хөрвүүлж чадсангүй. Файлын нэр хэт урт байна Нүүр хуудас руугаа амархан буцаарай @@ -795,7 +795,7 @@ Tаны Google бүртгэл history.google.comСинк ажиллахгүй байна Lite горим асаалттай байна. Үүнийг Тохиргоонд удирдана уу. Google-д дараахаар нэвтэрсэн -Хурдан хариу үйлдлийн кодыг татсан +QR кодыг татсан Сүлжээний доголдлоос болж -г татаж чадсангүй. Тусламж авах эсвэл дахин скан хийх Chrome-д тавтай морил @@ -835,7 +835,7 @@ Tаны Google бүртгэл history.google.com-н хугацаа дууссан. Хүлээн зөвшөөрсний дараагаар нэвтрэх Бэлтгэн нийлүүлэгч: -Хурдан хариу үйлдлийн кодыг скан хийхийн тулд Chrome таны камерыг ашиглах боломжтой болгож тохиргоогоо өөрчилнө үү +QR кодыг скан хийхийн тулд Chrome таны камерыг ашиглах боломжтой болгож тохиргоогоо өөрчилнө үү 1 өдрийн өмнө идэвхтэй Хуудсыг урьдчилан үзэх Шинэ Хурдан хөтлөх болон хайхын тулд хуудсыг урьдчилан ачаалах @@ -863,7 +863,7 @@ Tаны Google бүртгэл history.google.com Хавчуургаа бүх төхөөрөмждөө авахын тулд синкийг асаана уу Chrome-н үйл ажиллагаагаа Дижитал хэрэглээнд харуулах уу? -Хурдан хариу үйлдлийн кодыг скан хийхийн тулд Chrome-д таны камерыг ашиглахыг зөвшөөрнө үү +QR кодыг скан хийхийн тулд Chrome-д таны камерыг ашиглахыг зөвшөөрнө үү Нүүр хуудсыг засах Сайтын мэдээллийг үзэх Touch to Search нь сонгосон үг болон одоо байгаа хуудсыг Google Хайлт руу контекст хэлбэрээр илгээдэг. Та үүнийг Тохиргооноо хэсгээс унтрааж болно. @@ -876,7 +876,7 @@ Tаны Google бүртгэл history.google.comБүртгэлээ удирдах Wi-Fi-р өөрт тохирох нийтлэл татаж авах Өгөгдөл хадгалах -Хурдан хариу үйлдлийн кодыг скан хийхийн тулд камертай төхөөрөмж ашиглана уу. +QR кодыг скан хийхийн тулд камертай төхөөрөмж ашиглана уу. Документ Энэ хуудас хэт их санах ой ашиглаж байгаа тул Chrome зарим агуулгыг устгасан болно. Дахин нэвтрэхээр оролдоно уу. diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc index 1591f958dfc2..c92f0a44617e 100644 --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc @@ -242,10 +242,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ChromeSubresourceFilterClient::CreateForWebContents(web_contents); } //ChromeTranslateClient::CreateForWebContents(web_contents); + PrefService* local_state = g_browser_process->local_state(); client_hints::ClientHints::CreateForWebContents( web_contents, g_browser_process->network_quality_tracker(), HostContentSettingsMapFactory::GetForProfile(profile), - GetUserAgentMetadata()); + GetUserAgentMetadata(), local_state); ConnectionHelpTabHelper::CreateForWebContents(web_contents); CoreTabHelper::CreateForWebContents(web_contents); DataReductionProxyTabHelper::CreateForWebContents(web_contents); diff --git a/chrome/chrome_cleaner/proto/uws_spec_by_version.proto b/chrome/chrome_cleaner/proto/uws_spec_by_version.proto index f5cca6a575b7..1ca2274a3fb9 100644 --- a/chrome/chrome_cleaner/proto/uws_spec_by_version.proto +++ b/chrome/chrome_cleaner/proto/uws_spec_by_version.proto @@ -79,14 +79,30 @@ message FoilUwSData { repeated StaticRegistryFootprint registry_footprints = 5; } +// The git SHA's of each repo that is used to build this version of the +// reporter and cleaner. +// +// Next tag: 4. +message CommitInfo { + // The commit of the root chromium repository. + optional string chromium_commit = 1; + + // The commit of the src-internal repository. + optional string src_internal_commit = 2; + + // The commit of the chrome/chrome_cleaner/internal repository. + optional string chrome_cleaner_internal_commit = 3; +} + // Specifies all UwS recognized by a given version of the reporter or cleaner. // // FoilVersionSpec is a legacy name that must be kept because existing analysis // tools use it. // -// Next tag: 3. +// Next tag: 4. message FoilVersionSpec { optional string version = 1; + optional CommitInfo commit_info = 3; repeated FoilUwSData uws = 2; } diff --git a/chrome/services/cups_proxy/public/cpp/cups_util.cc b/chrome/services/cups_proxy/public/cpp/cups_util.cc index 258259bc15a2..f851a43e2cf4 100644 --- a/chrome/services/cups_proxy/public/cpp/cups_util.cc +++ b/chrome/services/cups_proxy/public/cpp/cups_util.cc @@ -130,7 +130,12 @@ base::Optional GetPrinterId(ipp_t* ipp) { char resource[HTTP_MAX_URI], unwanted_buffer[HTTP_MAX_URI]; int unwanted_port; - std::string printer_uri = ippGetString(printer_uri_attr, 0, NULL); + std::string printer_uri; + const char* printer_uri_ptr = ippGetString(printer_uri_attr, 0, nullptr); + if (printer_uri_ptr) { + printer_uri = printer_uri_ptr; + } + httpSeparateURI(HTTP_URI_CODING_RESOURCE, printer_uri.data(), unwanted_buffer, HTTP_MAX_URI, unwanted_buffer, HTTP_MAX_URI, unwanted_buffer, HTTP_MAX_URI, &unwanted_port, resource, HTTP_MAX_URI); diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 3274d79f191c..6d48f504ba9e 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json @@ -7292,5 +7292,19 @@ } } ] + }, + "UserAgentClientHintsEnabled": { + "os": ["win", "linux", "mac", "chromeos", "android"], + "policy_pref_mapping_test": [ + { + "policies": { "UserAgentClientHintsEnabled": true }, + "prefs": { + "policy.user_agent_client_hints_enabled": { + "local_state": true, + "value": true + } + } + } + ] } } diff --git a/chrome/test/data/webui/cr_elements/cr_input_test.js b/chrome/test/data/webui/cr_elements/cr_input_test.js index ed3595b4eec7..1bfabbf1cc89 100644 --- a/chrome/test/data/webui/cr_elements/cr_input_test.js +++ b/chrome/test/data/webui/cr_elements/cr_input_test.js @@ -6,6 +6,7 @@ // #import 'chrome://resources/cr_elements/cr_input/cr_input.m.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {eventToPromise, whenAttributeIs} from '../test_util.m.js'; +// #import {assertDeepEquals, assertEquals, assertNotEquals, assertThrows, assertTrue, assertFalse} from '../chai_assert.js'; // clang-format on suite('cr-input', function() { @@ -356,4 +357,21 @@ suite('cr-input', function() { assertTrue(input.matches(':focus')); assertEquals('', window.getSelection().toString()); }); + + test('announce error message when invalid', async () => { + const errorMessagesAnnounced = []; + const handler = e => { + errorMessagesAnnounced.push(e.detail.text); + }; + crInput.addEventListener('iron-announce', handler); + crInput.invalid = false; + crInput.errorMessage = '1'; + crInput.errorMessage = '2'; + crInput.invalid = true; + crInput.errorMessage = '3'; + crInput.invalid = false; + crInput.errorMessage = '4'; + assertDeepEquals(['2', '3'], errorMessagesAnnounced); + crInput.removeEventListener('iron-announce', handler); + }); }); diff --git a/chromeos/profiles/airmont.afdo.newest.txt b/chromeos/profiles/airmont.afdo.newest.txt index f1277bf0f1e5..495a5246beeb 100644 --- a/chromeos/profiles/airmont.afdo.newest.txt +++ b/chromeos/profiles/airmont.afdo.newest.txt @@ -1 +1 @@ -chromeos-chrome-amd64-airmont-84-4147.37-1592213859-benchmark-84.0.4147.60-r1-redacted.afdo.xz +chromeos-chrome-amd64-airmont-84-4147.64-1594033476-benchmark-84.0.4147.86-r1-redacted.afdo.xz diff --git a/chromeos/profiles/broadwell.afdo.newest.txt b/chromeos/profiles/broadwell.afdo.newest.txt index 58765192317c..e8df135d8824 100644 --- a/chromeos/profiles/broadwell.afdo.newest.txt +++ b/chromeos/profiles/broadwell.afdo.newest.txt @@ -1 +1 @@ -chromeos-chrome-amd64-broadwell-84-4147.37-1592217301-benchmark-84.0.4147.60-r1-redacted.afdo.xz +chromeos-chrome-amd64-broadwell-84-4147.64-1594032001-benchmark-84.0.4147.86-r1-redacted.afdo.xz diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index a186f0d4fc19..bd90faf146e3 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt @@ -1 +1 @@ -chromeos-chrome-orderfile-field-84-4147.37-1592215428-benchmark-84.0.4147.60-r1.orderfile.xz +chromeos-chrome-orderfile-field-84-4147.64-1594029716-benchmark-84.0.4147.86-r1.orderfile.xz diff --git a/chromeos/profiles/silvermont.afdo.newest.txt b/chromeos/profiles/silvermont.afdo.newest.txt index f54743fc0cd0..c2d4c84c1a9d 100644 --- a/chromeos/profiles/silvermont.afdo.newest.txt +++ b/chromeos/profiles/silvermont.afdo.newest.txt @@ -1 +1 @@ -chromeos-chrome-amd64-silvermont-84-4147.37-1592215428-benchmark-84.0.4147.60-r1-redacted.afdo.xz +chromeos-chrome-amd64-silvermont-84-4147.64-1594029716-benchmark-84.0.4147.86-r1-redacted.afdo.xz diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb index bf04da033be8..e4e10badc9f7 100644 --- a/chromeos/strings/chromeos_strings_ky.xtb +++ b/chromeos/strings/chromeos_strings_ky.xtb @@ -16,7 +16,7 @@ Колдонмолор Жабуу ЖАҢЫРТУУ -Басып чыгаруу тарыхын толугу менен тазалайын дегениңиз аныкпы? Учурда басылып жаткан документтериңиз өчүрүлбөйт. +Басып чыгаруу тарыхын өчүрөсүзбү? Учурда басылып жаткан документтериңиз өчүрүлбөйт. Басып чыгаруу тапшырмалары Файлдын аталышы Таржымалды толук тазалоо diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb index ad42030c72da..f5ba69dd9ec2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb @@ -41,7 +41,7 @@ Avui Pregunta abans de permetre que els llocs web creïn un mapa en 3D del teu entorn o facin un seguiment de la posició de la càmera (opció recomanada) Permet les galetes -Pregunta quan un lloc web vulgui descobrir dispositius Bluetooth propers (opció recomanada) +Pregunta'm quan un lloc web vulgui descobrir dispositius Bluetooth propers (opció recomanada) Continua  MB S'ha completat la baixada diff --git a/components/client_hints/browser/BUILD.gn b/components/client_hints/browser/BUILD.gn index 710d6e738dcf..7b03e6a4ca9e 100644 --- a/components/client_hints/browser/BUILD.gn +++ b/components/client_hints/browser/BUILD.gn @@ -9,10 +9,12 @@ source_set("browser") { ] deps = [ "//base", - "//components/content_settings/core/common", + "//components/client_hints/common", "//components/content_settings/core/browser", + "//components/content_settings/core/common", "//components/keyed_service/core", - "//components/client_hints/common", + "//components/policy/core/common", + "//components/prefs", "//content/public/browser", "//services/network/public/cpp", "//third_party/blink/public/common:headers", diff --git a/components/client_hints/browser/DEPS b/components/client_hints/browser/DEPS index c9affb92614c..dca535294ebc 100644 --- a/components/client_hints/browser/DEPS +++ b/components/client_hints/browser/DEPS @@ -1,5 +1,7 @@ include_rules = [ "+components/content_settings/core/browser", "+components/keyed_service", + "+components/prefs", + "+components/policy/core/common", "+content/public/browser", ] diff --git a/components/client_hints/browser/client_hints.cc b/components/client_hints/browser/client_hints.cc index 2e4d306ce49b..ba7e6fb00192 100644 --- a/components/client_hints/browser/client_hints.cc +++ b/components/client_hints/browser/client_hints.cc @@ -13,8 +13,11 @@ #include "components/client_hints/common/client_hints.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/content_settings_utils.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/prefs/pref_service.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_features.h" #include "content/public/common/origin_util.h" namespace client_hints { @@ -23,11 +26,13 @@ ClientHints::ClientHints( content::BrowserContext* context, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata) + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service) : context_(context), network_quality_tracker_(network_quality_tracker), settings_map_(settings_map), - user_agent_metadata_(user_agent_metadata) { + user_agent_metadata_(user_agent_metadata), + pref_service_(pref_service) { DCHECK(context_); DCHECK(network_quality_tracker_); DCHECK(settings_map_); @@ -38,13 +43,14 @@ void ClientHints::CreateForWebContents( content::WebContents* web_contents, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata) { + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service) { DCHECK(web_contents); if (!FromWebContents(web_contents)) { web_contents->SetUserData( - UserDataKey(), - base::WrapUnique(new ClientHints(web_contents, network_quality_tracker, - settings_map, user_agent_metadata))); + UserDataKey(), base::WrapUnique(new ClientHints( + web_contents, network_quality_tracker, settings_map, + user_agent_metadata, pref_service))); } } @@ -70,6 +76,19 @@ bool ClientHints::IsJavaScriptAllowed(const GURL& url) { CONTENT_SETTING_BLOCK; } +bool ClientHints::UserAgentClientHintEnabled() { + // TODO(crbug.com/1097591): This extra path check is only here because the + // pref is not being registered in //weblayer. + bool pref_enabled = true; + if (pref_service_->HasPrefPath( + policy::policy_prefs::kUserAgentClientHintsEnabled)) { + pref_enabled = pref_service_->GetBoolean( + policy::policy_prefs::kUserAgentClientHintsEnabled); + } + return pref_enabled && + base::FeatureList::IsEnabled(features::kUserAgentClientHint); +} + blink::UserAgentMetadata ClientHints::GetUserAgentMetadata() { return user_agent_metadata_; } @@ -78,11 +97,13 @@ ClientHints::ClientHints( content::WebContents* web_contents, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata) + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service) : ClientHints(web_contents->GetBrowserContext(), network_quality_tracker, settings_map, - user_agent_metadata) { + user_agent_metadata, + pref_service) { receiver_ = std::make_unique< content::WebContentsFrameReceiverSet>( web_contents, this); diff --git a/components/client_hints/browser/client_hints.h b/components/client_hints/browser/client_hints.h index 4d9d004a82f0..5cbee7f91dfb 100644 --- a/components/client_hints/browser/client_hints.h +++ b/components/client_hints/browser/client_hints.h @@ -11,6 +11,7 @@ #include "base/memory/ref_counted.h" #include "base/optional.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/prefs/pref_service.h" #include "content/public/browser/client_hints_controller_delegate.h" #include "content/public/browser/web_contents_receiver_set.h" #include "content/public/browser/web_contents_user_data.h" @@ -27,14 +28,16 @@ class ClientHints : public KeyedService, ClientHints(content::BrowserContext* context, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata); + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service); ~ClientHints() override; static void CreateForWebContents( content::WebContents* web_contents, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata); + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service); // content::ClientHintsControllerDelegate: network::NetworkQualityTracker* GetNetworkQualityTracker() override; @@ -45,6 +48,8 @@ class ClientHints : public KeyedService, bool IsJavaScriptAllowed(const GURL& url) override; + bool UserAgentClientHintEnabled() override; + blink::UserAgentMetadata GetUserAgentMetadata() override; void PersistClientHints( @@ -58,7 +63,8 @@ class ClientHints : public KeyedService, ClientHints(content::WebContents* web_contents, network::NetworkQualityTracker* network_quality_tracker, HostContentSettingsMap* settings_map, - const blink::UserAgentMetadata& user_agent_metadata); + const blink::UserAgentMetadata& user_agent_metadata, + PrefService* pref_service); content::BrowserContext* context_ = nullptr; network::NetworkQualityTracker* network_quality_tracker_ = nullptr; @@ -67,6 +73,7 @@ class ClientHints : public KeyedService, std::unique_ptr< content::WebContentsFrameReceiverSet> receiver_; + PrefService* pref_service_; WEB_CONTENTS_USER_DATA_KEY_DECL(); diff --git a/components/policy/core/common/policy_pref_names.cc b/components/policy/core/common/policy_pref_names.cc index 68b94ed53dd9..0b29e1af493e 100644 --- a/components/policy/core/common/policy_pref_names.cc +++ b/components/policy/core/common/policy_pref_names.cc @@ -44,5 +44,9 @@ const char kCloudPolicyOverridesPlatformPolicy[] = "policy.cloud_override"; const char kNativeWindowOcclusionEnabled[] = "policy.native_window_occlusion_enabled"; +// Boolean policy preference to disable the User-Agent Client Hints feature. +const char kUserAgentClientHintsEnabled[] = + "policy.user_agent_client_hints_enabled"; + } // namespace policy_prefs } // namespace policy diff --git a/components/policy/core/common/policy_pref_names.h b/components/policy/core/common/policy_pref_names.h index f5bc2481f6d0..d537a34eac2f 100644 --- a/components/policy/core/common/policy_pref_names.h +++ b/components/policy/core/common/policy_pref_names.h @@ -19,6 +19,7 @@ POLICY_EXPORT extern const char kSystemFeaturesDisableList[]; POLICY_EXPORT extern const char kUrlBlacklist[]; POLICY_EXPORT extern const char kUrlWhitelist[]; POLICY_EXPORT extern const char kUserPolicyRefreshRate[]; +POLICY_EXPORT extern const char kUserAgentClientHintsEnabled[]; } // namespace policy_prefs } // namespace policy diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index f9ace76a7df7..d26df731d6e8 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json @@ -21239,6 +21239,26 @@ If you disable this policy, web page scrolling to specific text fragments via UR If you set this policy, users cannot change or override it.''', }, + { + 'name': 'UserAgentClientHintsEnabled', + 'owners': ['file://components/client_hints/OWNERS', 'yoavweiss@google.com'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome_os:84-', 'chrome.*:84-', 'android:84-'], + 'features': { + 'per_profile': False, + 'dynamic_refresh': True, + }, + 'example_value': True, + 'id': 725, + 'caption': '''Control the User-Agent Client Hints feature.''', + 'tags': [], + 'desc': '''When enabled the User-Agent Client Hints feature sends granular request headers providing information about the user browser and environment. + + This is an additive feature, but the new headers may break some websites that restrict the characters that requests may contain. + + If this policy is enabled or not set the User-Agent Client Hints feature is enabled. If the policy is disabled the feature is unavailable.''', + }, ], 'messages': { @@ -22095,7 +22115,7 @@ The recommended way to configure policy on Windows is via GPO, although provisio }, ], 'placeholders': [], - 'deleted_policy_ids': [412, 476, 546, 562, 569, 578], - 'highest_id_currently_used': 707, + 'deleted_policy_ids': [412, 476, 546, 562, 569, 578, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724], + 'highest_id_currently_used': 725, 'highest_atomic_group_id_currently_used': 38 } diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 6f1c3a6c27fa..8e65248258a2 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb @@ -550,9 +550,9 @@ Wenn die Richtlinie "EnableMediaRouter" auf "false" gesetzt ist, hat der Wert di Standardmäßig Druckmodus mit Hintergrundgrafiken aktivieren Ausführung von JavaScript für alle Websites zulassen Position der Ablage bestimmen -Legt fest, ob Nutzungs- und Diagnosedaten, einschließlich Absturzberichten, an Google gesendet werden. +Legt fest, ob Nutzungsdaten & Fehlerberichte, einschließlich Absturzberichten, an Google gesendet werden. - Im Falle von "true" werden Berichte mit Nutzungs- und Diagnosedaten von gesendet. + Im Falle von "true" werden Berichte mit Nutzungsdaten & Fehlerberichte von gesendet. Ist die Richtlinie auf "false" festgelegt, ist das Senden solcher Berichte deaktiviert. @@ -1769,7 +1769,7 @@ Wenn diese Einstellung auf "Aus" oder kein Wert festgelegt wird, wird der einges Wenn die Richtlinie nicht konfiguriert ist, wird ein Standardwert verwendet. - Die empfohlene Vorgehensweise ist, die Bildschirmsperre im Suspend-Modus zu aktivieren und anzuweisen, nach der Inaktivitätsverzögerung in den Suspend-Modus zu wechseln. Diese Richtlinie sollte nur verwendet werden, wenn die Bildschirmsperre erheblich früher als der Suspend-Modus eintreten oder der Suspend-Modus bei Inaktivität gar nicht erfolgen soll. + Die empfohlene Vorgehensweise ist, die Bildschirmsperre bei Ruhemodus zu aktivieren und anzuweisen, nach der Inaktivitätsverzögerung in den Ruhemodus zu wechseln. Diese Richtlinie sollte nur verwendet werden, wenn die Bildschirmsperre erheblich früher als der Ruhemodus eintreten oder der Ruhemodus bei Inaktivität gar nicht aktiviert werden soll. Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner als der Wert für die Inaktivitätsverzögerung sein. Mit dieser Richtlinie kann ein benutzerdefinierter Zeitplan zum Prüfen auf Updates festgelegt werden. Er gilt für alle Nutzer und alle Oberflächen auf diesem Gerät. Wenn ein Zeitplan aktiviert wird, sucht das Gerät entsprechend nach Updates. Wenn geplante Prüfungen auf Updates nicht mehr durchgeführt werden sollen, muss die Richtlinie entfernt werden. @@ -3380,6 +3380,11 @@ Wenn diese Einstellung deaktiviert oder nicht konfiguriert ist, wird kein Proxy MAC-Adresse der im Gerät verbauten NIC Erweiterungen, die die Remote Attestation API zur Bestätigung der Nutzeridentität verwenden dürfen Standardverhalten für Websites, die nicht zu einem Inhaltspaket gehören +Wenn aktiviert, sendet die Funktion "" detaillierte Anfrageheader mit Informationen über den Browser und die Umgebung des Nutzers. + + Dies ist eine Zusatzfunktion, doch die neuen Header funktionieren auf manchen Websites nicht, die einschränken, wie viele Zeichen eine Anfrage enthalten darf. + + Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, ist die Funktion "" aktiviert. Wenn sie deaktiviert ist, ist die Funktion nicht verfügbar. Standardmäßig 24-Stunden-Uhr verwenden Angeben, ob Plug-in-Suchfunktion deaktiviert werden soll (eingestellt) Diese Richtlinie ist Teil der folgenden Atomic-Gruppe (nur Richtlinien aus der Quelle mit der höchsten Priorität in der Gruppe werden angewendet): @@ -3464,7 +3469,7 @@ Wenn diese Einstellung deaktiviert oder nicht konfiguriert ist, wird kein Proxy Wenn Übereinstimmungen gefunden werden oder chrome://flags/#enable-webrtc-hide-local-ips-with-mdns deaktiviert ist, werden die lokalen IP-Adressen in WebRTC ICE-Kandidaten angezeigt. Andernfalls werden lokale IP-Adressen mit mDNS-Hostnamen verborgen. Beachten Sie bitte, dass diese Richtlinie den Schutz lokaler IPs schwächt, sofern Administratoren diese benötigen. -Diese Richtlinie steuert zudem die Erfassung von Nutzungs- und Diagnosedaten in Android. +Diese Richtlinie steuert zudem die Erfassung von Nutzungsdaten & Fehlerberichte in Android. Wird diese Richtlinie festgelegt, werden die Auflösung und der Skalierungsfaktor von jedem Bildschirm auf die spezifizierten Werte eingestellt. Auf alle verbundenen externen Bildschirme werden externe Bildschirmeinstellungen angewendet. Die Werte für "external_width" und "external_height" sollten in Pixel angegeben werden. Die Werte für "external_scale_percentage" und "internal_scale_percentage" sind in Prozent anzugeben. @@ -3694,7 +3699,7 @@ Wenn diese Richtlinie nicht konfiguriert ist, können die Nutzer selbst wählen, Wenn die Richtlinie nicht konfiguriert ist, wird ein Standardwert verwendet. - Die empfohlene Vorgehensweise ist, die Bildschirmsperre im Suspend-Modus zu aktivieren und anzuweisen, nach der Inaktivitätsverzögerung in den Suspend-Modus zu wechseln. Diese Richtlinie sollte nur verwendet werden, wenn die Bildschirmsperre erheblich früher als der Suspend-Modus eintreten oder der Suspend-Modus bei Inaktivität gar nicht erfolgen soll. + Die empfohlene Vorgehensweise ist, die Bildschirmsperre bei Ruhemodus zu aktivieren und anzuweisen, nach der Inaktivitätsverzögerung in den Ruhemodus zu wechseln. Diese Richtlinie sollte nur verwendet werden, wenn die Bildschirmsperre erheblich früher als der Ruhemodus eintreten oder der Ruhemodus bei Inaktivität gar nicht aktiviert werden soll. Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner als der Wert für die Inaktivitätsverzögerung sein. -Bild @@ -4685,6 +4690,7 @@ Auf nicht verwalteten Geräten dürfen virtuelle Maschinen ausgeführt werden. wird die gesamte Datensynchronisierung deaktiviert und somit überschrieben. +Die Funktion steuern. Bildschirm um 0 Grad drehen Liste der Einstellungen für Chrome Enterprise-Connector-Services für den Enterprise-Connector "" – dieser wird ausgelöst, wenn eine Datei in Chrome heruntergeladen wird. @@ -4818,9 +4824,9 @@ Wird diese Richtlinie nicht konfiguriert, ist der Datenschutzbildschirm anfangs Ist diese Richtlinie konfiguriert, wird damit festgelegt, was tun soll, wenn der Nutzer für die Dauer der Inaktivitätsverzögerung inaktiv bleibt. Diese kann gesondert konfiguriert werden. - Wenn die Richtlinie nicht konfiguriert ist, wird das Gerät standardmäßig gesperrt. + Wenn die Richtlinie nicht konfiguriert ist, wird das Gerät standardmäßig in den Ruhemodus versetzt. - Falls das Gerät gesperrt werden soll, kann separat konfiguriert werden, ob den Bildschirm vorher sperren soll oder nicht. + Wenn der Ruhemodus aktiviert wird, kann separat konfiguriert werden, ob den Bildschirm vorher sperren soll oder nicht. Konfiguriert den Passwortmanager. Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen "RemoteAccessHostDomainList". RC4-Verschlüsselungssammlungen in TLS aktivieren diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 3e6c2216ffdd..c8048b5258f9 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb @@ -3386,6 +3386,11 @@ Si se establece como falsa, no podrá usar notificaci Dirección MAC para el NIC integrado del dispositivo Extensiones que tienen permitido utilizar la API de atestación remota Comportamiento predeterminado de los sitios que no forman parte de ningún paquete de contenido +Si se habilita, la función de enviará encabezados de solicitud detallados con información sobre el entorno y el navegador del usuario. + + Esta es una función adicional, pero los nuevos encabezados pueden ocasionar fallos en algunos sitios web que restrinjan los caracteres que pueden contener las solicitudes. + + Si habilitas esta política o no la estableces, se habilitará la función de . Si la inhabilitas, la función no estará disponible. Utilizar reloj con formato de 24 horas de forma predeterminada Indicar si el buscador de complementos se debe inhabilitar (obsoleto) Esta política es parte del siguiente grupo atómico (solo se aplican las políticas que provengan de la fuente de mayor prioridad del grupo): @@ -4706,6 +4711,7 @@ Si se selecciona "U2F_EXTENDED", el segundo factor integrado proporcionará func Si esta política se inhabilita o no se establece, solo se usarán los perfiles locales comunes. La política inhabilita la sincronización de todos los datos y anula la política . +Controla la función Rotar la pantalla 0 grados Lista de configuraciones para los servicios de Conectores de Chrome Enterprise que se aplicarán al Conector de Enterprise , el cual se activa cuando se descarga un archivo en Chrome. diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 190036ddfc57..ef67c665d004 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb @@ -3472,6 +3472,11 @@ Ten en cuenta que se anunció que esta política se eliminaría en la versión 8 Dirección NIC MAC integrada en el dispositivo Extensiones con permiso para utilizar la API de confirmación remota Comportamiento predeterminado de sitios no incluidos en un paquete de contenido +Si está habilitada, la función envía encabezados de solicitud granulares con información sobre el entorno y el navegador del usuario. + + Esta función es adicional, pero los nuevos encabezados podrían afectar a la funcionalidad de algunos sitios web que restringen el número de caracteres que pueden tener las solicitudes. + + Si se habilita esta política o no se le asigna ningún valor, se habilitará la función . Si no se habilita esta política, dicha función no estará disponible. Utilizar reloj de formato de 24 horas de forma predeterminada Especificar si se debe inhabilitar el buscador de complementos (obsoleta) Esta política forma parte del siguiente grupo atómico (solo se aplicarán las políticas de la fuente que tenga mayor prioridad del grupo): @@ -4816,6 +4821,7 @@ Si esta opción no está establecida o está establecida en True, los dispositiv Si esta política se inhabilita o no se define, solo se utilizarán los perfiles locales habituales. La política inhabilita todas las sincronizaciones de datos y anula . +Controlar la función . Girar la pantalla 0 grados Lista con los ajustes de los servicios de Chrome Enterprise Connectors que se van a aplicar al conector de Enterprise, que se activa cuando se descarga un archivo en Chrome. diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 4de993169652..194272fade8a 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb @@ -3469,6 +3469,11 @@ Lorsque cette règle n'est pas configurée, le paramètre par défaut utilisé c Adresse MAC de la carte d'interface réseau intégrée de l'appareil Extensions autorisées à utiliser l'API d'attestation à distance Comportement par défaut des sites ne figurant dans aucun pack de contenu +Lorsqu'elle est activée, la fonctionnalité envoie des en-têtes de requête précis qui fournissent des informations sur le navigateur et l'environnement de l'utilisateur. + + Il s'agit d'une fonctionnalité complémentaire. Toutefois, les nouveaux en-têtes peuvent entraîner un dysfonctionnement de certains sites Web qui appliquent des restrictions en ce qui concerne les caractères que peuvent contenir les requêtes. + + Si cette règle est activée ou qu'elle n'est pas configurée, la fonctionnalité est activée. Si cette règle est désactivée, la fonctionnalité n'est pas disponible. Utiliser le format d'horloge 24 h par défaut Indiquer si l'outil de recherche de plug-ins doit être désactivé (obsolète) Cette règle fait partie du groupe atomique suivant (seules les règles issues de la source ayant la plus haute priorité dans le groupe sont appliquées) : @@ -4806,6 +4811,7 @@ Si ce paramètre est désactivé et que les connexions UDP sortantes sont filtr Si cette règle est désactivée ou si elle n'est pas configurée, seuls les profils locaux standards sont utilisés. La règle entraîne la désactivation de la synchronisation de toutes les données, remplaçant ainsi . +Contrôler la fonctionnalité . Faire pivoter l'écran de 0 degré Liste des services des connecteurs Chrome Enterprise à appliquer au connecteur  Enterprise, qui se déclenche lorsqu'un fichier est téléchargé dans Chrome. diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index fb0c68e31e82..7c56616cd82c 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb @@ -3396,6 +3396,11 @@ Jika kebijakan ini dinonaktifkan atau tidak disetel, situs tidak akan dapat mena Alamat MAC NIC bawaan perangkat Ekstensi yang diizinkan untuk menggunakan API pengesahan jarak jauh Perilaku default untuk situs tidak ada dalam paket konten mana pun +Jika diaktifkan, fitur akan mengirimkan header permintaan terperinci yang memberikan informasi tentang browser dan lingkungan pengguna. + + Ini adalah fitur tambahan, tetapi header baru dapat menyebabkan error di situs yang membatasi karakter yang mungkin ada di dalam permintaan. + + Jika kebijakan ini diaktifkan atau tidak disetel, fitur akan diaktifkan. Jika kebijakan ini dinonaktifkan, fitur tidak akan tersedia. Menggunakan 24 jam sebagai default Menentukan apakah pencari plugin harus dinonaktifkan (tidak digunakan lagi) Kebijakan ini merupakan bagian dari grup atom berikut (hanya kebijakan dari sumber tertinggi yang ada di grup yang akan diterapkan) : @@ -4688,6 +4693,7 @@ Cara yang diharapkan terkait penggunaan kebijakan ini adalah merotasi konfiguras Batasi akun Google mana yang diizinkan untuk disetel sebagai akun utama browser di Mengirimkan file untuk pemeriksaan pelanggaran aturan perlindungan data sensitif Jika Anda mengaktifkan setelan ini, setelan yang disimpan di profil seperti bookmark, data IsiOtomatis, sandi, dan informasi lainnya juga akan ditulis ke file yang disimpan di folder profil pengguna Roaming atau lokasi yang ditentukan oleh Administrator melalui kebijakan . Mengaktifkan kebijakan ini akan menonaktifkan sinkronisasi cloud. Jika kebijakan ini dinonaktifkan atau tidak disetel, hanya profil lokal reguler yang akan digunakan. Kebijakan menonaktifkan semua sinkronisasi data, menggantikan . +Mengontrol fitur . Putar layar sebesar 0 derajat Daftar setelan layanan Konektor Chrome Enterprise yang akan diterapkan ke Konektor Enterprise , yang memicu saat file didownload di Chrome. diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 36befc6da77e..0feaa02efbb5 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb @@ -3346,6 +3346,11 @@ Se questa impostazione viene disattivata o non viene impostata, sia gli utenti l Indirizzo MAC NIC integrato del dispositivo Estensioni autorizzate a utilizzare l'API di attestazione da remoto Comportamento predefinito per i siti non presenti in pacchetti di contenuti +Se attivata, la funzionalità invia intestazioni della richiesta granulari che forniscono informazioni sul browser e sull'ambiente dell'utente. + + Si tratta di una funzionalità aggiuntiva, ma le nuove intestazioni potrebbero interrompere alcuni siti web che limitano il numero di caratteri della richiesta. + + Se il criterio è attivato o non viene configurato, la funzionalità è attivata. Se il criterio è disattivato, la funzionalità non è disponibile. Utilizza orologio di 24 ore per impostazione predefinita Specifica se disattivare o meno la ricerca dei plug-in (ritirata) Questo criterio fa parte del seguente gruppo atomico (vengono applicati soltanto i criteri dell'origine con la priorità massima presenti nel gruppo): @@ -4662,6 +4667,7 @@ L'aggiornamento dinamico della norma è supportato in M56 e versioni successive. Se questa norma viene disattivata o non viene impostata, saranno utilizzati solo i normali profili locali. La norma consente di disattivare la sincronizzazione di tutti i dati e sostituisce la norma . +Controlla la funzionalità di . Ruota lo schermo di 0° Elenco di impostazioni per i servizi dei connettori di Chrome Enterprise da applicare al connettore di Enterprise , che si attiva quando un file viene scaricato in Chrome. diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 67d80bb53e78..d8028594aad4 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb @@ -3378,6 +3378,11 @@ False に設定した場合、 はネイティブ通 デバイスの組み込みの NIC MAC アドレス Remote Attestation API の使用が許可されている拡張機能 どのコンテンツ パックにもないサイトに対するデフォルトの動作 +有効な場合、 機能はユーザーのブラウザと環境に関する情報を提供する詳細なリクエスト ヘッダーを送信します。 + + これは追加の機能ですが、この新しいヘッダーは、リクエストに含める情報を制限している一部のウェブサイトでは正常に動作しない可能性があります。 + + このポリシーを有効に設定するか未設定のままにした場合、 機能は有効になります。このポリシーを無効に設定した場合、この機能は使用できません。 デフォルトで 24 時間表示を使用 プラグイン ファインダーを無効にするかどうかを指定する(サポート終了) このポリシーは、次の最小単位グループの一部です(グループ内にある優先度の最も高いソースのポリシーのみが適用されます)。 @@ -4684,6 +4689,7 @@ False に設定した場合、 はネイティブ通 このポリシーを無効にするか未設定のままにした場合は、通常のローカル プロフィールのみが使用されます。 ポリシーが設定されている場合は、すべてのデータ同期が無効になります。この設定は、 ポリシーの設定よりも優先されます。 + の機能を制御する。 画面を 0 度回転(回転なし) Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome でファイルがダウンロードされた場合に呼び出されます。 diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index f28079bcb8e1..639a683142f7 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb @@ -3467,6 +3467,11 @@ False로 설정하면 에서 기본 알림을 사용 기기의 내장 NIC MAC 주소 원격 인증 API를 사용하도록 허용된 확장 프로그램입니다. 사이트에 대한 기본 동작이 콘텐츠 팩에 없음 + 기능을 사용하면 사용자 브라우저 및 환경에 관한 정보를 제공하는 상세 요청 헤더를 전송합니다. + + 이는 부가적인 기능이지만 요청이 포함할 수 있는 문자 수를 제한하는 일부 웹사이트가 새로운 헤더로 인해 손상될 수 있습니다. + + 정책을 사용 설정하거나 설정하지 않으면 기능이 사용 설정됩니다. 정책을 사용 중지하면 기능을 사용할 수 없습니다. 기본적으로 24시간 표기법 사용 플러그인 Finder 사용 중지 여부 지정(지원 중단됨) 이 정책은 다음 그룹의 일부입니다. 그룹에서 우선순위가 가장 높은 출처의 정책만 적용됩니다. @@ -4815,6 +4820,7 @@ False로 설정하면 에서 기본 알림을 사용 이 정책을 사용 중지하거나 설정하지 않으면 일반 로컬 프로필만 사용됩니다. 정책은 모든 데이터 동기화를 사용 중지하며 정책을 무시합니다. + 기능을 제어합니다. 화면을 0도 회전 Enterprise Connector에 적용할 Chrome Enterprise Connector 서비스 설정의 목록으로, 파일이 Chrome에서 다운로드될 때 실행됩니다. diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 2321f7fa107a..8cad0ca7945c 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb @@ -3436,6 +3436,11 @@ Als dit beleid is ingesteld op False, gebruikt geen n MAC-adres van ingebouwde NIC van apparaat Extensies die toestemming hebben de API voor externe bevestiging te gebruiken Standaardgedrag voor sites die zich niet in een inhoudspakket bevinden +Als dit beleid is ingeschakeld, stuurt de -functie gedetailleerde verzoekheaders met informatie over de browser en omgeving van de gebruiker. + + Dit is een aanvullende functie, maar de nieuwe headers kunnen de juiste weergave verhinderen van sommige websites die de tekens in deze verzoeken beperken. + + Als dit beleid is ingeschakeld of niet is ingesteld, wordt de -functie uitgeschakeld. Als het beleid is uitgeschakeld, is de functie niet beschikbaar. Klok met 24-uursnotatie standaard gebruiken Aangeven of de plug-inzoeker moet worden uitgeschakeld (beëindigd) Dit beleid maakt deel uit van de volgende atomische groep (alleen beleidsregels van de bron met de hoogste prioriteit in de groep worden toegepast): @@ -4760,6 +4765,7 @@ Geheugengegevens worden in alle gevallen aan de pagina gerapporteerd, afgezien v Als dit beleid is uitgeschakeld of niet wordt ingesteld, worden alleen de gewone lokale profielen gebruikt. Met het beleid wordt alle gegevenssynchronisatie uitgeschakeld en wordt overschreven. +De functie beheren. Scherm 0 graden draaien Lijst met instellingen voor Chrome Enterprise-connectorservices die moeten worden toegepast op de Enterprise-connector . De lijst wordt geactiveerd als een bestand wordt gedownload in Chrome. diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 74a73847c8f2..6b3f00ca632c 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb @@ -3354,6 +3354,11 @@ O campo permite que você especifi Endereço MAC da placa de rede integrada do dispositivo Extensões que podem usar a API de declaração remota Comportamento padrão para sites fora de pacotes de conteúdo +Quando ativado, o recurso "" enviará cabeçalhos de solicitação granulares fornecendo informações sobre o ambiente e o navegador do usuário. + + Esse é um recurso complementar, mas os novos cabeçalhos podem corromper alguns sites que restringem os caracteres contidos em algumas solicitações. + + Se esta política for ativada ou não for definida, o recurso "" será ativado. Se a política for desativada, o recurso ficará indisponível. Usar relógido de 24 horas por padrão Especifica se o localizador de plug-ins deve ser desativado (uso suspenso) Esta política faz parte do seguinte grupo atômico (apenas as políticas da fonte de maior prioridade presentes no grupo são aplicadas): @@ -4669,6 +4674,7 @@ Se a política não for definida, a configuração ficará ativada, mas o usuár Se essa política for desativada ou não for configurada, apenas os perfis locais normais serão usados. A política desativa a sincronização de todos os dados por meio da substituição da política . +Controlar o recurso de . Girar tela em 0 graus Lista de configurações para os serviços de conectores do Chrome Enterprise que serão aplicadas ao conector , que é acionado quando o download de um arquivo é feito no Chrome. diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index f7e4f1b643e7..34829a83235d 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb @@ -3396,6 +3396,11 @@ MAC-адрес встроенной сетевой платы устройства Разрешает расширениям использовать API удаленного подтверждения данных Действие по умолчанию для сайтов, не включенных в пакеты контента +Если функция включена, она отправляет точные заголовки запросов со сведениями о браузере пользователя и среде. + + Эта функция является дополнительной, но новые заголовки могут привести к некорректной работе сайтов, где ограничено применение символов, содержащихся в запросах. + + Если правило включено или не настроено, активируется функция . Если правило отключено, то эта функция недоступна. Использовать по умолчанию 24-часовой формат времени Отключение поиска плагинов (устаревшее) Это правило входит в следующую мини-группу (применяются только правила из источника с максимальным приоритетом): @@ -4712,6 +4717,7 @@ Если это правило отключено или не установлено, используются только обычные локальные профили. Правило отключает синхронизацию всех данных, изменяя правило . +Управление функцией Повернуть экран на 0 градусов Список настроек, применяемых к коннектору для Chrome Enterprise. Коннектор запускается при скачивании файлов из Chrome. diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 870f1bf05316..d641fe2d838e 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb @@ -3362,6 +3362,11 @@ ที่อยู่ MAC ของ NIC ในตัวของอุปกรณ์ ส่วนขยายได้รับอนุญาตให้ใช้ API การยืนยันระยะไกล ลักษณะการทำงานเริ่มต้นสำหรับเว็บไซต์ที่ไม่ได้อยู่ในชุดเนื้อหาใดๆ +เมื่อเปิดใช้ ฟีเจอร์ จะส่งส่วนหัวของคำขอแบบละเอียดซึ่งให้ข้อมูลเกี่ยวกับเบราว์เซอร์และสภาพแวดล้อมของผู้ใช้ + + ฟีเจอร์นี้เป็นฟีเจอร์เสริม แต่ส่วนหัวใหม่อาจทำให้บางเว็บไซต์ที่จำกัดจำนวนอักขระในคำขอขัดข้อง + + หากเปิดใช้นโยบายนี้หรือไม่ได้ตั้งค่า จะมีการเปิดใช้ หากปิดใช้นโยบายนี้ ฟีเจอร์นี้จะใช้งานไม่ได้ ใช้เวลารูปแบบ 24 ชั่วโมงโดยค่าเริ่มต้น ระบุว่าควรปิดเครื่องมือค้นหาปลั๊กอินไหม (เลิกใช้งานแล้ว) นโยบายนี้เป็นส่วนหนึ่งของกลุ่มขนาดเล็กต่อไปนี้ (ระบบใช้เฉพาะนโยบายจากแหล่งที่มาที่มีลำดับความสำคัญสูงสุดในกลุ่ม) @@ -4684,6 +4689,7 @@ หากปิดใช้หรือไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้เฉพาะโปรไฟล์ปกติในเครื่องเท่านั้น นโยบาย จะปิดใช้การซิงค์ข้อมูลทั้งหมด ซึ่งจะลบล้าง +ควบคุมฟีเจอร์ หมุนหน้าจอ 0 องศา รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการดาวน์โหลดไฟล์ใน Chrome diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 4cb8d53c7988..7de6b86188a4 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb @@ -3440,6 +3440,11 @@ Bu ayarı etkinleştirirseniz veya yapılandırmazsanız kullanıcılar şifrele Cihazın dahili NIC MAC adresi Uzaktan doğrulama API'sını kullanmasına izin verilen uzantılar Hiçbir içerik paketinde bulunmayan siteler için varsayılan davranış +Bu politika etkinleştirildiğinde özelliği, kullanıcının tarayıcısı ve ortamı hakkında ayrıntılı bilgiler içeren istek başlıkları gönderir. + + Bu ek bir özelliktir. Fakat yeni başlıklar, isteklerde karakter kısıtlaması bulunduğu takdirde bazı web sitelerinin çalışmasını bozabilir. + + Bu politika etkinleştirilir veya ayarlanmadan bırakılırsa özelliği etkin kılınır. Politika devre dışı bırakılırsa bu özellik kullanılamaz. Varsayılan olarak 24 saatlik saat biçimini kullan Eklenti bulucunun devre dışı bırakılıp bırakılmayacağını belirt (kullanımdan kaldırıldı) Bu politika, aşağıdaki atom grubunun bir parçasıdır (yalnızca grupta bulunan en yüksek öncelikli kaynaktan gelen politikalar geçerlidir): @@ -4769,6 +4774,7 @@ Bu politika yanlış (false) değerine ayarlanırsa Yeni Sekme sayfasında, otom Bu politika devre dışı bırakılırsa veya ayarlanmazsa yalnızca normal yerel profiller kullanılır. politikası, politikasını geçersiz kılarak tüm veri senkronizasyonunu devre dışı bırakır. + özelliğini kontrol eder. Ekranı 0 derece döndür Chrome'da bir dosya indirildiğinde tetiklenen Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Bağlayıcılar hizmetleri ayarlarının listesidir. diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 53901219f3f3..0e71921c107a 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb @@ -3420,6 +3420,11 @@ MAC-адреса вбудованої мережевої плати пристрою Дозволяє розширенням використовувати API віддаленого підтвердження даних Поведінка за умовчанням для сайтів, яких немає в жодному пакеті вмісту +Коли функція увімкнена, вона надсилає докладні заголовки запитів з інформацією про веб-переглядач і середовище користувача. + + Це додаткова функція, але нові заголовки можуть ламати деякі веб-сайти, які обмежують використання символів, що можуть бути в запитах. + + Якщо це правило ввімкнено або не налаштовано, функція буде активованою. Якщо воно вимкнене, функція буде недоступною. Використовувати 24-годинний формат годинника за умовчанням Указати, чи потрібно вимкнути інструмент пошуку плагінів (не підтримується) Це правило є частиною цієї елементарної групи (застосовуються лише правила з джерела з найвищим пріоритетом у групі): @@ -4738,6 +4743,7 @@ Якщо це правило вимкнено або не налаштовано, використовуватимуться лише звичайні локальні профілі. Правило вимикає синхронізацію всіх даних, замінюючи правило . +Керування функцією . Обернути екран на 0 градусів Список налаштувань сервісів конекторів Chrome Enterprise, які застосовуються до конектора Enterprise , що активується, коли в браузері Chrome завантажується файл. diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 1212c25a32c8..1063d320b1fc 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb @@ -3469,6 +3469,11 @@ Nếu đặt thành False, thì sẽ không sử dụ Địa chỉ MAC trên NIC tích hợp của thiết bị Tiện ích được phép sử dụng API chứng thực từ xa Thao tác mặc định cho trang web không nằm trong bất kỳ gói nội dung nào +Khi được bật, tính năng sẽ gửi tiêu đề của yêu cầu chi tiết cung cấp thông tin về trình duyệt và môi trường của người dùng. + + Đây là một tính năng bổ sung nhưng tiêu đề mới có thể làm hỏng một số trang web hạn chế lượng ký tự có trong các yêu cầu. + + Nếu bạn bật hoặc không đặt chính sách này, thì tính năng sẽ được bật. Nếu bạn tắt chính sách này, thì tính năng này sẽ không hoạt động. Sử dụng đồng hồ 24 giờ theo mặc định Chỉ định xem có nên tắt trình tìm kiếm plugin hay không (không được dùng nữa) Chính sách này thuộc nhóm không thể phân chia sau đây (chỉ áp dụng các chính sách thuộc nguồn có mức ưu tiên cao nhất trong nhóm): @@ -4634,7 +4639,7 @@ Nếu bạn không đặt chính sách này thì người dùng sẽ có thể t Nếu cài đặt này được bật thì người dùng phải cung cấp mã xác thực hai bước hợp lệ khi truy cập vào máy chủ. Nếu cài đặt này bị tắt hoặc không được đặt thì tính năng xác thực hai bước sẽ không được bật và hành vi mặc định là có mã PIN do người dùng xác định sẽ được sử dụng. -Mở trang Tab mới +Mở trang Thẻ mới Hỏi vị trí lưu từng tệp trước khi tải xuống Định cấu hình các chính sách liên quan đến Chrome Reporting Extension (Tiện ích báo cáo của Chrome). @@ -4807,6 +4812,7 @@ Nếu bạn không đặt chính sách này thì người dùng sẽ có thể t Nếu tắt hoặc không đặt chính sách này thì bạn chỉ có thể sử dụng các cấu hình cục bộ thông thường. Chính sách sẽ tắt tất cả tính năng đồng bộ hóa dữ liệu, ghi đè . +Kiểm soát tính năng . Xoay màn hình 0 độ 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 của Enterprise. Trình kết nối này sẽ chạy khi tệp được tải xuống trong Chrome. diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index d5a99df57ed4..8b47cb7780c6 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb @@ -3318,6 +3318,11 @@ 设备的内置 NIC MAC 地址 允许扩展程序使用 Remote Attestation API 非任何内容包内的网站的默认行为 +启用后, 功能会发送精细的请求标头,从中提供关于用户浏览器和环境的信息。 + + 这是一项附加功能,但如果某些网站限制了请求中可包含的字符,新标头可能会导致这些网站无法正常运作。 + + 如果您启用了或不设置此政策, 功能会处于启用状态。如果您停用了此政策,这项功能将不可用。 默认情况下,使用24小时制 指定是否应停用插件查找器(已弃用) 此政策是下面这个原子政策组的一部分(系统仅会应用该组中来源优先级最高的政策): @@ -4618,6 +4623,7 @@ 如果此政策已停用或未设置,则系统只会使用常规的本地个人资料。 政策会停用所有数据同步,并会替换 +控制 功能。 将屏幕旋转 0 度 让您能够指定适用于 Enterprise Connector 的 Chrome Enterprise Connector 服务设置列表,以供有人在 Chrome 中下载文件时调用。 diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index c2fdda731d24..b965403d7124 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb @@ -3344,6 +3344,11 @@ 裝置內建的 NIC MAC 位址 允許擴充功能使用 Remote Attestation API 非任何內容套件中網站的預設行為 +啟用「」功能時,系統會傳送詳細的要求標頭,提供與使用者的瀏覽器和環境有關的資訊。 + + 這是附加功能,但如果遇到對於要求的字元數設有限制的網站,新的標頭可能會導致這類網站無法正常運作。 + + 如果啟用或不設定這項政策,系統會啟用功能。如果停用這項政策,這項功能將無法使用。 預設使用 24 小時制時鐘 指定是否要停用外掛程式尋找工具 (已淘汰) 這項政策屬於下列不可部分完成的群組 (系統僅會套用群組中最高優先來源所設定的政策): @@ -4636,6 +4641,7 @@ 如果停用或不設定這項政策,系統只會使用一般本機設定檔。 政策會停用所有資料同步處理功能,並覆寫 +控管 功能。 將畫面旋轉 0 度 指定要套用至 Enterprise Connector 的 Chrome Enterprise Connectors 服務設定清單,在 Chrome 中下載檔案時會觸發這份清單。 diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 6fa0394b5427..3700b50d84bc 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb @@ -884,7 +884,7 @@ ‏Prc2 (مغلف) يريد استخدام الموقع الجغرافي لجهازك. ‏إعادة تشغيل Chromium -‏فعَّل المشرف Chrome Enterprise Connectors على متصفّحك. لدى هذه الموصلات إذن بالوصول إلى بعض بياناتك. +‏فعَّل المشرف "وصلات Chrome Enterprise" على متصفّحك. لدى هذه الوصلات إذن بالوصول إلى بعض بياناتك. تحديث اقتراحات البحث إدارة كلمات المرور… @@ -1751,7 +1751,7 @@ شهادات الجذر المُخصَّصة ضارة قد يتم تحصيل هذه الرسوم لمرة واحدة أو بشكل متكرِّر، وقد تكون غير واضحة. عرض على أي حال -‏فعَّل Chrome Enterprise Connectors على متصفّحك. لدى هذه الموصلات إذن بالوصول إلى بعض بياناتك. +‏فعَّل "وصلات Chrome Enterprise" على متصفّحك. لدى هذه الوصلات إذن بالوصول إلى بعض بياناتك. الأعطال () يجب إدخال عبارة المرور نفسها مرتين. تهيئة الشبكة غير صالحة ويتعذّر استيرادها. diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 8333eb8a66a8..5677e385291a 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb @@ -223,7 +223,7 @@ প্রক্সি স্থির প্রক্সি সার্ভারগুলি ব্যবহার করতে সেট করা আছে কোনো .pac স্ক্রিপ্ট URL নয়৷ আবশ্যক ক্ষেত্র -Google ফর্ম +Google Forms শুরুর পৃষ্ঠাগুলি খুলুন তালিকা সঙ্কুচিত করুন ফিল্টার হচ্ছে diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index e096d1812b4d..d9e63eb85c82 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb @@ -222,7 +222,7 @@ એક મજબૂત પાસવર્ડ સૂચવવા માટે તમારા Google એકાઉન્ટનો ઉપયોગ કરો પ્રૉક્સી નક્કી કરેલા પ્રૉક્સી સર્વરનો ઉપયોગ કરવા માટે સેટ કરેલી છે, .pac સ્ક્રિપ્ટ URL નથી. જરૂરી ફીલ્ડ -Google ફોર્મ્સ +Google Forms સ્ટાર્ટઅપ પૃષ્ઠો ખોલો સૂચિ સંકુચિત કરો ફિલ્ટરિંગ diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index dca7f19960ef..f4db78953fd8 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb @@ -222,7 +222,7 @@ मज़बूत पासवर्ड सुझाने के लिए अपने Google खाते का इस्तेमाल करें प्रॉक्‍सी की सेटिंग इस तरह से की गई है कि वह फ़िक्‍स्‍ड प्रॉक्‍सी सर्वर इस्तेमाल करे, न कि .pac स्‍क्रिप्‍ट यूआरअल. ज़रूरी फ़ील्ड -Google फ़ॉर्म +Google Forms शुरुआती पन्ना खोलें सूची छोटी करें फ़िल्टर किया जा रहा है diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index c68a0fbd6792..0bb5f45a908e 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb @@ -257,7 +257,7 @@ ოთხმაგად გახვრეტა ზემოთ აუგმენტური რეალობა პროქსი დაყენებულია ავტომატურ კონფიგურაციაზე. -თქვენ იგულისხმეთ ? +ხომ არ იგულისხმეთ ? პროქსისა და ქსელის დაცვის შემოწმება ლანგარი 7 გვერდები არ ითარგმნება. diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 4fc7e70d34f2..90c6043b2fa7 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb @@ -221,7 +221,7 @@ ಸದೃಢ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಸೂಚಿಸಲು ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ಬಳಸಿ .pac ಸ್ಕ್ರಿಪ್ಟ್ URL ಅಲ್ಲದೆ, ನಿಗಧಿತ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸಲು ಪ್ರಾಕ್ಸಿಯನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ. ಅಗತ್ಯವಿರುವ ಕ್ಷೇತ್ರ -Google ಫಾರ್ಮ್‌ಗಳು +Google Forms ಆರಂಭಿಕ ಪುಟಗಳನ್ನು ತೆರೆಯಿರಿ ಪಟ್ಟಿಯನ್ನು ಸಂಕುಚಿಸಿ ಫಿಲ್ಟರಿಂಗ್ diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 3ead0308b01a..128f072fb739 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb @@ -222,7 +222,7 @@ ശക്തമായ പാസ്‌വേഡ് നിർദ്ദേശിക്കാൻ നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിക്കുക സ്ഥിരമായ പ്രോക്‌സി സെർവറുകൾ ഉപയോഗിക്കുന്നതിനായി പ്രോക്‌സി സജ്ജീകരിച്ചിരിക്കുന്നു, ഒരു .pac സ്‌ക്രിപ്റ്റ് URL ഉപയോഗിക്കുന്നതിനല്ല. ഇത് പൂരിപ്പിക്കേണ്ടതുണ്ട് -Google ഫോം +Google Forms ആരംഭ പേജുകൾ തുറക്കുക ലിസ്റ്റ് ചുരുക്കുക ഫിൽട്ടർ ചെയ്യുന്നു diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 4c8ff874a37e..b099c62e0ae2 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb @@ -222,7 +222,7 @@ क्लिष्ट पासवर्ड सुचवण्यासाठी तुमचे Google खाते वापरा प्रॉक्सी निश्चित प्रॉक्सी सर्व्हर वापरण्‍यास सेट करण्‍यात आले आहे, .pac स्क्रिप्ट URL नव्हे. या जागा भरणे आवश्यक -Google फॉर्म +Google Forms प्रारंभ पृष्ठ उघडा सूची कोलॅप्स फिल्टर करणे diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 6d0c414d56d1..6b8adabc2528 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb @@ -99,7 +99,7 @@ Høyre Nettstedet du er på vei til, inneholder farlige apper Bekreft navnet -Personer som har brukt enheten i det siste, og når de har gjort det +hvem som har brukt enheten i det siste, og når de har gjort det Denne regelen er blokkert. Regelens verdi ignoreres. forslagene Index-4x6 (postkort) @@ -971,7 +971,7 @@ brukere av denne nettleseren. Z-fals Denne tjeneren kunne ikke bevise at den er . Sikkerhetssertifikatet til tjeneren er ikke klarert av Chromium. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din. Provins -Enhetsstatistikk, som prosessor- og minnebruk +enhetsstatistikk, som prosessor- og minnebruk A2 A5 European-Edp @@ -1018,7 +1018,7 @@ brukere av denne nettleseren. Advarsel: Denne regelen ble ikke sammenslått som angitt i PolicyDictionaryMultipleSourceMergeList-regelen fordi den ikke er en del av ordlistereglene som kan slås sammen. B1 Avslutt -Nettverksadresser +nettverksadresser Vis alle lagrede passord Vis informasjonskapsler Dette nettstedet bruker en utdatert sikkerhetskonfigurasjon, som betyr at informasjonen din (for eksempel passord eller kredittkortnumre) kan bli avslørt når den sendes til dette nettstedet. @@ -1455,7 +1455,7 @@ effektuere Denne siden har blitt oversatt fratil Frigjør . Det kan hende noen nettsteder lastes inn tregere neste gang du besøker dem. Visa -Administratoren kan se dette: +Administratoren kan se Letter-Extra retter seg ikke etter sikkerhetsstandardene. Linux-aktivitet i beholderen, og kan installere og kjøre Linux-apper i beholderen diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 54574adcf6f0..df454cb13585 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb @@ -222,7 +222,7 @@ ଏକ ଜଟିଳ ପାସୱାର୍ଡର ପ୍ରସ୍ତାବ ଦେବାକୁ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରନ୍ତୁ ପ୍ରକ୍ସି ନିର୍ଦ୍ଦିଷ୍ଟ କରାଯାଇଥିବା ପ୍ରକ୍ସି ସର୍ଭର୍‌ଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ସେଟ୍ କରାଯାଇଛି, ଏକ .pac ସ୍କ୍ରିପ୍ଟ URLକୁ ନୁହେଁ। ଆବଶ୍ୟକୀୟ ଫିଲ୍ଡ -Google ଫର୍ମ +Google Forms ଆରମ୍ଭ ପୃଷ୍ଠା ଖୋଲନ୍ତୁ ତାଲିକାକୁ ସଂକୁଚିତ କରନ୍ତୁ ଫିଲ୍ଟରିଂ diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 11ef7d5e4712..2f7908e35674 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb @@ -222,7 +222,7 @@ ਮਜ਼ਬੂਤ ਪਾਸਵਰਡ ਦਾ ਸੁਝਾਅ ਦੇਣ ਲਈ ਆਪਣੇ Google ਖਾਤੇ ਦੀ ਵਰਤੋਂ ਕਰੋ ਪ੍ਰੌਕਸੀ ਸਥਿਰ ਪ੍ਰੌਕਸੀ ਸਰਵਰ ਵਰਤਣ ਲਈ ਸੈੱਟ ਹੈ, ਇੱਕ .pac ਸਕ੍ਰਿਪਟ URL ਨਹੀਂ। ਲੋੜੀਂਦਾ ਖੇਤਰ -Google ਫ਼ਾਰਮ +Google Forms ਸ਼ੁਰੂਆਤੀ ਪੰਨੇ ਖੋਲ੍ਹੋ ਸੂਚੀ ਨੂੰ ਸਮੇਟੋ ਫਿਲਟਰਿੰਗ diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 8fc14dea55e0..ea94f32e990b 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb @@ -222,7 +222,7 @@ Google கணக்கைப் பயன்படுத்தி வலிமையான கடவுச்சொல்லைப் பரிந்துரைக்கவும் நிலையான ப்ராக்ஸி சேவையகங்களைப் பயன்படுத்த ப்ராக்ஸி அமைக்கப்பட்டுள்ளது, .pac ஸ்கிரிப்ட் URL அல்ல. அவசியமானவை -Google படிவங்கள் +Google Forms துவக்கப் பக்கங்களைத் திற பட்டியலைச் சுருக்கு வடிகட்டுதல் diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 0d90ed3da713..67349dfecafe 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb @@ -224,7 +224,7 @@ శక్తివంతమైన పాస్‌వర్డ్‌ను సూచించడానికి మీ Google ఖాతాను ఉపయోగించండి .pac స్క్రిప్ట్ URLను కాకుండా, స్థిరమైన ప్రాక్సీ సర్వర్‌లను ఉపయోగించేలా ప్రాక్సీ సెట్ చేయబడింది. అవసరమైన ఫీల్డ్ -Google ఫారమ్‌లు +Google Forms ప్రారంభ పేజీలను తెరువు జాబితాను కుదించు ఫిల్టరింగ్ diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc index a76a2954e2e6..9b6fb00a63de 100644 --- a/components/user_manager/known_user.cc +++ b/components/user_manager/known_user.cc @@ -77,8 +77,8 @@ const char kChallengeResponseKeys[] = "challenge_response_keys"; const char kLastOnlineSignin[] = "last_online_singin"; const char kOfflineSigninLimit[] = "offline_signin_limit"; -// Key of the boolean flag telling if user is managed. -const char kIsManaged[] = "is_managed"; +// Key of the boolean flag telling if user is enterprise managed. +const char kIsEnterpriseManaged[] = "is_enterprise_managed"; // Key of the last input method user used which is suitable for login/lock // screen. @@ -101,7 +101,7 @@ const char* kReservedKeys[] = {kCanonicalEmail, kChallengeResponseKeys, kLastOnlineSignin, kOfflineSigninLimit, - kIsManaged, + kIsEnterpriseManaged, kLastInputMethod}; PrefService* GetLocalState() { @@ -654,14 +654,15 @@ base::TimeDelta GetOfflineSigninLimit(const AccountId& account_id) { return time_delta; } -void SetIsManaged(const AccountId& account_id, bool is_managed) { - SetBooleanPref(account_id, kIsManaged, is_managed); +void SetIsEnterpriseManaged(const AccountId& account_id, + bool is_enterprise_managed) { + SetBooleanPref(account_id, kIsEnterpriseManaged, is_enterprise_managed); } -bool GetIsManaged(const AccountId& account_id) { - bool is_managed; - if (GetBooleanPref(account_id, kIsManaged, &is_managed)) - return is_managed; +bool GetIsEnterpriseManaged(const AccountId& account_id) { + bool is_enterprise_managed; + if (GetBooleanPref(account_id, kIsEnterpriseManaged, &is_enterprise_managed)) + return is_enterprise_managed; return false; } diff --git a/components/user_manager/known_user.h b/components/user_manager/known_user.h index bc5e5fed5e0b..c69fdff2fd2e 100644 --- a/components/user_manager/known_user.h +++ b/components/user_manager/known_user.h @@ -227,10 +227,10 @@ void USER_MANAGER_EXPORT SetOfflineSigninLimit(const AccountId& account_id, base::TimeDelta USER_MANAGER_EXPORT GetOfflineSigninLimit(const AccountId& account_id); -void USER_MANAGER_EXPORT SetIsManaged(const AccountId& account_id, - bool is_managed); +void USER_MANAGER_EXPORT SetIsEnterpriseManaged(const AccountId& account_id, + bool is_enterprise_managed); -bool USER_MANAGER_EXPORT GetIsManaged(const AccountId& account_id); +bool USER_MANAGER_EXPORT GetIsEnterpriseManaged(const AccountId& account_id); void USER_MANAGER_EXPORT SetUserLastInputMethod(const AccountId& account_id, diff --git a/content/browser/background_fetch/background_fetch_scheduler.cc b/content/browser/background_fetch/background_fetch_scheduler.cc index da1c6bf2bebb..4e2d28de5604 100644 --- a/content/browser/background_fetch/background_fetch_scheduler.cc +++ b/content/browser/background_fetch/background_fetch_scheduler.cc @@ -88,6 +88,13 @@ BackgroundFetchScheduler::BackgroundFetchScheduler( BackgroundFetchScheduler::~BackgroundFetchScheduler() = default; +BackgroundFetchScheduler::RegistrationData::RegistrationData( + const BackgroundFetchRegistrationId& registration_id, + blink::mojom::BackgroundFetchRegistrationDataPtr registration) + : registration_id(registration_id), registration(std::move(registration)) {} + +BackgroundFetchScheduler::RegistrationData::~RegistrationData() = default; + bool BackgroundFetchScheduler::ScheduleDownload() { DCHECK_LT(num_running_downloads_, max_running_downloads_); @@ -207,8 +214,8 @@ void BackgroundFetchScheduler::FinishJob( auto it = job_controllers_.find(registration_id.unique_id()); if (it != job_controllers_.end()) { - completed_fetches_[it->first] = {registration_id, - it->second->NewRegistrationData()}; + completed_fetches_[it->first] = std::make_unique( + registration_id, it->second->NewRegistrationData()); // Reset scheduler params. num_running_downloads_ -= it->second->pending_downloads(); @@ -242,7 +249,7 @@ void BackgroundFetchScheduler::DidMarkForDeletion( DCHECK(it != completed_fetches_.end()); blink::mojom::BackgroundFetchRegistrationDataPtr& registration_data = - it->second.second; + it->second->registration; // Include any other failure reasons the marking for deletion may have found. if (registration_data->failure_reason == BackgroundFetchFailureReason::NONE) registration_data->failure_reason = failure_reason; @@ -268,6 +275,9 @@ void BackgroundFetchScheduler::DidMarkForDeletion( // No need to keep the controller around since there won't be dispatch // events. completed_fetches_.erase(it); + } else { + // The registration is now safe to delete. + it->second->processing_completed = true; } } @@ -305,8 +315,11 @@ void BackgroundFetchScheduler::DispatchClickEvent( return; event_dispatcher_.DispatchBackgroundFetchClickEvent( - it->second.first, std::move(it->second.second), base::DoNothing()); - completed_fetches_.erase(unique_id); + it->second->registration_id, it->second->registration.Clone(), + base::DoNothing()); + + if (it->second->processing_completed) + completed_fetches_.erase(unique_id); } std::unique_ptr diff --git a/content/browser/background_fetch/background_fetch_scheduler.h b/content/browser/background_fetch/background_fetch_scheduler.h index f48e974ed2f4..f1e27f402f02 100644 --- a/content/browser/background_fetch/background_fetch_scheduler.h +++ b/content/browser/background_fetch/background_fetch_scheduler.h @@ -171,14 +171,23 @@ class CONTENT_EXPORT BackgroundFetchScheduler // The current fetch job controllers that are being processed. base::circular_deque active_controllers_; - // Map from |unique_id|s to {|registration_id|, |registration|}. + struct RegistrationData { + RegistrationData( + const BackgroundFetchRegistrationId& registration_id, + blink::mojom::BackgroundFetchRegistrationDataPtr registration); + ~RegistrationData(); + + BackgroundFetchRegistrationId registration_id; + blink::mojom::BackgroundFetchRegistrationDataPtr registration; + // Wheter all processing is completed and this data is safe to erase now. + bool processing_completed = false; + }; + + // Map from |unique_id|s to the registration data. // An entry in here means the fetch has completed. This information is needed // after the fetch has completed to dispatch the backgroundfetchclick event. // TODO(crbug.com/857122): Clean this up when the UI is no longer showing. - std::map> - completed_fetches_; + std::map> completed_fetches_; // Scheduling params - Finch configurable. int max_running_downloads_; diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/client_hints/client_hints.cc index 12b6dc261d9b..46297743f221 100644 --- a/content/browser/client_hints/client_hints.cc +++ b/content/browser/client_hints/client_hints.cc @@ -367,10 +367,6 @@ bool IsValidURLForClientHints(const GURL& url) { return true; } -bool UserAgentClientHintEnabled() { - return base::FeatureList::IsEnabled(features::kUserAgentClientHint); -} - void AddUAHeader(net::HttpRequestHeaders* headers, network::mojom::WebClientHintsType type, const std::string& value) { @@ -580,7 +576,7 @@ void UpdateNavigationRequestClientUaHeaders( bool override_ua, FrameTreeNode* frame_tree_node, net::HttpRequestHeaders* headers) { - if (!UserAgentClientHintEnabled() || + if (!delegate->UserAgentClientHintEnabled() || !ShouldAddClientHints(url, IsJavascriptEnabled(frame_tree_node), delegate)) { return; @@ -640,7 +636,7 @@ void AddNavigationRequestClientHintsHeaders( AddLangHeader(headers, context); } - if (UserAgentClientHintEnabled()) { + if (delegate->UserAgentClientHintEnabled()) { UpdateNavigationRequestClientUaHeadersImpl( url, delegate, is_ua_override_on, frame_tree_node, ClientUaHeaderCallType::kDuringCreation, headers); @@ -696,7 +692,7 @@ void PersistAcceptCHAfterNagivationRequestRedirect( base::Optional> parsed = blink::FilterAcceptCH(headers->accept_ch.value(), false /* permit_lang_hints */, - UserAgentClientHintEnabled()); + delegate->UserAgentClientHintEnabled()); if (!parsed.has_value()) return; diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index 4d4fb1b35e75..e10b3ca821f4 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc @@ -3425,11 +3425,19 @@ void NavigationRequest::OnWillProcessResponseProcessed( DCHECK(processing_navigation_throttle_); processing_navigation_throttle_ = false; if (result.action() == NavigationThrottle::PROCEED) { + base::WeakPtr weak_self(weak_factory_.GetWeakPtr()); + // If the navigation is done processing the response, then it's ready to // commit. Inform observers that the navigation is now ready to commit, // unless it is not set to commit (204/205s/downloads). if (render_frame_host_) ReadyToCommitNavigation(false); + + // The call above might block on showing a user dialog. The interaction of + // the user with this dialog might result in the WebContents owning this + // NavigationRequest to be destroyed. Return if this is the case. + if (!weak_self) + return; } else { state_ = CANCELING; } diff --git a/content/public/browser/client_hints_controller_delegate.h b/content/public/browser/client_hints_controller_delegate.h index 05665062f4a1..47781e7e3c6a 100644 --- a/content/public/browser/client_hints_controller_delegate.h +++ b/content/public/browser/client_hints_controller_delegate.h @@ -43,6 +43,8 @@ class CONTENT_EXPORT ClientHintsControllerDelegate virtual bool IsJavaScriptAllowed(const GURL& url) = 0; + virtual bool UserAgentClientHintEnabled() = 0; + virtual blink::UserAgentMetadata GetUserAgentMetadata() = 0; virtual void Bind( diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 24cc831cbe5d..1837606a8bc2 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc @@ -684,7 +684,7 @@ const base::Feature kUserActivationSameOriginVisibility{ // An experimental replacement for the `User-Agent` header, defined in // https://tools.ietf.org/html/draft-west-ua-client-hints. const base::Feature kUserAgentClientHint{"UserAgentClientHint", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; // Controls whether the